AccessVBAでクエリ(SQL)を実行する

スポンサーリンク

AccessVBAで更新クエリ・削除クエリなどを連続して実行できる

選択クエリ・集計クエリなどレコードを変更しないクエリに関してはAccessVBAで修正するメリットは少ないですが、更新クエリ・削除クエリなどに関しては「実行する」ステップがあるため、AccessVBAを使用することでより柔軟な処理が可能になります。

特にある順序で連続してクエリを実行したり、パラメータを少し変更したクエリを複数回実行するなどの処理においてAccessVBAは非常に有用です。
今回はAccessVBAでクエリを実行するコードを紹介します。

AccessVBAでクエリを修正するコードはすべてのクエリで共通

クエリを修正するAccessVBAコードは前回紹介したようにどんなクエリでも同じように使用可能です。
更新クエリ・削除クエリなどを実行する場合はさらにそこから「実行する」コードを追加することになります。

スポンサーリンク

更新・削除クエリを実行するAccessVBAのコード

クエリを実行するコードは以下のようになります。

DoCmd.RunSQL (“実行するクエリのSQL”)

クエリをデータベース上に保存していて、そのSQLを呼び出す場合は次のように記載します。
こちらはデータベース上の「Q_お試し」というクエリを実行するAccessVBAコードになります。

Sub クエリ実行()

Dim StrSQL As String
StrSQL = CurrentDb.QueryDefs(“Q_お試し”).SQL
DoCmd.RunSQL (StrSQL)

End Sub

変数StrSQLにクエリ「Q_お試し」のSQLを代入し、実行する流れになります。

SQLを一から作成する場合は以下のように記載します。

Sub クエリ実行2()

Dim StrSQL As String
StrSQL = “DELETE [仕入伝票一覧].[店番] ” & _
“FROM [仕入伝票一覧] ” & _
“WHERE [仕入伝票一覧].[店番]=””1″”;”

DoCmd.RunSQL (StrSQL)

End Sub

クエリの修正の際と同じくStrSQLに直接SQLを記載します。
改行の際は前後のどちらかに半角スペースをつけるのを忘れないようにしましょう。

アラートを消すコードを付けてデータを消したり、更新する際にアラートが出ないようにする

削除クエリや更新クエリを実行すると「〇〇件のレコードが指定したテーブルから削除されます」や「〇〇件のレコードが更新されます」などのアラートが表示されます。

このアラートが出るとVBAが中断されるため、連続で色々な処理を実行する際は以下のコードを追加し、アラートを表示させないようにしておく必要があります。

DoCmd.SetWarnings False

ExcelVBAでいうところのApplication.DisplayAlertsと同じ処理ですが、Excelよりも扱いに気を付けないといけないのは「解除を忘れるとそのVBAの実行中だけでなく、ファイルを閉じるまでずっとアラートが出てこなくなる」ことです。

下記のようにクエリの実行後に「DoCmd.SetWarnings True」と必ず記載して、アラートが出るように戻しましょう。

Sub アラートを表示させないようにクエリ実行()

Dim StrSQL As String
StrSQL = “DELETE [仕入伝票一覧].[店番] ” & _
“FROM [仕入伝票一覧] ” & _
“WHERE [仕入伝票一覧].[店番]=””1″”;”

DoCmd.SetWarnings False ’アラートを出なくする
DoCmd.RunSQL (StrSQL)
DoCmd.SetWarnings True ’アラートを出るように戻す

End Sub

コメント