Recordset.FindNext-Methode (DAO)
Gilt für: Access 2013, Office 2013
Sucht den nächsten Datensatz in einem Recordset-Objekt vom Typ Dynaset oder Snapshot, der den angegebenen Kriterien entspricht, und macht diesen Datensatz zum aktuellen Datensatz (gilt nur für Microsoft Access-Arbeitsbereiche).
Syntax
Ausdruck . FindNext(Criteria)
Ausdruck Eine Variable, die ein Recordset-Objekt darstellt.
Parameter
Name |
Erforderlich/optional |
Datentyp |
Beschreibung |
---|---|---|---|
Kriterium |
Erforderlich |
String |
Eine Zeichenfolge, die zum Suchen des Datensatzes verwendet wird. Entspricht der WHERE-Klausel in einer SQL-Anweisung, allerdings ohne das Wort "WHERE". |
Hinweise
Wenn Sie alle Datensätze in die Suche einschließen möchten (nicht nur die, die eine bestimmte Bedingung erfüllen), verwenden Sie die Move-Methoden, um zwischen Datensätzen zu wechseln. To locate a record in a table-type Recordset, use the Seek method.
Wenn ein Datensatz, der die Bedingungen erfüllt, nicht gefunden wird, ist der aktuelle Datensatzverweis unbekannt und die NoMatch -Eigenschaft wird auf True festgelegt. Wenn das Recordset mehrere Datensätze enthält, die die Kriterien erfüllen, sucht FindFirst das erste Auftreten, FindNext sucht das nächste Auftreten usw.
Jede der Find-Methoden beginnt die Suche an der Position und in der Richtung, die in der folgenden Tabelle angegeben sind.
Find-Methode |
Beginnt die Suche bei |
Suchrichtung |
---|---|---|
FindFirst |
Anfang des Recordsets |
Ende des Recordsets |
FindLast |
Ende des Recordsets |
Anfang des Recordsets |
FindNext |
Aktueller Datensatz |
Ende des Recordsets |
FindPrevious |
Aktueller Datensatz |
Anfang des Recordsets |
Das Verwenden einer der Find -Methoden entspricht jedoch nicht dem Verwenden einer Move -Methode, die einfach den ersten, letzten, nächsten oder vorherigen Datensatz zum aktuellen Datensatz macht, ohne eine Bedingung anzugeben. You can follow a Find operation with a Move operation.
Always check the value of the NoMatch property to determine whether the Find operation has succeeded. If the search succeeds, NoMatch is False. Andernfalls ist NoMatch gleich True und der aktuelle Datensatz wird nicht definiert. In diesem Fall müssen Sie den aktuellen Datensatzzeiger zurück auf einen gültigen Datensatz richten.
Das Verwenden der Find-Methoden kann für Datensätze, auf die über mit dem Microsoft Access-Datenbankmodul verbundene ODBC-Datenbanken zugegriffen wird, ineffizient sein. Es geht vermutlich schneller, insbesondere bei großen Datensatzgruppen, einen bestimmten Datensatz durch Umformulieren von criteria zu suchen.
In einem ODBCDirect-Arbeitsbereich sind die Find- und Seek-Methoden nicht für jeden Recordset-Objekttyp verfügbar, da das Ausführen einer Find- oder Seek-Methode mit einer ODBC-Verbindung über das Netzwerk nicht sehr effizient ist. Stattdessen sollten Sie beim Abfrageentwurf (d. h. Verwenden des Arguments source für die OpenRecordset-Methode) eine entsprechende WHERE-Klausel einfügen, um nur die Datensätze zurückzugeben, die den Kriterien entsprechen, die Sie sonst in einer Find- oder Seek-Methode verwenden würden.
Bei der Arbeit mit mit der Microsoft Access-Datenbank-Engine verbundenen ODBC-Datenbanken und großen v-Objekten vom Typ Dynaset stellen Sie möglicherweise fest, dass die Verwendung der Find-Methoden oder die Verwendung der Sort- oder Filter-Eigenschaft langsam ist. To improve performance, use SQL queries with customized ORDER BY or WHERE clauses, parameter queries, or QueryDef objects that retrieve specific indexed records.
Sie sollten das US-Datumsformat (Monat-Tag-Jahr) verwenden, wenn Sie nach Feldern suchen, die Datumsangaben enthalten, auch wenn Sie nicht die US-Version der Microsoft Access-Datenbank-Engine verwenden. Andernfalls werden die Daten möglicherweise nicht gefunden. Verwenden Sie die Visual Basic-Funktion Format , um das Datum zu konvertieren. Zum Beispiel:
rstEmployees.FindFirst "HireDate > #" _
& Format(mydate, 'm-d-yy' ) & "#"
Wenn die Kriterien aus einer Zeichenfolge bestehen, die mit einem nicht ganzzahligen Wert verkettet ist, und die Systemparameter ein nicht für die USA gültiges Dezimalzeichen, z. B. ein Komma, angeben (Beispiel: strSQL = "PRICE > " & lngPrice und lngPrice = 125,50), tritt beim Versuch, die Methode aufzurufen, ein Fehler auf. Der Grund ist, dass die Zahl bei der Verkettung mithilfe des Standarddezimalzeichens des Systems in eine Zeichenfolge umgewandelt wird und Microsoft Access SQL nur für die USA gültige Dezimalzeichen akzeptiert.
Hinweis
Um die bestmögliche Leistung zu erzielen, sollten die Kriterien in der Form "Feld = Wert" vorliegen, wobei Feld ein indiziertes Feld in der zugrunde liegenden Basistabelle ist, oder in der Form "Feld LIKE Präfix", wobei Feld ein indiziertes Feld in der zugrunde liegenden Basistabelle und Präfix eine Präfixsuchzeichenfolge ist (z. B. "ART*").
Allgemein stellt die Seek-Methode für ähnliche Suchtypen eine bessere Leistung als die Find-Methoden bereit. Dabei wird angenommen, dass nur Tabellentyp-Recordset-Objekte Ihre Anforderungen erfüllen können.
Beispiel
Das folgende Beispiel zeigt das Verwenden der FindFirst- und FindNext-Methoden zum Suchen eines Datensatzes in einem Recordset.
Der Beispielcode stammt von:Microsoft Access 2010 Programmer's Reference.
Sub FindOrgName()
Dim dbs As DAO.Database
Dim rst As DAO.Recordset
'Get the database and Recordset
Set dbs = CurrentDb
Set rst = dbs.OpenRecordset("tblCustomers")
'Search for the first matching record
rst.FindFirst "[OrgName] LIKE '*parts*'"
'Check the result
If rst.NoMatch Then
MsgBox "Record not found."
GotTo Cleanup
Else
Do While Not rst.NoMatch
MsgBox "Customer name: " & rst!CustName
rst.FindNext "[OrgName] LIKE '*parts*'"
Loop
'Search for the next matching record
rst.FindNext "[OrgName] LIKE '*parts*'"
End If
Cleanup:
rst.Close
Set rst = Nothing
Set dbs = Nothing
End Sub