
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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
「RunSQL」と「Execute」の違い
Access(アクセス)
-
SQL文で パラメータが少なすぎます エラー
Access(アクセス)
-
Accessでテーブル名やクエリ名一覧の抜き出し
Access(アクセス)
-
-
4
Access DAOのExecuteメソッドのオプション(RecordsetOptionEnum)に
Access(アクセス)
-
5
Access サブフォームでの選択行の取得
その他(データベース)
-
6
Access VBAから使用したExcelプロセスを閉じる方法について
Visual Basic(VBA)
-
7
Accessのマクロでモジュールを実行させたい。
Access(アクセス)
-
8
AccessのDAOでフィールド名を配列に格納して・・・
Visual Basic(VBA)
-
9
Access2010 「演算子がありません」エラー
その他(データベース)
-
10
AceessVBA 非同期処理について
Visual Basic(VBA)
-
11
AccessのSQL文で1件のみヒットしたら終了させる構文。
その他(データベース)
-
12
レコードを保存するコード アクセスvba
その他(Microsoft Office)
-
13
MS Accessでフォームの「開く時」と「読込み時」のイベントの違い
Access(アクセス)
-
14
Accessの画面更新を一時的に停止する方法。
その他(データベース)
-
15
ADOを使ったDBアクセス後のメモリ解放
その他(データベース)
-
16
Access 削除クエリが重い
その他(データベース)
-
17
パラメータが少なすぎます。1を指定して下さい。""
Excel(エクセル)
-
18
ACCESSでクエリを作成したら「式が複雑すぎます。」の表記が…
その他(データベース)
-
19
dbFailOnError とは?
その他(データベース)
-
20
ACCESSでコントロールソースの変更
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel-VBAの「しばらくお待ちく...
-
バッチからSQLCMDを実行する方法
-
SQLCMDにて教えていただきたい...
-
【Oracle】ADOでSELECT * FROM ...
-
ユーザー定義関数内でのsp_exec...
-
インデックスの断片化が解消さ...
-
サーバーと実行端末が違う場合...
-
SQLServerのジョブからバッチを...
-
Excelフィルタ抽出で「検索して...
-
sqlcmdでクエリの実行結果をバ...
-
VACUUM FULLの使用するタイミン...
-
UPDATE時のSETの実行順について
-
SQLServer2005のストプロでxp_c...
-
データベース SQL のセッショ...
-
accessでSQLをファイルから実行...
-
SQLServer(MSDE) JOBの状態取得...
-
静的SQL、動的SQL?
-
SQLサーバーのジョブでのexeフ...
-
バッチでのSQL実行結果の分岐処...
-
SQL SERVER エージェントの権限
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel-VBAの「しばらくお待ちく...
-
AccessのDAO.ExecuteとDoCmd.Ru...
-
SQLServerのジョブからバッチを...
-
アクションクエリが実行できない
-
ストアドの速度がクエリの30...
-
sqlcmdでクエリの実行結果をバ...
-
Excelフィルタ抽出で「検索して...
-
SQLCMDにて教えていただきたい...
-
SQLServer2005のストプロでxp_c...
-
データベース SQL のセッショ...
-
100万件レコードdelete
-
バッチからメンテナンスプラン...
-
ユーザー定義関数内でのsp_exec...
-
UPDATE時のSETの実行順について
-
SQL-Loaderが動かないです。
-
指定時刻のクエリ自動実行
-
バッチでのSQL実行結果の分岐処...
-
SQLサーバーのジョブでのexeフ...
-
同じSQL文で速度がだいぶ違う
-
ORACLEでのexportのbatファイル...
おすすめ情報