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
|