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

レコードを検索する - Findメソッド : ADO入門講座



Findメソッドは、指定した条件に一致するレコードを検索し、そのレコードをカレントレコードにします。しかし、カレントレコードに対する操作は全く行いません。 また、Do〜Loopを用いて複数のレコードを求めることも可能です。

留意点
  • Findメソッドを呼び出す前にカレント行の位置が設定されていない場合は、エラーが発生します。この場合は、Findメソッドを呼び出す前に、Move系メソッドなどで行を特定していなくてはいけません。
  • Findメソッドを実行し該当レコードが見つかった場合、そのレコードがカレントレコードになります。
  • 該当レコードが見つからなかった場合、RecordsetオブジェクトのBOF、またはEOFが未定義の状態になります。

Findメソッドの構文

Findメソッドの構文は、以下のような組み合わせになります。

Recordsetオブジェクト + .(ドット) + Findメソッド+ ,(カンマ) + 検索条件+ ,(カンマ) +
SkipRows+ ,(カンマ) +SearchDirection+ ,(カンマ) +Stat+ ,(カンマ) +

項目 意味
Recordsetオブジェクト 開いているRecordsetオブジェクト
検索条件 検索に使用するフィールド、比較演算子、文字列式など
SkipRows

省略可能です。
検索を開始する、カレント行または Start ブックマークからの行のオフセットを指定する長整数型 の値を指定します。
既定値は 0 です。既定では、カレント行から検索が開始されます。

SearchDirection 省略可能です。検索方向を指定します。
  • adSearchForwardを指定した場合
    検索に成功しなかった時、Recordset の終わりで停止します。
  • adSearchBackwardを指定した場合
    検索に成功しなかった時、Recordset の先頭で停止します。
Stat 省略可能です。
検索の開始位置として使用するバリアント型 (Variant) のブックマークを指定します。

サンプルテーブルの作成

サンプルテーブルを以下のように作成します。テーブル名は、T_sampleテーブルです。

売上日 社員名 性別 売上額
2004/01/23 橘 修平 男性 52100
2004/01/29 橋本 佳代 女性 151100
2004/02/02 柴田 喜一 男性 654100

単一レコードを求めるFindメソッドの作成

このプロシージャは、T_Sampleテーブルから社員名が「柴田喜一」のレコードをFindメソッドを用いて求め、イミディエイトウィンドウに表示します。

Sub ADO_Find()

    Dim cn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Dim varBM As Variant
    Dim mySQL As String
    Dim strcriteria As String
    
    Set cn = CurrentProject.Connection
    Set rs = New ADODB.Recordset
    
    rs.Open "T_sample", cn, adOpenKeyset, adLockOptimistic
    
    '検索条件を変数に代入します。
    strcriteria = "社員名 = '柴田 喜一'" ' --- A
    rs.Find strcriteria, 0, adSearchForward
    
    If rs.EOF Then ' --- B
        MsgBox "該当レコードが見つかりません"
    Else
        Debug.Print "社員名 : " & rs!社員名 & "、売上額 : \" & rs!売上額
    End If
    
    rs.Close: Set rs = Nothing
    cn.Close: Set cn = Nothing
    
End Sub
解説
  1. 検索式は、フィールド名 = 文字列 Or 数値 Or 日時 の形式をとります。検索式を"(ダブルクォーション)で囲む必要があります。また、文字列は'(シングルクォーション)、日時は#(シャープ)で併せて囲みます。
  2. 該当レコードがない場合は、EOF及びBOFがTrueになります。
実行結果

このプロシージャをイミディエイト画面上で実行すると、以下のレコードが表示されます。

ADO_Find '実行する
社員名 : 柴田 喜一、売上額 : \52100

複数レコードを求めるFindメソッドの作成

このプロシージャは、T_Sampleテーブルから性別が「男性」のレコード全てをFindメソッドを用いて求め、イミディエイトウィンドウに表示します。

Sub ADO_Find2()

    Dim cn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Dim varBM As Variant
    Dim mySQL As String
    Dim strcriteria As String
    
    Set cn = CurrentProject.Connection
    Set rs = New ADODB.Recordset
    
    rs.Open "T_sample", cn, adOpenKeyset, adLockOptimistic
    
    '検索条件を変数に代入します。
    strcriteria = "性別 = '男性'"
    rs.Find strcriteria, 0, adSearchForward
    
    Do Until rs.EOF
    
    	If rs.EOF Then
        	MsgBox "該当レコードが見つかりません"
    	Else
        	Debug.Print "社員名 : " & rs!社員名 & "、売上額 : \" & rs!売上額
        	rs.Find strcriteria, adSearchForward ' --- A
    	End If
    
    Loop
    
    rs.Close: Set rs = Nothing
    cn.Close: Set cn = Nothing
    
End Sub
解説
  1. Findメソッドの引数にadSearchForwardを指定することで、次々と条件に合致するレコードを検索していきます。
実行結果

このプロシージャをイミディエイト画面上で実行すると、以下のレコードが表示されます。

ADO_Find2 '実行する
社員名 : 柴田 喜一、売上額 : \52100
社員名 : 柴田 喜一、売上額 : \654100

ちょっと一服

DAO

DAO には 4 つの検索メソッドである FindFirst、FindLast、 FindNext、及び FindPrevious があります。先頭レコード、最終レコード、または現在レコードのどこから検索を開始するか、前方、後方のどちらに向かって検索するかに基づいて、使用するメソッドを選択することができます。

ADO

ADO には 1 つのメソッド Find だけしかありません。検索は、常に現在レコード(カレントレコードではありません)から開始されます。Find メソッドは、検索方向と検索を開始する現在レコードからのオフセット (SkipRows) を指定できるパラメータを持っています。

DAOとADOの対比表

次の表は 4 つの DAO のメソッドに相当する ADO の機能を示しています。

DAO メソッド ADO Find の
 SkipRows
ADO 検索方向
FindFirst 0 adSearchForward
FindLast 0 adSearchBackward
FindNext 1 adSearchForward
FindPrevious 1 adSearchBackward

関連ページ

2005/02/16

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


レコードを検索する - Findメソッド : ADO入門講座


 

-Microsoft Access Club-

アメリカ合衆国の大手データセンターのアダルト対応可能なリーズナブル価格設定の専用・共有レンタルサーバーをご提供しています。
アメリカ合衆国の大手データセンターにサーバー機器を設置。
アダルト対応可能な専用・共有レンタルサーバーを提供。