
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も見ています
-
教えて!goo限定!! 電子コミック1000円分ギフトコードプレゼント!!
新規無料会員登録で抽選で1000名様に電子コミック1000円分ギフトコードプレゼント!!
-
「RunSQL」と「Execute」の違い
Access(アクセス)
-
AccessのRefresh・Requery・Repaintの違い
Access(アクセス)
-
Access サブフォームでの選択行の取得
その他(データベース)
-
4
アクセスVBAのMe!と[ ]
Access(アクセス)
-
5
レコードを保存するコード アクセスvba
その他(Microsoft Office)
-
6
SQL文で パラメータが少なすぎます エラー
Access(アクセス)
-
7
dbFailOnError とは?
その他(データベース)
-
8
Accessのテーブルデータを一気にVBAで追加したい・・
その他(データベース)
-
9
フォームを開くときに、コンボボックスの値を選択(アクセスVBA)
Visual Basic(VBA)
-
10
accessでレコード更新直後の反映について
その他(データベース)
-
11
Access フォームのテキストボックスに半角英字のみで入力する設定は
Access(アクセス)
-
12
Accessリンクの仕方によるフロント速度違い
その他(データベース)
-
13
Accessでレコードを別テーブルへコピーするには
Access(アクセス)
-
14
Accessのフォーム更新方法
Access(アクセス)
-
15
親フォームからサブフォームのレコードソースを設定
Access(アクセス)
-
16
accessの処理が遅い
その他(データベース)
-
17
Accessでフィールド名を変数(文字列)で・・・
Access(アクセス)
-
18
【ACCESS】フォーム名/コントロール名を文字列型変数で指定するには
Access(アクセス)
-
19
他のフォームから別のフォームのサブルーチンを呼び出す
Visual Basic(VBA)
-
20
カレントレコードが無い事を判定させる方法
Visual Basic(VBA)
関連するQ&A
- 1 AccessのRunSQLのINSERTでの確認メッセージを消す方法。
- 2 RDO と DAO の違いについて(SQLServer と Accessの違いの続き)
- 3 MS ACCESS2000のVBAでDocmd.openformしてます
- 4 MS-ACCESSでDAOとODAの違いは?
- 5 ACCESS VBA コマンドDoCmd.OpenFormの引数
- 6 アクションクエリでレコード数を制限して実行したい
- 7 Access2007 DoCmd.ApplyFilterのAnd条件について
- 8 Accessクエリ・実行時の値代入
- 9 ACCESSのアクションクエリについて
- 10 [Access2000]アクションクエリでお尋ねします。
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
人気Q&Aランキング
-
4
IDENTITY列を持つテーブルへBCP...
-
5
ストアドの速度がクエリの30...
-
6
AccessのDAO.ExecuteとDoCmd.Ru...
-
7
ORACLEでのexportのbatファイル...
-
8
サーバーと実行端末が違う場合...
-
9
ユーザー定義関数内でのsp_exec...
-
10
VACUUM FULLの使用するタイミン...
-
11
ストアドプロシージャーでバッ...
-
12
Excelフィルタ抽出で「検索して...
-
13
ストアドプロシージャでcsvファ...
-
14
SQLServer2005のストプロでxp_c...
-
15
sqlcmdのオプションについて
-
16
バッチからメンテナンスプラン...
-
17
バッチでのSQL実行結果の分岐処...
-
18
SQLの実行時間を測定するには?
-
19
.SQLファイルをvbaで実行
-
20
【Oracle】ADOでSELECT * FROM ...
おすすめ情報