Procesul de căutare a unei înregistrări într-un set de înregistrări diferă în ADO și în DAO. Următoarele secțiuni vă arată cum să căutați utilizând oricare dintre tehnologii.
De asemenea, luați în considerare metoda Seek. Ambele seturi de înregistrări ADO și DAO includ o metodă numită Seek, care este mai complexă și mai puternică decât metoda Find pentru ADO și cele patru metode de găsire pentru DAO discutate aici. Consultați fișierul ajutor Access VBA pentru detalii suplimentare despre metoda Seek.
Căutarea unei înregistrări într-un set de înregistrări ADO
Pentru a căuta o înregistrare într-un set de înregistrări ADO, utilizați metoda Find a obiectului RecordSet. Sintaxa este următoarea:
recordset.Find Criteria, SkipRows, SearchDirection, Start
Iată componentele sintaxei:
Când executați căutarea, ea se oprește la prima înregistrare de potrivire. Dacă nicio înregistrare nu se potrivește și căutați înainte, aceasta se oprește la sfârșitul setului de înregistrări; dacă căutați înapoi, se oprește la începutul setului de înregistrări. Dacă se ajunge la sfârșitul sau începutul setului de înregistrări, căutarea nu a găsit nimic.
Următorul exemplu începe prin mutarea la prima înregistrare din setul de înregistrări care este reprezentată de variabila obiect myRecordset. Apoi, codul caută prima înregistrare care se potrivește criteriului "City = 'Denver'". Exemplul verifică proprietatea EOF pentru a se asigura că nu s-a atins sfârșitul setului de înregistrări. Dacă nu a făcut-o, acest lucru înseamnă că am găsit o înregistrare care conține Denver în câmpul City, astfel încât exemplul afișează o casetă de mesaj cu datele de nume de familie pentru înregistrarea care se potrivește cu Denver. Însă dacă s-a ajuns la sfârșitul setului de înregistrări, exemplul afișează o casetă de mesaj care afirmă că nu s-a găsit nicio potrivire:
Sub SearchADOQ
Dim strSQL As String
Dim myRecordset As ADODB.Recordset
Set myRecordset = New ADODB.Recordset
myRecordset.ActiveConnection = CurrentProject.Connection
myRecordset.Open Source:="Select * from Customers", _
Options:=adCmdText
With myRecordset
.MoveFirst
.Find Criteria:="City='Denver'"
If Not .EOF Then
MsgBox .Fields("Last Name")
Else
MsgBox "Nu s-a găsit nicio înregistrare."
End If
End With
End Sub
Pentru a continua căutarea pe baza acelorași criterii, aveți posibilitatea să utilizați argumentul SkipRows pentru a specifica un decalaj, astfel încât să nu găsiți din nou înregistrarea curentă. De exemplu, probabil veți dori să mergeți mai departe doar cu un rând, astfel:
myRecordset.Find Criteria="City='Denver'", SkipRows:=1
Căutarea unei înregistrări într-un set de înregistrări DAO
Pentru a căuta o înregistrare într-un set de înregistrări DAO, aveți posibilitatea să utilizați una dintre aceste patru metode:
Sintaxa pentru aceste patru metode este următoarea:
recordset.FindFirst Criteria
recordset.FindNext Criteria
recordset.FindPrevious Criteria
recordset.FindLast Criteria
Aici, recordset este o variabilă de obiect necesară care reprezintă obiectul RecordSet implicat. Criteria este un argument obligatoriu de tip String care specifică criteriile pentru căutare. Criteria funcționează în același mod ca și clauza WHERE într-o instrucțiune SQL, cu excepția faptului că nu utilizează cuvântul WHERE.
Următorul exemplu utilizează metoda FindFirst pentru a căuta de la începutul setului de înregistrări prima înregistrare care se potrivește criteriului City = "Las Vegas":
Sub DAOSearch()
Dim myDatabase As DAO.Database
Set myDatabase = DBEngine.OpenDatabase("C:\temp\Northwind.accdb")
Dim myRecordset As DAO.Recordset
Set myRecordset = myDatabase.OpenRecordset _
(Name:="SELECT * FROM Customers", _
Type:=dbOpenDynaset)
myRecordset.FindFirst "City = 'Las Vegas'"
MsgBox myRecordset("Last Name")
Set myRecordset = Nothing
End Sub
Când porniți o căutare într-un set de înregistrări DAO utilizând una dintre cele patru metode de găsire, proprietatea NoMatch a obiectului RecordSet este setată la True. Dacă metoda găsește o potrivire, proprietatea NoMatch este setată la False. Astfel, puteți testa proprietatea NoMatch pentru a afla dacă căutarea a găsit sau nu o potrivire, ca în acest exemplu:
If myRecordset.NoMatch = False Then
MsgBox myRecordset("Last Name")
End If