Suchen nach einem Datensatz in einem DAO-Recordset vom Typ "Tabelle"

Sie verwenden die Seek-Methode, um einen Datensatz in einem Recordset-Objekt vom Tabellentyp zu suchen.

Wenn Sie die Seek-Methode zum Suchen eines Datensatzes verwenden, verwendet das Access-Datenbankmodul den aktuellen Index der Tabelle, wie durch die Index-Eigenschaft definiert.

Hinweis

Wenn Sie die Seek-Methode für ein Recordset-Objekt vom Typ Tabelle verwenden, ohne zunächst den aktuellen Index festzulegen, tritt ein Laufzeitfehler auf.

Im folgenden Beispiel wird ein Recordset-Objekt vom Tabellentyp Employees geöffnet und die Seek-Methode verwendet, um den Datensatz zu suchen, der den Wert lngEmpID im Feld EmployeeID enthält. 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

Die Seek-Methode beginnt immer am Anfang des Recordset-Objekts mit der Suche nach Datensätzen. Wenn sie die Seek-Methode mit denselben Argumenten mehr als einmal für dasselbe Recordset-Objekt verwenden, findet es denselben Datensatz.

Sie können die NoMatch-Eigenschaft für das Recordset-Objekt verwenden, um zu testen, ob ein Datensatz gefunden wurde, der den Suchkriterien entspricht. Wenn der Datensatz gefunden wurde, der den Kriterien entspricht, ist die NoMatch-Eigenschaft False; Andernfalls ist es True.

Im folgenden Codebeispiel wird veranschaulicht, wie Sie eine Funktion erstellen können, die die Seek-Methode verwendet, um einen Datensatz mithilfe eines aus mehreren Feldern bestehenden Index zu finden.

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

In this example, the table's primary key consists of two fields: OrderID and ProductID. When you call the GetFirstPrice function with a valid (existing) combination of OrderID and ProductID field values, the function returns the unit price from the found record. Wenn sie die in der Tabelle angezeigte Kombination von Feldwerten nicht finden kann, gibt die Funktion den Wert Null zurück.

Wenn es sich bei dem aktuellen Index um einen Index mit mehreren Ackern handelt, können nachgestellte Schlüsselwerte weggelassen werden und als Nullwerte behandelt werden. Das heißt, Sie können eine beliebige Anzahl von Schlüsselwerten vom Ende des Schlüsselarguments einer Seek-Methode weg lassen, jedoch nicht vom Anfang oder von der Mitte. Wenn Sie jedoch nicht alle Werte im Index angeben, können Sie nur die Vergleichszeichenfolge ">" oder "<" mit der Seek-Methode verwenden.

Support und Feedback

Haben Sie Fragen oder Feedback zu Office VBA oder zu dieser Dokumentation? Unter Office VBA-Support und Feedback finden Sie Hilfestellung zu den Möglichkeiten, wie Sie Support erhalten und Feedback abgeben können.