スポンサーサイト

一定期間更新がないため広告を表示しています

[Google PR]

Twitterはじめました。プラプラ | Twitter

【Access】あれ?DoCmd.RunCommand acCmdSaveRecordの内部仕様が変わった?

Access2003ベースで作成した、
MDB(DAO)システム(スタンドアロン)でのお話。

入力画面を作る際、ワークテーブル連結のフォームにしておき、
確定ボタンを押下時に、ワークテーブルの内容を
DBへ更新へいくといった画面をよく作ります。

そして、画面入力中データを確定させる際、
DoCmd.RunCommand acCmdSaveRecordを使っています。

動作イメージとしては、
登録ボタン押下時に、DoCmd.RunCommand acCmdSaveRecordで
入力データを確定させ、その後に入力値チェック、DB更新処理と
いった流れ。

で、今回はまったのが、この DoCmd.RunCommand acCmdSaveRecord は、

・WinXP + Access2003 では問題なく動作するのに、

・Win7 + Access2010 や、
・Win8 + Access2013 では、エラーが発生するケースがあること。

エラー内容は、
「3218:現在ロックされているので、更新できません。」という内容。

ちなみに、スタンドアロンなので自分以外はロックをとっていません。
(自分の別セッションがロックをとることもあるので、スタンドアロン
でもロックは発生します。)

ソースは以下のような感じ。

Set db = CurrentDb
Set wsp = DBEngine.Workspaces(0)

DoCmd.Hourglass True

wsp.BeginTrans

strSQL = 更新処理のSQL

db.Execute strSQL, dbFailOnError ←ここでロックエラー

調べてみると、トランザクションをかけていると、タイミングにより
ロックエラーが発生するようです。トランザクションをかけない場合は
正常実行されます。

不思議なことに、少し時間を置くとエラーなく実行できます。
また、データベースを排他モードで開いているエラーはでません。

察するに、DoCmd.RunCommand acCmdSaveRecord でデータを
確定させる際、確定後もしばらくはロックをとっている状態に
なっているような気がします。

そこで、DoCmd.RunCommand acCmdSaveRecordに変わるものを
探したところ、
DoCmd.RunCommand acCmdRefresh
というものがありました。

acCmdSaveRecordではなく、acCmdRefresh。

入力中のデータを確定させるという意味ではどちらも
似たようなものですが、
DoCmd.RunCommand acCmdRefresh を使うと、
Access2010以降でもロックエラーなくトランザクションが実行できました。

Access2003だとacCmdSaveRecordでも問題ないんだけどねー。

(2013/08/31 追記)
Me.refreshでもいいかも。未検証ですが。

以上、ご参考になれば。

スタンドアロンじゃない場合、こんなケースもあるようです。
accessでレコード更新直後の反映について

[Google PR]

Twitterはじめました。プラプラ | Twitter

スポンサーサイト

[Google PR]

Twitterはじめました。プラプラ | Twitter

<< 【Access】7つの楽技。Accessで簡単にフルパス、カレントパスの取得&存在チェック。
【Access】AccessでFTPダウンロード。ACCESS2013でもOK! >>

[関連エントリ 最新5]

[Google PR]


[最新エントリ 5]

>>トップページ

コメント
win7+2010でacCmdSaveRecordもacCmdRefreshでもダメで躓いておりました。
この記事は大変助かりました。
me.refreshで問題なく動作しています。
ありがとうございました。
  • 花姉
  • 2016/03/17 11:37 AM
コメントする(お気軽にどうぞ)









この記事のトラックバックURL
トラックバック
カテゴリー
プロフィール
links
recent comment
  • 【Access】コンボボックス対応版。超簡単な帳票フォームでの矢印上下キー行移動。
    山田 裕樹 (04/28)
  • 【Access】vbaでhmacが正しく計算できた!!
    まさ (06/01)
  • 【Access】AccessReportMailメール送信時のポートを25から587へ
    わら (05/31)
  • 【SQLServer】超シンプル!再帰CTE(共通テーブル式)で連続データを作成する。
    sazi (09/08)
  • 【あまっちゃお】Amazon商品検索「あまっちゃお」プロジェクト始動。Ver00-06-00 β
    カメちゃん (07/31)
  • 【Access】あれ?DoCmd.RunCommand acCmdSaveRecordの内部仕様が変わった?
    花姉 (03/17)
  • 【Access】実行中のmdb(自分自身)をバックアップコピーする方法。
    亀 (02/06)
  • 【雑記】Amazonでの注文時、TMGさん発送にご注意を。納期を守れない可能性あり!
    管理人 (01/31)
  • 【雑記】Amazonでの注文時、TMGさん発送にご注意を。納期を守れない可能性あり!
    あ (01/31)
  • 【雑記】Amazonでの注文時、TMGさん発送にご注意を。納期を守れない可能性あり!
    K (11/13)
recent trackback
  • 【Access】2003安全でない式がブロックされていませんとセキュリティーレベル。
    awgs Foundry (10/29)
  • 【VAIOtypeP】液晶保護シートは、新車のカバーではない。レイアウト社液晶/天板保護フィルムセットRT-VP1FS1
    XMLがキライ。 (04/09)
  • Vistaから、LinkStation(NAS)にアクセスできません。
    そのほかいろいろ (09/06)
sponsored links