Applies To Dynaset-Type Recordset object, Recordset object, Snapshot-Type Recordset object.
Description
Locates the first, last, next, or previous record in a dynaset- or snapshot-type Recordset object that satisfies the specified criteria and makes that record the current record (Microsoft Jet workspaces only).
Syntax recordset.{FindFirst | FindLast | FindNext | FindPrevious} criteria The Find methods have these parts.Part | Description |
recordset | An object variable that represents an existing dynaset- or snapshot-type Recordset object. |
criteria | A String used to locate the record. It is like the WHERE clause in an SQL statement, but without the word WHERE. |
Remarks If you want to include all the records in your search — not just those that meet a specific condition — use the Move methods to move from record to record. To locate a record in a table-type Recordset, use the Seek method.
If a record matching the criteria isn't located, the current record pointer is unknown, and the NoMatch property is set to True. If recordset contains more than one record that satisfies the criteria, FindFirst locates the first occurrence, FindNext locates the next occurrence, and so on. Each of the Find methods begins its search from the location and in the direction specified in the following table.Find method | Begins searching at | Search direction |
FindFirst | Beginning of recordset | End of recordset |
FindLast | End of recordset | Beginning of recordset |
FindNext | Current record | End of recordset |
FindPrevious | Current record | Beginning of recordset |
rstEmployees.FindFirst "HireDate > #" _
& Format(mydate, 'm-d-yy' ) & "#"
If criteria is composed of a string concatenated with a non-integer value, and the system parameters specify a non-U.S. decimal character such as a comma (for example, strSQL = "PRICE > " & lngPrice, and lngPrice = 125,50), an error occurs when you try to call the method. This is because during concatenation, the number will be converted to a string using your system's default decimal character, and Microsoft Jet SQL only accepts U.S. decimal characters.
Notes
Sub FindFirstX()
Dim dbsNorthwind As Database
Dim rstCustomers As Recordset
Dim strCountry As String
Dim varBookmark As Variant
Dim strMessage As String
Dim intCommand As Integer
Set dbsNorthwind = OpenDatabase("Northwind.mdb")
Set rstCustomers = dbsNorthwind.OpenRecordset( _
"SELECT CompanyName, City, Country " & _
"FROM Customers ORDER BY CompanyName", _
dbOpenSnapshot)
Do While True
' Get user input and build search string.
strCountry = _
Trim(InputBox("Enter country for search."))
If strCountry = "" Then Exit Do
strCountry = "Country = '" & strCountry & "'"
With rstCustomers
' Populate recordset.
.MoveLast
' Find first record satisfying search string. Exit
' loop if no such record exists.
.FindFirst strCountry
If .NoMatch Then
MsgBox "No records found with " & strCountry & "."
Exit Do
End If
Do While True
' Store bookmark of current record.
varBookmark = .Bookmark
' Get user choice of which method to use.
strMessage = "Company: " & !CompanyName & _
vbCr & "Location: " & !City & ", " & _
!Country & vbCr & vbCr & _
strCountry & vbCr & vbCr & _
"[1 - FindFirst, 2 - FindLast, " & _
vbCr & "3 - FindNext, " & _
"4 - FindPrevious]"
intCommand = Val(Left(InputBox(strMessage), 1))
If intCommand < 1 Or intCommand > 4 Then Exit Do
' Use selected Find method. If the Find fails,
' return to the last current record.
If FindAny(intCommand, rstCustomers, _
strCountry) = False Then
.Bookmark = varBookmark
MsgBox "No match--returning to " & _
"current record."
End If
Loop
End With
Exit Do
Loop
rstCustomers.Close
dbsNorthwind.Close
End Sub
Function FindAny(intChoice As Integer, _
rstTemp As Recordset, _
strFind As String) As Boolean
' Use Find method based on user input.
Select Case intChoice
Case 1
rstTemp.FindFirst strFind
Case 2
rstTemp.FindLast strFind
Case 3
rstTemp.FindNext strFind
Case 4
rstTemp.FindPrevious strFind
End Select
' Set return value based on NoMatch property.
FindAny = IIf(rstTemp.NoMatch, False, True)
End Function
Example (Microsoft Access)
The following example creates a dynaset-type Recordset object and then uses the FindFirst method to locate the first record satisfying the specified criteria. The procedure then finds the remaining records that satisfy the criteria.
Sub FindRecord()
Dim dbs As Database, rst As Recordset
Dim strCriteria As String
' Return reference to current database.
Set dbs = CurrentDb
' Define search criteria.
strCriteria = "[ShipCountry] = 'UK' And [OrderDate] >= #1-1-95#"
' Create a dynaset-type Recordset object based on Orders table.
Set rst = dbs.OpenRecordset("Orders", dbOpenDynaset)
' Find first matching record.
rst.FindFirst strCriteria
' Check if record is found.
If rst.NoMatch Then
MsgBox "No record found."
Else
' Find other matching records.
Do Until rst.NoMatch
Debug.Print rst!ShipCountry; " "; rst!OrderDate
rst.FindNext strCriteria
Loop
End If
rst.Close
Set dbs = Nothing
End Sub