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()関数などを利用して取得してください。
RecordsAffectedプロパティは処理後の件数を取得するプロパティなので、アクションクエリ実行前に対象レコード数を把握する必要があれば、別途Dcount()関数などを利用して取得してください。
まとめ
アクションクエリはDBを直接大量に更新することができますので、誤った条件で更新してしまうと大惨事になります。
事前の件数確認、処理後の件数確認は重要ですので、ぜひ使ってみてください。
コメント