Microsoft Access Club >AccessTips >このページ >次頁 <前項  サイト内検索


レコードセットを用いてリストボックスのレコード件数を求める : AccessTips131



今回は、前頁に引き続きフォーム上のリストボックスに表示されたレコード件数を求める方法をご紹介します。組み立て方は、DAOまたはADOのレコードセットを用いて値集合ソースに配置されたSQLのレコード件数を求め、件数表示を行うテキストボックスに代入します。

サンプルテーブル

以下のようなフィールドを持つサンプルテーブル(T_sample)を作成します。

ID 日付 売り上げ
00001 2005/08/10 ¥154,420
00002 2005/08/11 ¥54,200
00003 2005/08/12 ¥410,100
00004 2005/08/13 ¥310,050
00005 2005/08/14 ¥63,100

検索フォームの作成

非連結の単票式フォーム(F_sample)を作成します。 このフォームから指定した日付のレコードを求め、リストボックスに表示します。 以下のようなオブジェクトを追加します。

  1. 日付検索はFROM〜TO方式とします。
  2. txt日付FROMとtxt日付TOテキストボックスを作成します。
  3. 件数を表示するテキストボックス(txtレコード件数)を作成します。
  4. リストボックス(lst表示)を作成します。
  5. 検索を実行するコマンドボタン(cmd検索)を作成します。

SQLの作成

SQLを作成する方法は手順に従い作成するのがベターですが、作成済みのクエリを利用して雛形を取得する方法が初心者の方には最適です。以下の手順で行います。

  1. T_sampleテーブルを元に選択クエリーを作成します。
  2. 日付フィールドの抽出条件欄にtxt日付FROMとtxt日付TOテキストボックスを指定したBetween演算子を記述します。
  3. 選択クエリを保存します。

  1. メニューバーのクエリからSQLのパススルーをクリックすると、以下の画面が表示されます。

  1. コピー&ペーストでプロシージャ内に取り込みます。
  2. 不要な記述を以下のように削除します。
SELECT T_sample.*
FROM T_sample
WHERE (((T_sample.日付) Between 
[Forms]![F_sample]![txt日付FROM] And [Forms]![F_sample]![txt日付TO]));

SELECT * FROM T_sample" & " WHERE 日付 BETWEEN #" & _
Me.txt日付FROM & "# AND #" & Me.txt日付TO & "#"

コマンドボタンのクリック時イベントプロシージャの作成(DAO機能を利用)

コマンドボタンのクリック時イベントに以下のプロシージャを作成します。プロシージャが実行されると、 リストボックスの値集合ソース(RowSource)にSQLを代入します。次に、DAOのOpenRecordseを利用して、レコード件数を取得します。

Private Sub cmd検索_Click()

    Dim db As DAO.Database ' --- A
    Dim rs As DAO.Recordset
    Dim mySQL As String
    Dim i As Long
    
    Set db = CurrentDb()
    
    If IsNull(Me.txt日付FROM) Or IsNull(Me.txt日付TO) Then ' --- B
        MsgBox "日付指定は、必須入力項目です。"
        Exit Sub
    End If
    
    mySQL = "SELECT * FROM T_sample" & " WHERE 日付 BETWEEN #" & _
            Me.txt日付FROM & "# AND #" & Me.txt日付TO & "#" ' --- C
            
    Set rs = db.OpenRecordset(mySQL)
    Do Until rs.EOF
        i = i + 1 ' --- D
        rs.MoveNext
    Loop

    Me.lst一覧.RowSource = mySQL ' --- E
    Me.txtレコード件数 = "レコード件数 : " & i & "件" ' --- F
    
    rs.Close: Set rs = Nothing
    db.Close: Set db = Nothing
    
End Sub
解説
  1. DAO機能を利用します。
  2. 日付のテキストボックスが空白の場合、ユーザーに注意を喚起します。
  3. SQL構文を組み立てます。
  4. MoveNextを用いて、変数 i を加算していきます。
  5. リストボックス lst一覧 の値集合ソースにSQLを代入します。
  6. txtレコード件数テキストボックスに、変数 i を代入します。

フォームをビューモードで開く

フォームをビューモードで開いて確認します。以下のようになります。

解説
  1. 値集合ソースにSQLわ代入した場合、 フォームを閉じる時にクリアしなければ次回フォームを表示するときに前回のレコードがそのまま表示されてしまいます。 よって、以下のように読み込み解除時イベントを利用して、長さ0の文字列("")を代入します。
Private Sub Form_Unload(Cancel As Integer)

    Me.lst一覧.RowSource = ""

End Sub

関連ページ

2005/08/15

ページの先頭へ 前ページへ戻る

 


レコードセットを用いてリストボックスのレコード件数を求める : AccessTips131


 

-Microsoft Access Club-