特定のテーブル、クエリ、レコードセットのレコード数を、RecortCountプロ
パティを使用してカウントする方法を説明します。
● 準備 ●
(1) 以下の構成で[商品マスタ]テーブルを作成します。
----------------------------------------
フィールド名 データ型
商品ID 整数型(主キー)
商品名 テキスト型
販売価格 通貨型
----------------------------------------
(2) テーブルに適当なデータを入力しておきます。下記を参考にして下さい。
(3) 新規標準モジュールを作成し、以下のプロシージャを記述して下さい。
● サンプル ●
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の
チェックを持ってきて下さい。
|