Microsoft Access Club >DAO入門講座 >このページ >次頁 < 前項  サイト内検索
 

レコードの抽出 : DAO入門講座



RecordsetオブジェクトのFilterプロパティを用いると、データを抽出した後のRecordsetオブジェクトを新たに作成することができます。

Filterプロパティは、下記のレコードセットタイプで使用できます。

  • ダイナセットタイプ
  • スナップショットタイプ

テーブルセットタイプのレコードセットには使用できませんので、ご注意下さい。

留意事項
  • Seekメソッド、Find系メソッドは該当データ抽出を行いますが、新たにレコードセットを作成するわけではありません。

サンプルのテーブルレコード

サンプルとして、[氏名]フィールドから女性のみのレコードを抽出し新たなレコードセットを作成してみましょう。テーブルデータは下記のように想定します。

ID 氏名 性別
1 鈴木一郎 男性
2 田中二郎 男性
3 中村三郎 男性
4 中田四郎 男性
5 佐藤里香 女性
6 小柳ゆり 女性
7 北島良子 女性
8 上島五郎 男性
9 不破美香 女性

サンプルプロシージャの作成

Subプロシージャを作成します。

Sub MyFilter()

    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Dim strMsg As String
    
    Set db = CurrentDb
    Set rs = db.OpenRecordset("入会申し込みリスト", dbOpenDynaset) '--- A
    
    rs.Filter = "性別='女性'" '--- B
    
    Set rs = rs.OpenRecordset() '--- C
    
    Do Until rs.EOF ' --- D
        strMsg = strMsg & vbNewLine & rs!ID & " : " & rs!氏名 & " : " & rs!性別
        rs.MoveNext
    Loop
    
    MsgBox "該当者" & vbNewLine & strMsg
    
    Set db = Nothing
    Set rs = Nothing
    
End Sub
解説
  1. OpenRecordsetオブジェクトを作成します。オブジェクト型は、テーブルタイプではいけませんので、ダイナセットタイプにしました。

  2. Filterプロパティを用いる場合について、"性別='女性'"は条件句です。これをFilterプロパティと = で結びます。シングルクォーション(')で女性という文字を囲んでいるのは、文字列が条件である場合の定番です。日付/時刻型の場合は"日付=" & #2004/07/01#になります。

  3. オブジェクト変数 rs は、オブジェクト変数 db から一度作成しています。今回は、これを上書きするように、再度オブジェクト変数 rs からレコードセットを作成しました。1つの変数で事たるようにしただけですが、割と便利な考え方です。
         Dim rs As DAO.Recordset
         Dim rs2 As DAO.Recordset
    として、独立させる方法が基本ですけど・・・。

  4. お決まりのEOFプロパティの出番です。先頭レコードから末尾のレコードまでを対象にする場合、使用頻度はメッチャ高いです。

実行結果

イミディエイトウィンドウで上記のSubプロシージャを実行してみましょう。下記の図です。

イミディエイトウィンドウ
  • イミディエイトウィンドウは、とても便利な機能を持っています。標準モジュールなら、プロシージャ名を記述するだけで、プロシージャを実行します。プロシージャの実行結果を確認する上で最良のパートナーですね。

  • ただ、このイミディエイトウィンドウですが、実際のアプリケーション構築の際には日陰者になってしまいます。つまり、ユーザーに見せてはいけないウィンドウであるからです。

女性だけのレコードが抽出され、新しいレコードセツトが作成されました。

  • Seekメソッド、Find系メソッドと異なり、複数のレコードを抽出することができます。
    Seekメソッド、Find系メソッドは該当するレコードを1だけしか抽出できません。

該当レコードなき場合

Filterプロパティを用いても、該当するレコードが全くない時だってあります。これを事前に察知するのが、RecordCountプロパティです。

  • 該当レコードがない時は、空のレコードセットが作成されます。これはこれで問題ないのですが、管理者として知っておく必要はありますね。
RecordCountプロパティを用いたプロシージャの作成

上記のプロシージャを一部修正します。

Sub MyFilter()

    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Dim strMsg As String
    
    Set db = CurrentDb
    Set rs = db.OpenRecordset("入会申し込みリスト", dbOpenDynaset)
    
    rs.Filter = "性別='女性'"
    
    Set rs = rs.OpenRecordset()
    
    If rs.RecordCount = 0 Then
        MsgBox "該当レコードはありません。"
        End
    End If
    
    Do Until rs.EOF
        strMsg = strMsg & vbNewLine & rs!ID & " : " & rs!氏名 & " : " & rs!性別
        rs.MoveNext
    Loop
    
    MsgBox "該当者" & vbNewLine & strMsg
    
    Set db = Nothing
    Set rs = Nothing
    
End Sub
実行結果

Ifステートメントを用いて、RecordCountプロパティが0を返した場合、下記のメッセージボックスを表示させプロシージャの実行を終了します。サンプルプロシージャの条件句を、"性別='女男性'"にしてみます。

 

2004/05/31

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

 


レコードの抽出 : DAO入門講座


 

-Microsoft Access Club-

動画配信(ダウンロード、ストリーミング)対応の専用レンタルサーバー。データセンター設置場所はアメリカ合衆国です。: 動画サーバードットコム
動画配信(ダウンロード、ストリーミング)対応の専用レンタルサーバー。
データセンター設置場所はアメリカ合衆国です。
100Mbps〜1Gbpsまで対応できます。