Access VBA質問箱 IV

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

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


7009 / 9994 ←次へ | 前へ→

【6182】Re:多分、必要
回答  たん  - 05/9/7(水) 8:39 -

引用なし
パスワード
   推測の部分もありますが、多分、こんな感じ?

各Executeメソッドが非同期で実行されている可能性があり、非同期実行によるリスクを
避ける為に、DoEventsで制御していると思われます。

-----
非同期:
非同期式クエリーもサポートします。クエリーを実行するときに、ほかの操作を始める前に
クエリーの実行が終了するのを待つ必要はありません。
-----

つまり、クエリー自体の処理件数、マシンスペックやネットワーク環境等に依存する可能性も
ありますが、

> CurrentDb.Execute "DELETE * FROM wrk1;" (1)
> DoEvents
>      
> (略)
> DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel8, _
>  "wrk1", strFileName, False, "", True (2)

という場合、DoEventsが無ければ、(1)が完了する前に、(2)が非同期で起動され、
最悪の場合、(2)で転送中のデータが(1)によって削除され、(2)終了時のデータに
整合が取れなくなる可能性があるということです。

> strSQL = "UPDATE wrk4 AS A INNER JOIN wrk3 AS B ON A.AName = B.AName "
> strSQL = strSQL & "SET B.ACode = A.ACode;"
>
> CurrentDb.Execute strSQL (3)
> DoEvents
>
> strSQL = "SELECT * FROM wrk1 WHERE F1 Is Null;"
> Set rs2 = CurrentDb.OpenRecordset(strSQL, dbOpenSnapshot) (4)

また、(3)でstrSQL変数に格納たものが実行されていますが、(4)の手前で
strSQLが更新されており、(3)の実行が完了していなければ、strSQL変数の
中身は整合が取れていない事になります。

# メモリの実行上は既に(3)で処理が動いているので、処理自体には問題が発生しないと
# 思われますが、私も所詮1ユーザなので、メモリ管理が内部でどう動いているかは
# 分かりません。

解決策としては、一連の処理をトランザクション化して、各SQL実行の同期を取るのが
良いと思われますが、具体的なルーチンは勘弁。
(BeginTrans等を使います。)

各SQLは前述したように、さまざまな環境に依存しますので、今回テストした時に、
DoEventsを外して早くなったので「外してOK」という判断は早計と思われます。

前任者はそういう非同期による処理異常をふせぐ事を踏まえ、DoEventsを各処理の
間に入れていると思われます。
(トランザクション化を知らなかった可能性もありますが。)

2,718 hits

【6176】DoEventsの必要性? たな 05/9/6(火) 17:56 質問
【6180】Re:DoEventsの必要性? 小僧 05/9/6(火) 20:08 回答
【6182】Re:多分、必要 たん 05/9/7(水) 8:39 回答
【6184】Re:多分、必要 たな 05/9/7(水) 9:08 発言
【6185】Re:多分、必要 たん 05/9/7(水) 9:22 回答
【6187】Re:多分、必要 たな 05/9/7(水) 9:37 お礼
【6186】Re:多分、必要 たな 05/9/7(水) 9:31 質問
【6183】Re:DoEventsの必要性? たな 05/9/7(水) 8:49 お礼
【6188】Re:DoEventsの必要性? 小僧 05/9/7(水) 10:00 発言
【6189】Re:Executeメソッドのヘルプより たん 05/9/7(水) 10:17 回答
【6190】Re:Executeメソッドのヘルプより 小僧 05/9/7(水) 10:26 発言
【6192】Re:Executeメソッドのヘルプより たん 05/9/7(水) 11:22 回答
【6195】Re:Executeメソッドのヘルプより 小僧 05/9/7(水) 12:02 発言
【6221】Re:Executeメソッドのヘルプより たな 05/9/8(木) 8:50 お礼

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