Accesarea unei anumite înregistrări dintr-un set de înregistrări

Odată ce ați preluat un set de înregistrări, puteți manipula înregistrările din interiorul acestuia. Pentru a localiza o anumită înregistrare dintr-un set de înregistrări, aveți posibilitatea fie să scrieți un cod pentru a naviga (face o buclă) printre înregistrări până când o găsiți pe cea dorită sau căutați înregistrarea utilizând metodele Seek sau Find. Obiectul RecordSet include aceste metode pentru deplasarea în înregistrările din setul de înregistrări:

Utilizarea metodelor MoveFirst, MoveNext, MovePrevious și MoveLast

Metoda MoveFirst și metoda MoveLast sunt întotdeauna sigure de utilizat, deoarece atâta timp cât setul de înregistrări conține una sau mai multe înregistrări, există întotdeauna o primă înregistrare și o ultimă înregistrare. (Dacă setul de înregistrări conține o singură înregistrare, această înregistrare este considerată atât prima, cât și ultima.)

Dar dacă utilizați metoda MovePrevious din prima înregistrare din setul de înregistrări sau metoda MoveNext din ultima înregistrare, depășiți setul de înregistrări, accesând ceea ce este uneori numit "înregistrare fantomă" — una care nu există. Când încercați să accesați conținutul unei astfel de înregistrări, VBA dă eroarea de runtime 3021 ("Nicio înregistrare curentă"). Figura de mai jos arată această eroare.

BOF înseamnă începutul fișierului, iar EOF înseamnă sfârșitul fișierului. Rețineți că aveți posibilitatea să vizualizați sfârșitul unui set de înregistrări ca punct chiar dincolo de ultima înregistrare. Prin urmare, EOF nu este aceeași cu ultima înregistrare. BOF, de asemenea, nu este prima înregistrare, ci un punct chiar înainte de aceasta. (Menționez acest lucru pentru că avem tendința de a vedea primul element dintr-un set ca începutul setului. Seturile de înregistrări nu sunt construite astfel.)

Pentru a verifica dacă sunteți la începutul sau la sfârșitul setului de înregistrări, utilizați proprietatea BOF sau proprietatea EOF a obiectului RecordSet. Proprietatea BOF returnează True atunci când înregistrarea curentă este la începutul fișierului și proprietatea EOF returnează True atunci când înregistrarea curentă este la sfârșitul fișierului. Pentru a evita erorile, după utilizarea metodei MovePrevious, verificați dacă începutul fișierului a fost atins, ca în acest exemplu:

With myRecordset .MovePrevious
If .BOF = True Then 
  .MoveNext
End With

În mod similar, după utilizarea metodei MoveNext, verificați dacă s-a ajuns la sfârșitul fișierului:

myRecordset.MoveNext
If myRecordset.EOF Then 
  myRecordset.MovePrevious

Utilizarea metodei Move pentru mutarea mai multor înregistrări

Pentru a muta mai multe înregistrări simultan, dar nu la prima înregistrare sau ultima înregistrare din setul de înregistrări, utilizați metoda Move. Sintaxa pentru ADO diferă de cea utilizată cu DAO.

Iată sintaxa pentru metoda Mutare cu ADO:

recordset.Move NumRecords, Start

Sintaxa pentru metoda Move cu DAO este următoarea:

recordset.Move Rows, StartBookmark

Aici, setul de înregistrări este setul de înregistrări implicat, NumRecords sau Rows este numărul de înregistrări cu care să se deplaseze (utilizați un număr pozitiv pentru a merge înainte sau un număr negativ pentru a vă deplasa înapoi), iar Start sau StartBookmark este un argument opțional pe care îl puteți utiliza pentru a specifica un marcaj în document de unde doriți să înceapă mutarea. Dacă omiteți Start sau StartBookmark, mișcarea pornește de la înregistrarea curentă. De exemplu, următoarea instrucțiune mută 10 înregistrări înainte de înregistrarea curentă într-un set de înregistrări ADO:

myRecordset.Move NumRecords:=10

Următoarea instrucțiune mută cinci înregistrări înapoi de la înregistrarea curentă într-un set de înregistrări DAO:

myRecordset.Move Rows:=-5

Pentru a crea un marcaj în document, deplasați-vă la înregistrarea pe care doriți să o marcați, apoi utilizați proprietatea Bookmark a obiectului RecordSet. Următorul exemplu declară o variabilă variantă denumită myBookmark, apoi îi atribuie un marcaj în document reprezentând înregistrarea curentă într-un set de înregistrări ADO:

Dim myBookmark As Variant
myBookmark = myRecordset.Bookmark

După setarea unui marcaj în document, îl puteți utiliza ca punct de plecare al unei mutări. De exemplu, următoarea instrucțiune se mută la a opta înregistrare de după marcajul myBookmark într-un set de înregistrări ADO:

myRecordset.Move NumRecords:=8, Start:=myBookmark