#504 アクションクエリの処理件数を調べるには? VBA

DocmdオブジェクトのOpenQueryメソッドなどでアクションクエリを実行した場合には、事前に処理件数が実行確認メッセージとして表示されます。一方、VBAを使って、Databaseオブジェクトの「RecordsAffected」プロパティの値を調べると、直前に実行されたアクションクエリで実際に処理された(影響を与えた)レコード数を取得することができます。

このプロパティはDatabaseオブジェクトのプロパティですので、まずはDatabaseオブジェクトのExecuteメソッドを使ってアクションクエリとなるSQL文を実行する必要があります。あとは、単にRecordsAffectedプロパティの値を調べるだけです。


次の例では、「商品」テーブルに対して、”商品IDが80より大きいレコードのみ”を対象に、「発注点」フィールドの値を1.5倍する更新クエリを実行しています。そしてその直後に更新処理されたレコード数をメッセージボックスに表示しています。


Dim dbs As Database
Dim strSQL As String

Set dbs = CurrentDb

strSQL = "UPDATE 商品 SET 発注点 = 発注点 * 1.5 " & _
                "WHERE 商品ID > 80"

dbs.Execute strSQL

MsgBox dbs.RecordsAffected & " 件のレコードを更新しました!", _
              vbOKOnly + vbInformation


実行結果:
実行結果


なお、RecordsAffectedプロパティはアクションクエリ”実行後”の処理レコード数を保持していますので、実行前の事前確認として処理対象レコード数を取得することはできません。そのようなときには、DCount関数を使うなどして、別途対象レコード数を調べる必要があります。


If MsgBox(DCount("商品ID", "商品", "商品ID> 80") & _
                " 件のレコードを更新します!", _
                vbOKCancel + vbQuestion) = vbOK Then
  〜〜〜 更新処理を実行 〜〜〜
End If

| Index | Prev | Next |



T'sFactory
Accessで動く生産管理DB
Ureru Express
Webで使う販売顧客管理
Access開発&アドバイス
DB開発やテクニカルアドバイス
Copyright © T'sWare All rights reserved