●概要●
構文 expression.Seek Comparison, Key1, Key2...Key13
設定項目 内容
expression Recordsetオブジェクトを指定[省略不可]
Comparison 文字列式"<"、"<="、"="、">="、">"のいずれかを指定
[省略不可]
Key1,Key2...Key13 カレントインデックスに対応する値を指定
[Key1のみ省略不可]
一般に同じ種類の検索では、Seekメソッドを使用するとFind系メソッドよりも高速に検索を行うことができます。
カレントインデックスに対して指定した条件を満たすレコードを検索し、そのレコードをカレントレコードにします。に指定できるRecordsetオブジェクトは、テーブルタイプです。引数は、インデックスとして定義したフィールド数と同じ数だけ設定します。Seekメソッドを使用する前に、Recordsetオブジェクトにカレントインデックスを設定しておく必要があります。カレントインデックスを設定するには、あらかじめRecordsetオブジェクトのもととなるテーブルに、インデックスを作成しておきます。
ここで作成したインデックスだけが、カレントインデックスとして指定可能です。
カレントインデックスを設定するには、RecordsetオブジェクトのIndexプロパティに、インデックス名を文字列式で代入します。
次のコードは、「社員テーブル」の主キーである「社員コード」の値を条件にして、レコードを検索するものです。
●設定●
動作確認をするためには、Visual Basic Editorのメニューから[ツール]→[参照設定]コマンドを選択し、[参照設定]ダイアログボックスで「Microsoft DAO 3.6 Object Library」にチェックを入れてください。
●サンプル●
Sub SeekSample1()
Dim myRS As DAO.Recordset
'[社員テーブル]をテーブルタイプのレコードセットとして開く
Set myRS = CurrentDb.OpenRecordset("社員テーブル", dbOpenTable)
'カレントインデックスを設定
myRS.Index = "PrimaryKey"
'Seekメソッドで検索
myRS.Seek "=", "10004"
'該当レコードがなかった場合
If myRS.NoMatch Then
MsgBox "該当するレコードはありません"
'レコードが見つかった場合
Else
MsgBox myRS!社員コード & ":" & myRS!名前
End If
myRS.Close
End Sub
Seekメソッドは、カレントレコードの位置に関係なく、レコードの先頭から順にカレントインデックスを検索し、条件を満たす最初のレコードをカレントレコードにします。Recordsetオブジェクトのレコードは、カレントインデックスの順に並べられているので、引数に">"か">="を指定した場合、最も小さな値を持つレコードがカレントレコードになり、そのレコード以降のレコードはすべて条件を満たしていることになります。
次のコードは、「社員コード」が10003より大きい、全レコードを表示するものです。
●サンプル2●
Sub SeekSample2()
Dim myRS As DAO.Recordset
'[社員テーブル]をテーブルタイプのレコードセットとして開く
Set myRS = CurrentDb.OpenRecordset("社員テーブル", dbOpenTable)
'インデックスを設定
myRS.Index = "PrimaryKey"
'Seekメソッドで検索
myRS.Seek ">", "10003"
'該当レコードが見つかった場合
If Not myRS.NoMatch Then
'最後のレコードまで繰り返す
Do Until myRS.EOF
MsgBox myRS!社員コード & ":" & myRS!名前
myRS.MoveNext
Loop
End If
myRS.Close
End Sub