
No.2ベストアンサー
- 回答日時:
DoCmd.RunSQL ですが、「非同期」であると幾つかのHPで見かけましたが、実際試してみると「同期」実行している感じです(Access2000で実験)。
実際「非同期」なんでしょうか?
オフィシャルなサイトに「非同期である」と言う記述はありますか?
------------検証プログラム------------
Sub local_test()
Dim SQL(4) As String
Dim t As Double
SQL(1) = "UPDATE T1 SET Data = '0';"
SQL(2) = "UPDATE T1 SET Data = '1';"
SQL(3) = "UPDATE T2 SET Data = '0';"
SQL(4) = "UPDATE T2 SET Data = '1';"
'初期化
CurrentDb.Execute SQL(1)
CurrentDb.Execute SQL(3)
'DoCmd.RunSQL テスト--------------------------------------------
DoCmd.SetWarnings False
t = Timer()
DoCmd.RunSQL SQL(2)
Debug.Print "DoCmd.RunSQL " & Format(Timer() - t, "0.00000")
DoCmd.SetWarnings True
'DAO.Execute テスト--------------------------------------------
t = Timer()
CurrentDb.Execute SQL(4)
Debug.Print "CurrentDb.Execute " & Format(Timer() - t, "0.00000")
End Sub
---------------------------------------------------------
T1 T2 とも、3万件程度のテストデータが入っています。
DoCmd.RunSQL の方も処理が終わるまで返ってきません(同期実行では?)
DoCmd.RunSQL は SetWarnings を設定しないと、確認メッセージが出でます。
DoCmd.RunSQL が同期実行だとすると、これ以外に大きな違いは無いのかも知れませんね。
##########################################################
今度はADOを使って無理やり非同期実験
別のmdbにファイルにADOでアクセスしています。
------------検証プログラム------------
Sub ado_test()
Dim cnn(2) As New ADODB.Connection
Dim SQL(6) As String
Dim dbName As String
Dim t As Double
dbName = "c:\temp\db1.mdb"
SQL(1) = "UPDATE T1 SET Data = '0';"
SQL(2) = "UPDATE T1 SET Data = '1';"
SQL(3) = "UPDATE T1 SET Data = '2' WHERE Data = '1';"
SQL(4) = "UPDATE T2 SET Data = '0';"
SQL(5) = "UPDATE T2 SET Data = '1';"
SQL(6) = "UPDATE T2 SET Data = '2' WHERE Data = '1';"
cnn(1).Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & dbName & ";"
cnn(2).Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & dbName & ";"
'初期化
cnn(1).Execute SQL(1)
cnn(1).Execute SQL(4)
'同期実行テスト--------------------------------------------
t = Timer()
cnn(1).Execute SQL(2)
cnn(1).Execute SQL(3)
Debug.Print "同期実行 " & Format(Timer() - t, "0.00000")
'非同期実行テスト--------------------------------------------
t = Timer()
cnn(1).Execute SQL(5), , adAsyncExecute
cnn(2).Execute SQL(6), , adAsyncExecute
Debug.Print "非同期実行 " & Format(Timer() - t, "0.00000")
End Sub
---------------------------------------------------------
非同期の方が明らかに速いです。(処理を待たずに返ってくるので)
非同期の方は正しく更新できてません。
この検証プログラムが正しいのか?、あまり自信はありません(^^;
参考程度にして下さい。
##########################################################
補足
DAOかADOか?
http://www.naboki.net/access/heaven/heaven_14.html
http://homepage2.nifty.com/inform/vbdb/daoado.htm

No.3
- 回答日時:
> > 非同期であれば実行したクエリの内容が完結しないうちに次の SQL を実行しようとする
> 結果どのような問題が発生するのでしょうか?
実行した SQL が実際に DB エンジン側で処理完了する前に、プログラムの次のステップがすぐに実行されるとか。

No.1
- 回答日時:
Access 程度なら特に考慮しなくてもいいんじゃないでしょうかね。
非同期であれば実行したクエリの内容が完結しないうちに次の SQL を実行しようとするので、アクション クエリの実行に時間が掛かるのであれば同期タイプで行ったほうがいいかもしれないですけど。
というかいまどき DAO じゃなくて ADO でやれば?
どっちでも構わないけど。。。
この回答への補足
> 非同期であれば実行したクエリの内容が完結しないうちに次の SQL を実行しようとする
結果どのような問題が発生するのでしょうか?
お手数ですがご回答頂ければ幸いです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 大学・短大 大学生です。自己剽窃について質問です。 同じ先生の授業を前期と後期にわたって受講しているのですが、前 1 2023/01/31 22:56
- ノートパソコン パソコン購入に必要なスペックを教えてください 8 2023/06/21 18:56
- Excel(エクセル) エクセルの複数条件作成方法について 2 2023/01/23 21:38
- Access(アクセス) Access DAOのExecuteメソッドのオプション(RecordsetOptionEnum)に 1 2022/09/19 07:34
- Excel(エクセル) Excelでの検索結果を含む行だけを表示させたい 5 2023/03/10 17:08
- その他(学校・勉強) 質問のマルチポストの是非を問う数理的問題 1 2023/02/13 13:43
- デジタルカメラ Panasonic LUMIX GH6の今後について教えて下さい! 2 2023/05/10 07:46
- 事件・犯罪 刑法についてです 2 2022/06/04 03:11
- 大学受験 自己推薦書の添削や意見・アドバイスお願いします 2 2022/08/27 19:34
- 車検・修理・メンテナンス 車の車検の期日を過ぎてから無保険車状態を脱却するには? 12 2023/07/23 22:04
このQ&Aを見た人はこんなQ&Aも見ています
-
「RunSQL」と「Execute」の違い
Access(アクセス)
-
Access DAOのExecuteメソッドのオプション(RecordsetOptionEnum)に
Access(アクセス)
-
Accessでテーブル名やクエリ名一覧の抜き出し
Access(アクセス)
-
-
4
Access サブフォームでの選択行の取得
その他(データベース)
-
5
SQL文で パラメータが少なすぎます エラー
Access(アクセス)
-
6
Accessのマクロでモジュールを実行させたい。
Access(アクセス)
-
7
Access2010 「演算子がありません」エラー
その他(データベース)
-
8
AceessVBA 非同期処理について
Visual Basic(VBA)
-
9
Access VBAから使用したExcelプロセスを閉じる方法について
Visual Basic(VBA)
-
10
MS Accessでフォームの「開く時」と「読込み時」のイベントの違い
Access(アクセス)
-
11
AccessのSQL文で1件のみヒットしたら終了させる構文。
その他(データベース)
-
12
【ACCESS】フォーム名/コントロール名を文字列型変数で指定するには
Access(アクセス)
-
13
アクセス 壊れた? 「ファイルが見つかりません」
Access(アクセス)
-
14
レコードを保存するコード アクセスvba
その他(Microsoft Office)
-
15
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
16
AccessのDAOでフィールド名を配列に格納して・・・
Visual Basic(VBA)
-
17
ACCESSで値を代入できないとは?
Visual Basic(VBA)
-
18
dbFailOnError とは?
その他(データベース)
-
19
Access 削除クエリが重い
その他(データベース)
-
20
Accessのコマンドボタンの立体化について
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel-VBAの「しばらくお待ちく...
-
SQLCMDにて教えていただきたい...
-
ストアドの速度がクエリの30...
-
同じSQL文で速度がだいぶ違う
-
ユーザー定義関数内でのsp_exec...
-
Excelフィルタ抽出で「検索して...
-
AccessのDAO.ExecuteとDoCmd.Ru...
-
sqlcmdでクエリの実行結果をバ...
-
SQLServer2005のストプロでxp_c...
-
アクションクエリが実行できない
-
バッチからSQLCMDを実行する方法
-
オラクルインストールユーザ以...
-
Accessからストアドプロシジャ...
-
SQL SERVER エージェントの権限
-
accessでSQLをファイルから実行...
-
100万件レコードdelete
-
ORACLEでのexportのbatファイル...
-
SQLサーバーのジョブでのexeフ...
-
SQL文の実行結果の保存・印刷に...
-
Access2010のマルチコアCPUへの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel-VBAの「しばらくお待ちく...
-
SQLCMDにて教えていただきたい...
-
AccessのDAO.ExecuteとDoCmd.Ru...
-
バッチでのSQL実行結果の分岐処...
-
ストアドの速度がクエリの30...
-
SQLServerのジョブからバッチを...
-
SQLServer2005のストプロでxp_c...
-
100万件レコードdelete
-
Excelフィルタ抽出で「検索して...
-
同じSQL文で速度がだいぶ違う
-
SQLサーバーのジョブでのexeフ...
-
ユーザー定義関数内でのsp_exec...
-
SQL-Loaderが動かないです。
-
sqlcmdでクエリの実行結果をバ...
-
データベース SQL のセッショ...
-
バッチからメンテナンスプラン...
-
アクションクエリが実行できない
-
オラクルインストールユーザ以...
-
xp_cmdshellについて
-
【Oracle】ADOでSELECT * FROM ...
おすすめ情報