Access

アクションクエリで処理した件数(レコード数)を取得する方法

記事内に商品プロモーションを含む場合があります

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

 

パラメータクエリーに引数を渡してVBAで実行するパラメータクエリー(アクションクエリー)に引数を渡してVBAで実行するサンプルプログラムです。 コピペでご利用ください。※ご利用は...

RecordsAffectedプロパティは処理後の件数を取得するプロパティなので、アクションクエリ実行前に対象レコード数を把握する必要があれば、別途Dcount()関数などを利用して取得してください。

まとめ

アクションクエリはDBを直接大量に更新することができますので、誤った条件で更新してしまうと大惨事になります。

事前の件数確認、処理後の件数確認は重要ですので、ぜひ使ってみてください。

ABOUT ME
アズビーパートナーズ
プログラマー→社内SE→SIerのお仕事をしています。 メーカー勤務を経て、中小企業の社内SE、フリーランスなど様々な形態で働いてきました。 業務上生まれた困った…を解決してきたTipsを備忘録も兼ねて公開しています。 困っている誰かのお役に立てれば幸いです。