Home » ADO(ActiveX Data Objects)の使い方 » ADOのSQL文でレコードを絞り込む

動作検証バージョン:Access2016

ADOのRecordset.Filterプロパティについてご紹介しました。

全レコードを含んだRecordsetを取得しておいて、あとからフィルタリングするという考えだったわけですが、はじめからフィルタリングした状態のRecordsetを取得する、という考え方もあります。

今回はそんな考えのプロシージャをご紹介します。
Recordset.Openメソッドの引数・Sourceに指定するSQL文で、

ADODB.Recordset.Open

レコードを絞り込んだRecordsetを取得するプロシージャです。

[スポンサードリンク]

ADODBでRecordset取得時にSQL文でレコードを絞り込むサンプルプロシージャ

「ID」「名前」「住所」というフィールドを持った、「tbl_住所録」というテーブルが存在するAccess上で、以下のプロシージャを実行すると、名前に「藤」という文字を含むレコードが、イミディエイトウィンドウに出力されます。

Sub ADOのSQL文で抽出条件を指定する()

 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

End Sub

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文でレコードを絞り込むサンプルプロシージャ

フィルターする条件の文字を変数に格納しておいてから指定する場合、以下のようなプロシージャです。

Sub ADOのSQL文で抽出条件を指定する_InputBoxから()

 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

End Sub

WHERE句を作る、
  sql = sql & "WHERE 名前 LIKE '%" & flt & "%' "
の部分がポイントです。

関連語句
VBA, Visual Basic for Applications
[スポンサードリンク]

Home » ADO(ActiveX Data Objects)の使い方 » ADOのSQL文でレコードを絞り込む

Copyright © インストラクターのネタ帳 All Rights Reserved.

.