ACCESS:フラグを消し去るVBA #3 Execute
- (2010-02-18 05:12:23)
上記の「Do Loop方式」はコードの記述が多いので、なんかこう一発でコードを書けるやり方はないかと探すと「Execute」と「DoComd.RunSQl」が使えそう。
「Execute」と「DoComd.RunSQl」の意味の違いは不明。勝手に推測すると
・「Execute」:Jetデータベースエンジンを外部プログラムから操作するためのオブジェクト体系であるDAO(*1)の中のコマンドの一つ。DAOはJetデータベースエンジン専用のオブジェクト体系で、JetデータベースエンジンとACCESSネイティブなコマンド体系?
・「DoComd.RunSQl」:「DoComd」シリーズはACCESS内に組み込まれているACCESSの操作を自動化するコマンド体系。ACCESSのマクロパートからマクロを作成しコード変換すると「DoComd○○」という形式になるものが多いことから、もともとACCESSの開発過程でマクロパートの部分用に独自に開発されたコード体系ではなかろうか。このコードをベースに逆にビジュアル化した部分がACCESSマクロではなかろうかと推測。もしそうならACCESS内のコードで、ACCESSネイティブだろうから処理スピードが速いのでは?(と予想したが実験ではそれほどでもなかった->後述)
(*1)DAO:Data Access Objects(DAO)。同じような操作ができるコマンド体系として他にActiveX Data Objects(ADO)が提供されている。ADOはODBC準拠とのこと。そのため他のデータベース製品操作も可能な点で汎用性が非常に高い。今後DAOに代わってACCESSの操作オブジェクトではADOが標準的なコマンド体系になる模様。
2)フラグを消し去る(DAO+Execute方式)
「Execute」を使用。
オブジェクトの宣言->オブジェクトのset->SQLの記述->DAOでExecuteメソッドの実行->オブジェクトのClose&解放。
Private Sub フラグクリア_Click()
Dim DB As Database
Dim SQL1 As String, SQL2 As String
Set DB = CurrentDb
'データ更新のためのSQL文(update テーブル名 set フィールド名 = 内容)とその実行(Execute)
SQL1 = "UPDATE [テーブル1] SET [フィールド1] = False, [フィールド2] = False"
SQL2 = "UPDATE [テーブル2] SET [フィールド3] = False, [フィールド4] = False"
DB.Execute (SQL1)
DB.Execute (SQL2)
DB.Close
Set DB = Nothing
End Sub
この記事は#3
ACCESS:フラグを消し去るVBA #5 スピード対決
ACCESS:フラグを消し去るVBA #4 DoCmd.RunSQL
ACCESS:フラグを消し去るVBA #3 Execute
ACCESS:フラグを消し去るVBA #2 Do Loop
ACCESS:フラグを消し去るVBA #1 消し忘れ