ADOのRecordset.Filterプロパティについてご紹介しました。
全レコードを含んだRecordsetを取得しておいて、あとからフィルタリングするという考えだったわけですが、はじめからフィルタリングした状態のRecordsetを取得する、という考え方もあります。
今回はそんな考えのプロシージャをご紹介します。
Recordset.Openメソッドの引数・Sourceに指定するSQL文で、

レコードを絞り込んだRecordsetを取得するプロシージャです。
ADODBでRecordset取得時にSQL文でレコードを絞り込むサンプルプロシージャ
「ID」「名前」「住所」というフィールドを持った、「tbl_住所録」というテーブルが存在するAccess上で、以下のプロシージャを実行すると、名前に「藤」という文字を含むレコードが、イミディエイトウィンドウに出力されます。
 Dim cnn As ADODB.Connection
 Dim rst As ADODB.Recordset
 Dim sql As String
 Set cnn = CurrentProject.Connection
 Set rst = New ADODB.Recordset
 sql = "SELECT ID, 名前, 住所 FROM tbl_住所録 "
 sql = sql & "WHERE 名前 Like '%藤%' "
 rst.Open _
   Source:=sql, _
   ActiveConnection:=cnn
 Do Until rst.EOF
  Debug.Print rst!ID, rst!名前, rst!住所
  rst.MoveNext
 Loop
 rst.Close: Set rst = Nothing
 cnn.Close: Set cnn = Nothing
Recordset.Filterプロパティを利用する場合は、
  sql = "SELECT ID, 名前, 住所 FROM tbl_住所録 "
  rst.Open _
    Source:=sql, _
    ActiveConnection:=cnn
  rst.Filter = "名前 Like '%藤%' "
でしたが、今回は、
  sql = "SELECT ID, 名前, 住所 FROM tbl_住所録 "
  sql = sql & "WHERE 名前 Like '%藤%' "
  rst.Open _
    Source:=sql, _
    ActiveConnection:=cnn
と、RecordsetをOpenする際のSQL文にWHERE句を含んでいます。
RecordsetオブジェクトのFilteプロパティを利用する場合、
  rst.Filter = "名前 Like '%藤%' "
の記述は、ワイルドカードとしてAccessユーザーにはお馴染みの「*」を使った、
  rst.Filter = "名前 Like '*藤*' "
でもOKでしたが、今回の方法では、
  sql = sql & "WHERE 名前 Like '*藤*' "
とすると「*」はワイルドカードとして見なされず、適切なレコードを取得できませんので注意が必要です。
ADODBでRecordset取得時に変数を使ってSQL文でレコードを絞り込むサンプルプロシージャ
フィルターする条件の文字を変数に格納しておいてから指定する場合、以下のようなプロシージャです。
 Dim cnn As ADODB.Connection
 Dim rst As ADODB.Recordset
 Dim sql As String
 Dim flt As String
 Set cnn = CurrentProject.Connection
 Set rst = New ADODB.Recordset
flt = InputBox("検索する名前を入力してください。")
 sql = "SELECT ID, 名前 FROM tbl_住所録 "
 sql = sql & "WHERE 名前 LIKE '%" & flt & "%' "
 rst.Open _
   Source:=sql, _
   ActiveConnection:=cnn
 Do Until rst.EOF
  Debug.Print rst!ID, rst!名前
  rst.MoveNext
 Loop
 rst.Close: Set rst = Nothing
 cnn.Close: Set cnn = Nothing
WHERE句を作る、
  sql = sql & "WHERE 名前 LIKE '%" & flt & "%' "
の部分がポイントです。
Home » ADO(ActiveX Data Objects)の使い方 » ADOのSQL文でレコードを絞り込む
『インストラクターのネタ帳』では、2003年10月からMicrosoft Officeの使い方などを紹介し続けています。










