Accessでアクションクエリを実行する方法はいくつかあります。
直接クエリを実行する方法・VBAからSQLコマンドを実行する方法・VBAでQueryDefオブジェクトを利用して実行する方法などです。
直接クエリを実行すれば処理したレコード件数は表示されますが、今日はVBAで実行した際の処理レコード数の確認方法をご紹介します。
アクションクエリで処理した件数(レコード数)を取得する方法
アクションクエリの実行後、処理対象となったレコード数を取得するには「RecordsAffected」プロパティを使います。
VBAからSQLコマンドを実行して処理件数を取得する
DatabaseオブジェクトのExecuteメソッドを利用して更新クエリ(SQLコマンド)を実行します。
その後、DatabaseオブジェクトのRecordsAffectedプロパティで処理件数を取得します。
Private Sub DoUpd() Dim myDb As Database Dim strsql As String Set myDb = CurrentDb strsql = "UPDATE テーブルA SET フラグ = 1 WHERE 条件 = TRUE" '更新クエリを実行 myDb.Execute strsql 'RecordsAffectedプロパティで取得した処理件数を表示 MsgBox myDb.RecordsAffected & "件のレコードを更新しました", vbOKOnly + vbInformation End Sub
VBAからQueryDefオブジェクトを利用して処理件数を取得する
QueryDefオブジェクトを使うメリットは、あらかじめ保存した更新クエリをパラメータで可変にできることですよね。
今回はパラメータクエリ(アクションクエリ)をQueryDefオブジェクトのExecuteメソッドで実行します。
その後、QueryDefオブジェクトのRecordsAffectedプロパティで処理件数を取得します。
Private Sub DoUpd() Dim myDb As Database Dim strsql As String Set myDb = CurrentDb Set myQdef = myDb.QueryDefs("更新クエリ") With myQdef 'パラメータに値をセットしてクエリを実行 .Parameters("パラメーター") = 1 .Execute 'RecordsAffectedプロパティで取得した処理件数を表示 MsgBox .RecordsAffected & " 件のレコードを更新しました", vbOKOnly + vbInformation End With End Sub
RecordsAffectedプロパティは処理後の件数を取得するプロパティなので、アクションクエリ実行前に対象レコード数を把握する必要があれば、別途Dcount()関数などを利用して取得してください。
まとめ
アクションクエリはDBを直接大量に更新することができますので、誤った条件で更新してしまうと大惨事になります。
事前の件数確認、処理後の件数確認は重要ですので、ぜひ使ってみてください。