●概要●
特定のテーブル、クエリ、レコードセットのレコード数を、集計クエリ(SQL文)を使用してカウントする方法を説明します。
●準備●
- 以下の構成で[商品マスタ]テーブルを作成します。
----------------------------------------
フィールド名 データ型
商品ID 整数型(主キー)
商品名 テキスト型
販売価格 通貨型
----------------------------------------
- テーブルに適当なデータを入力しておきます。下記を参考にして下さい。
- 新規標準モジュールを作成し、以下のプロシージャを記述して下さい。
●サンプルコード●
Private Sub RecCount()
'■ 初期設定 ■
Dim iCnt As Integer 'レコード件数
Dim Rst As DAO.Recordset 'レコードセット
Dim strSQL As String
'■ SQLでカウント ■
Debug.Print vbCrLf & "【SQLでカウント】"
'集計用のSQL文を作成
strSQL = "Select Count(*) As RecCount From 商品マスタ"
'作成したSQL文でレコードセット作成
Set Rst = CurrentDb.OpenRecordset(strSQL)
'レコード件数を取得
iCnt = Rst![RecCount]
Debug.Print "商品マスタのレコード件数は " & iCnt & "件 です"
'抽出用の集計SQL文を作成
strSQL = "Select Count(*) As RecCount From 商品マスタ Where 販売価格 >=500"
'作成したSQL文でレコードセット作成
Set Rst = CurrentDb.OpenRecordset(strSQL)
'レコード件数を取得
iCnt = Rst![RecCount]
Debug.Print "販売価格500円以上の商品は " & iCnt & "件 です"
'■ 終了処理 ■
Rst.Close
Set Rst = Nothing
End Sub
●動作確認●
上記サンプルプロシージャを実行し、以下の文がイミディエイトウィンドウに表示されていることを確認して下さい。
----------------------------------------
【SQLでカウント】
商品マスタのレコード件数は 11件 です
販売価格500円以上の商品は 3件 です
----------------------------------------
●詳細●
・集計クエリ(SQL)
サンプルでは集計関数Countを含んだSQL文を作成することで、レコード数をカウントしています。今回のサンプルはプログラム内でレコード数を表示することを目的としていますので、レコードセットを作成していますが、QueryDefオブジェクトを作成する形で新規クエリを作成する方法もあります。
別掲「レコード数をカウントする方法 (DAO)」で説明した通り、RecordCountプロパティを使用してレコード数を判断する場合、RecordSetTypeに気を使う必要があります。大してSQL集計関数を使用する場合、返されるレコードセット(結果セット)は常に1件であり、その1件にレコード数が格納される形になりますので、RecordSetTypeは関係ありません。
また、Accessに限らずデータベースエンジンというものはSQLを解釈することを第一義としていますので、速度的にも大変有利です。特に他の方法を使う必要がある場合以外は、この方法でレコード数をカウントするのが良いでしょう。
●備考●
Access2000の場合、デフォルトではDAOに参照設定されていません。
Visual Basic Editor(VBE)を開き、メニューの[ツール]−[参照設定]から、Microsoft DAO 3.6 Object Libraryにチェックを入れて下さい。
その際にMicrosoft ActiveX Data Object 2.1 Libraryよりも上に、DAOのチェックを持ってきて下さい。