Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


342 / 9994 ←次へ | 前へ→

【12965】Docmd.RunSQLだと問題ないのにDatabase.Exeuteだと反映にタイムラグが出る
質問  亀マスター  - 16/3/9(水) 23:55 -

引用なし
パスワード
   初めて質問させていただきます。

現在、社内システムをAccessで構築していますが、
INSERT INTOやDELETEのSQLをVBAから実行する際、
実行方法によってはデータベースへの反映に
時間がかかり、SQL実行直後にデータを拾おうと
すると更新前のデータになってしまうことがあり、
困っています。

具体的には、ある帳票フォームにレコードの削除・更新等のボタンを配置し、
そのクリックイベントとして以下のようなものを書いています。

−−−−−−−−−−−−−−−−−−−−−−−−−−
環境
Windows 7 Pro 32bit
Access 2013

※説明の簡略化のためエラートラップは省略しています
Dim strSQL As String
Dim WSP As Workspace
Dim DB as DAO.Database

strSQL = "削除クエリ、追加クエリ等"

'↓↓Execute使用パターン↓↓
Set WSP = Workspaces(0)
Set DB = CurrentDb

WSP.BeginTrans
DB.Execute strSQL
WSP.CommitTrans dbForceOSFlush

DBEngine.Idle dbRefreshCache

Set DB = Nothing
Set WSP = Nothing
'↑↑Execute使用パターン↑↑

'↓↓DoCmd.RunSQL使用パターン↓↓
DoCmd.RunSQL strSQL
'↑↑DoCmd.RunSQL使用パターン↑↑

Me.Requery
−−−−−−−−−−−−−−−−−−−−−−−−−−
実は元々DoCmd.RunSQLを使っており、その際は問題なかったのですが、
複数のSQLを連続して使う際にあまりよくないと聞いたもので、
Database.Executeを使うパターンに切り替えたのです。
しかし、そうすると、Me.Requeryをしたにも拘わらず、更新前の
ままになってしまいます。また、別のフォームで、
Me.RequeryのところにDLookupを使っているものがあるのですが、
そちらでも、更新前のデータしか得られません。

ただ、Me.RequeryやDLookupの前にMsgBoxやSleepで
5秒程度(2〜3秒ではうまくいくことといかないことがある)
待ってやると、うまく更新後のデータが拾えるようです。
このことから、キャッシュによるラグが生じていると予想
されるのですが、その対策として
WSP.CommitTrans dbForceOSFlush
DBEngine.Idle dbRefreshCache
を入れているのに、改善されません。

なお、更新対象のテーブルはサーバー上のAccdb(データ専用)に
リンクしているものと、ユーザー側のAccdb(プログラム用)に
システムデータ用に使っているものがありますが、どちらの
テーブルでも同じことが起こります。プログラム用のテーブル
相手でも起こることから、少なくともそちらはサーバーとの
接続速度の問題ではないと思うのですが…。

一応、Sleepで待ってやれば対応出来るのですが、それは
うっとうしいし、なんとか即時反映させたいのですが…
どなたか、お知恵を拝借出来ないでしょうか。

976 hits

【12965】Docmd.RunSQLだと問題ないのにDatabase.Exeuteだと反映にタイムラグが出る 亀マスター 16/3/9(水) 23:55 質問[未読]
【12967】Re:Docmd.RunSQLだと問題ないのにDatabase... かるびの 16/3/10(木) 10:47 回答[未読]
【12968】Re:Docmd.RunSQLだと問題ないのにDatabase... 亀マスター 16/3/11(金) 0:23 お礼[未読]
【12969】Re:Docmd.RunSQLだと問題ないのにDatabase... 亀マスター 16/3/14(月) 20:20 発言[未読]

342 / 9994 ←次へ | 前へ→
ページ:  ┃  記事番号:
1078188
(SS)C-BOARD v3.8 is Free