●概要●
特定のテーブル、クエリ、レコードセットのレコード数を、RecortCountプロパティを使用してカウントする方法を説明します。
●準備●
- 以下の構成で[商品マスタ]テーブルを作成します。
----------------------------------------
フィールド名 データ型
商品ID 整数型(主キー)
商品名 テキスト型
販売価格 通貨型
----------------------------------------
- テーブルに適当なデータを入力しておきます。下記を参考にして下さい。
- 新規標準モジュールを作成し、以下のプロシージャを記述して下さい。
●サンプルコード●
Private Sub RecCount()
'■ 初期設定 ■
Dim iCnt As Integer 'レコード件数
Dim Rst As DAO.Recordset 'レコードセット
Dim strSQL As String
'■ レコードセットでカウント ■
Debug.Print vbCrLf & "【レコードセットでカウント】"
Set Rst = CurrentDb.OpenRecordset("商品マスタ", dbOpenSnapshot)
Rst.MoveLast
iCnt = Rst.RecordCount
Debug.Print "商品マスタのレコード件数は " & iCnt & "件 です"
'Filterプロパティを設定し、500円以上のものを抽出
Rst.Filter = "販売価格 >= 500"
Set Rst = Rst.OpenRecordset
Rst.MoveLast
iCnt = Rst.RecordCount
Debug.Print "販売価格500円以上の商品は " & iCnt & "件 です"
'■ 終了処理 ■
Rst.Close
Set Rst = Nothing
End Sub
●動作確認●
上記サンプルプロシージャを実行し、以下の文がイミディエイトウィンドウに表示されていることを確認して下さい。
----------------------------------------
【レコードセットでカウント】
商品マスタのレコード件数は 11件 です
販売価格500円以上の商品は 3件 です
----------------------------------------
●詳細●
・RecordCountプロパティ
レコードセットを作成し、RecordCountプロパティを参照することでレコード数をカウントしています。サンプルではデータを参照するだけなので、SnapShotタイプのレコードセットを作成しています。DynasetとSnapShotタイプのレコードセットのRecordCountプロパティは、実際に読み込んだレコード数を返しますので、「Rst.MoveLast」とレコードの最後まで強制的に読み込ませています。Tableタイプのレコードセットでは、この作業は必要ありません。
また、前方スクロールタイプのレコードセットは、常にカレントレコードのみを参照しますので、複数レコードが存在することが前提になっているRecordCountプロパティは正しい結果を返しません。
さらに、Access2000限定になりますが、ADOを使ってレコードセットを作成する場合も同じような注意が必要です。ADOではDAOのRecordSetTypeと同じ意味合いのプロパティがCursorTypeです。詳細はヘルプを参照して下さい。
RecordCountのように複数のレコードを参照したり、レコードの内容を書き換える処理を行う際には、このRecordSetTypeは非常に重要になりますので、注意して考える習慣を持つようにして下さい。
続いて、レコードセットのデータを抽出するためにFilterプロパティを使用しています。レコードセットに直接フィルタを掛ける場合、サンプル中にあるようにレコードセットのFilterプロパティに値を代入した後に、同じレコードセットを開きなおす必要があります。
●備考●
Access2000の場合、デフォルトではDAOに参照設定されていません。
Visual Basic Editor(VBE)を開き、メニューの[ツール]−[参照設定]から、Microsoft DAO 3.6 Object Libraryにチェックを入れて下さい。
その際にMicrosoft ActiveX Data Object 2.1 Libraryよりも上に、DAOのチェックを持ってきて下さい。