DAO レコードセットのレコード数をカウントする

Recordset オブジェクト内のレコードの数を知りたい場合があります。 たとえば、データベース内の各テーブル内のレコードの数を示すフォームを作成できます。 または、含まれるレコードの数に基づいてフォームまたはレポートの外観を変更することもできます。

RecordCount プロパティには、テーブルタイプの Recordset 内のレコードの数、またはダイナセットまたはスナップショットタイプの Recordset でアクセスされたレコードの合計数が含まれます。 レコードがない Recordset オブジェクトでは、RecordCount プロパティの値は 0 です。

注:

RecordCount プロパティの値は、実際にアクセスされたレコードの数に等しくなります。 たとえば、ダイナセットまたはスナップショットを初めて作成した時点では、アクセス (参照) したレコードは 1 つだけです。 ダイナセットまたはスナップショットを作成した直後に RecordCount プロパティを確認すると (ダイナセットまたはスナップショットに少なくとも 1 つのレコードがあるという前提で)、その値は 1 になります。 すべてのレコードにアクセスするには、Recordset を開いた直後に MoveLast メソッドを使用し、MoveFirst を使用して最初のレコードに戻ります。 この処理は、特に結果セットが大きい場合に時間がかかる可能性があるので、自動的には行われません。

テーブル タイプの Recordset オブジェクトを開くときは、基になるテーブル内のすべてのレコードを実質的に参照することになり、Recordset が開かれた時点で、RecordCount プロパティの値はテーブル内のレコード数と等しくなります。

一部のマルチユーザー環境では、トランザクションをキャンセルすると RecordCount プロパティの値が最新の状態を反映したものではなくなる可能性があります。 データベースを圧縮すると、テーブルのレコード カウントは正しい値に回復します。

次のコード例では、スナップショット タイプの Recordset オブジェクトを作成してから、その Recordset 内のレコードの数を調べます。

Function FindRecordCount(strSQL As String) As Long 
 
Dim dbsNorthwind As DAO.Database 
Dim rstRecords As DAO.Recordset 
 
On Error GoTo ErrorHandler 
 
   Set dbsNorthwind = CurrentDb 
 
   Set rstRecords = dbsNorthwind.OpenRecordset(strSQL) 
 
   If rstRecords.EOF Then 
      FindRecordCount = 0 
   Else 
      rstRecords.MoveLast 
      FindRecordCount = rstRecords.RecordCount 
   End If 
 
   rstRecords.Close 
   dbsNorthwind.Close 
 
   Set rstRecords = Nothing 
   Set dbsNorthwind = Nothing 
 
Exit Function 
 
ErrorHandler: 
   MsgBox "Error #: " & Err.Number & vbCrLf & vbCrLf & Err.Description 
End Function

ダイナセット タイプの Recordset オブジェクト内にあるレコードをアプリケーションで削除すると、RecordCount プロパティの値が減少します。 ただし、マルチユーザー環境では、他のユーザーが削除したレコードは、カレント レコードがその削除済みのレコードに移動されるまで RecordCount プロパティの値として反映されません。 移動した時点で、 RecordCount プロパティの値は 1 減少します。

Recordset に対して Requery メソッドを使用し、続いて MoveLast メソッドを使用すると、 RecordCount プロパティの値が Recordset の現在のレコード総数に設定されます。

スナップショット タイプの Recordset オブジェクトは静的であり、その RecordCount プロパティの値は、スナップショットの基になるテーブルでレコードを追加または削除しても変化しません。

サポートとフィードバック

Office VBA またはこの説明書に関するご質問やフィードバックがありますか? サポートの受け方およびフィードバックをお寄せいただく方法のガイダンスについては、Office VBA のサポートおよびフィードバックを参照してください。