一定期間更新がないため広告を表示しています
スポンサーサイト
- 2022/06/17
- -
- -
- -
- 記事URL https://plus-sys.jugem.jp/?eid=
Twitterはじめました。プラプラ | Twitter
【Access】あれ?DoCmd.RunCommand acCmdSaveRecordの内部仕様が変わった?
- 2013/07/18
- AccessTips
- comments(1)
- trackbacks(0)
- 記事URL https://plus-sys.jugem.jp/?eid=412
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でレコード更新直後の反映について
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でレコード更新直後の反映について
Twitterはじめました。プラプラ | Twitter
スポンサーサイト
- 2022/06/17
- -
- -
- -
- 記事URL https://plus-sys.jugem.jp/?eid=
Twitterはじめました。プラプラ | Twitter
[関連エントリ 最新5]-
[Google PR]
[最新エントリ 5]-
- コメント
- win7+2010でacCmdSaveRecordもacCmdRefreshでもダメで躓いておりました。
この記事は大変助かりました。
me.refreshで問題なく動作しています。
ありがとうございました。 -
- 花姉
- 2016/03/17 11:37 AM
- コメントする(お気軽にどうぞ)
- この記事のトラックバックURL
- トラックバック
- カテゴリー
-
- Vista (15)
- AccessTips (74)
- 雑記 (68)
- セキュリティー (23)
- おもしろいサービス (5)
- tool (12)
- あまっちゃお (4)
- コンピュータ (66)
- CakePHP (25)
- VAIOTypeP[バイオタイプピー] (12)
- SQLServer (25)
- iPad (36)
- Apple Watch (5)
- AWS認定 (1)
- Azure (4)
- e-mobile (8)
- iOSアプリ (18)
- iPhone (2)
- iPhoneX (2)
- ipod touch (3)
- kindle (18)
- Monaca (1)
- Nexus7 (11)
- VAIO PRO (1)
- VAIO X[バイオ エックス] (1)
- VAIO Z (5)
- Windows10 (1)
- Windows8 (7)
- Windows9 (1)
- XPERIA Z1 (1)
- XperiaZ (6)
- 【全記事一覧】 (1)
- おすすめ本まとめ (2)
- クラウド (1)
- セール (3)
- デジモノ (24)
- 本(BOOK) (9)
- 腕時計 (1)
- プロフィール
- 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)
- 【Access】コンボボックス対応版。超簡単な帳票フォームでの矢印上下キー行移動。
- recent trackback
-
- 【Access】2003安全でない式がブロックされていませんとセキュリティーレベル。
⇒ awgs Foundry (10/29) - 【VAIOtypeP】液晶保護シートは、新車のカバーではない。レイアウト社液晶/天板保護フィルムセットRT-VP1FS1
⇒ XMLがキライ。 (04/09) - Vistaから、LinkStation(NAS)にアクセスできません。
⇒ そのほかいろいろ (09/06)
- 【Access】2003安全でない式がブロックされていませんとセキュリティーレベル。
- sponsored links