Căutarea unei înregistrări

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:

  • recordset este setul de înregistrări implicat.
  • Criteria este un argument obligatoriu de tip String care specifică numele coloanei, tipul de comparație și valoarea de utilizat. De exemplu, pentru a localiza o înregistrare în care statul este California, se poate specifica că coloana State este egală (=) cu CA.
  • SkipRows este o valoare opțională de tip Long pe care o puteți utiliza pentru a specifica un decalaj din rândul curent (sau din marcajul specificat de argumentul Start) de la care să începeți căutarea în loc să porniți de pe rândul curent. De exemplu, un decalaj de 3 începe căutarea cu trei rânduri mai jos decât rândul curent.
  • SearchDirection este un argument opțional care specifică dacă faceți căutarea înainte sau înapoi. Valoarea implicită este adSearchForward; specificați adSearchBackward pentru a căuta înapoi.
  • Start este un argument opțional de tip Variant care specifică marcajul de la care începe căutarea sau decalajul. Dacă omiteți Start, căutarea pornește de la rândul curent.

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:

  • Metoda FindFirst începe căutarea de la începutul setului de înregistrări și caută înainte.
  • Metoda FindNext începe căutarea de la înregistrarea curentă și caută înainte.
  • Metoda FindPrevious începe căutarea de la înregistrarea curentă și caută înapoi.
  • Metoda FindLast începe căutarea de la sfârșitul setului de înregistrări și caută înapoi.

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