次の方法で共有


テーブル タイプの DAO レコードセットのレコードを検索する

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 のサポートおよびフィードバックを参照してください。