Seek メソッドを使用して、テーブルタイプの Recordset オブジェクト内のレコードを検索します。
Seek メソッドを使用してレコードを検索する場合、Access データベース エンジンは、Index プロパティで定義されているテーブルの現在のインデックスを使用します。
注:
[!メモ] 最初に現在のインデックスを設定する前に、テーブル タイプの Recordset オブジェクトに対して Seek メソッドを使用すると、実行時エラーが発生します。
The following example opens a table-type Recordset object called Employees, and uses the Seek method to locate the record containing a value of lngEmpID in the EmployeeID field. It returns the hire date for the specified employee.
Function GetHireDate(lngEmpID As Long) As Variant
Dim dbsNorthwind As DAO.Database
Dim rstEmployees As DAO.Recordset
On Error GoTo ErrorHandler
Set dbsNorthwind = CurrentDB
Set rstEmployees = dbsNorthwind.OpenRecordset("Employees")
' The index name for Employee ID.
rstEmployees.Index = "PrimaryKey"
rstEmployees.Seek "=", lngEmpID
If rstEmployees.NoMatch Then
GetHireDate = Null
Else
GetHireDate = rstEmployees!HireDate
End If
rstEmployees.Close
dbsNorthwind.Close
Set rstEmployees = Nothing
Set dbsNorthwind = Nothing
Exit Function
ErrorHandler:
MsgBox "Error #: " & Err.Number & vbCrLf & vbCrLf & Err.Description
End Function
Seek メソッドでは常に、Recordset オブジェクトの先頭からレコードの検索を開始します。 同じ Recordset に対して、同じ引数を指定して Seek メソッドを何回実行しても、返されるレコードは同じです。
Recordset オブジェクトの NoMatch プロパティを使用して、検索条件に一致するレコードが見つかったかどうかをテストします。 条件に一致するレコードが見つかった場合、 NoMatch プロパティは False になります。それ以外の場合は True になります。
次のコード例は、 Seek メソッドを使用して複数フィールド インデックスを使用してレコードを検索する関数を作成する方法を示しています。
Function GetFirstPrice(lngOrderID As Long, lngProductID As Long) As Variant
Dim dbsNorthwind As DAO.Database
Dim rstOrderDetail As DAO.Recordset
On Error GoTo ErrorHandler
Set dbsNorthwind = CurrentDb
Set rstOrderDetail = dbsNorthwind.OpenRecordset("Order Details")
rstOrderDetail.Index = "PrimaryKey"
rstOrderDetail.Seek "=", lngOrderID, lngProductID
If rstOrderDetail.NoMatch Then
GetFirstPrice = Null
Else
GetFirstPrice = rstOrderDetail!UnitPrice
End If
rstOrderDetail.Close
dbsNorthwind.Close
Set rstOrderDetail = Nothing
Set dbsNorthwind = Nothing
Exit Function
ErrorHandler:
MsgBox "Error #: " & Err.Number & vbCrLf & vbCrLf & Err.Description
End Function
この例では、テーブルの主キーは 2 つのフィールド [受注コード] および [商品コード] で構成されます。 [受注コード] フィールドと [商品コード] フィールドの有効な (既存の) 値の組み合わせを指定して GetFirstPrice 関数を呼び出すと、この関数は見つかったレコードの単価を返します。 指定したフィールド値の組み合わせがテーブルに見つからない場合、この関数は Null 値を返します。
現在のインデックスが複数フィールドのインデックスである場合、末尾のキー値は省略され Null 値として扱われることがあります。 つまり、Seek メソッドの key 引数の末尾から任意の数のキー値を省略できますが、先頭または中間部分からは省略できません。 ただし、インデックス内のすべての値を指定しない場合は、Seek メソッドで "" または "><" 比較文字列のみを使用できます。
サポートとフィードバック
Office VBA またはこの説明書に関するご質問やフィードバックがありますか? サポートの受け方およびフィードバックをお寄せいただく方法のガイダンスについては、Office VBA のサポートおよびフィードバックを参照してください。