Navigieren durch ein DAO-Recordset

Ein Recordset-Objekt hat in der Regel eine aktuelle Position, am häufigsten an einem Datensatz. Wenn Sie auf die Felder in einem Recordset-Objekt verweisen, erhalten Sie Werte aus dem Datensatz an der aktuellen Position, der als aktueller Datensatz bezeichnet wird. Die aktuelle Position kann sich jedoch auch unmittelbar vor dem ersten Datensatz oder direkt hinter dem letzten Datensatz in einem Recordset-Objekt befinden. Unter bestimmten Umständen ist die aktuelle Position nicht definiert.

Verwenden Sie die folgenden Move-Methoden , um die Datensätze in einem Recordset zu durchlaufen:

Verwenden Sie jede dieser Methoden für Recordset-Objekte vom Typ table,dynaset-type und snapshot-type. Für ein Recordset-Objekt vom Typ forward-only können Sie nur die MoveNext - und Move-Methoden verwenden. Wenn Sie die Move-Methode für ein Recordset vom Vorwärtstyp verwenden, muss das Argument, das die Anzahl der zu verschiebenden Zeilen angibt, eine positive ganze Zahl sein.

Im folgenden Codebeispiel wird ein Recordset-Objekt in der Employees-Tabelle geöffnet, das alle Datensätze enthält, die im Feld ReportsTo einen Null-Wert aufweisen. Die Funktion aktualisiert dann die Datensätze, um anzugeben, dass es sich bei diesen Mitarbeitern um Zeitarbeitnehmer handelt. Für jeden Datensatz im Recordset ändert das Beispiel die Felder Titel und Notizen und speichert die Änderungen mit der Update-Methode . Sie verwendet die MoveNext-Methode , um zum nächsten Datensatz zu wechseln.

Sub UpdateEmployees() 
 
Dim dbsNorthwind As DAO.Database 
Dim rstEmployees As DAO.Recordset 
Dim strSQL As String 
Dim intI As Integer 
 
On Error GoTo ErrorHandler 
 
   Set dbsNorthwind = CurrentDb 
 
   ' Open a recordset on all records from the Employees table that have 
   ' a Null value in the ReportsTo field. 
   strSQL = "SELECT * FROM Employees WHERE ReportsTo IS NULL" 
   Set rstEmployees = dbsNorthwind.OpenRecordset(strSQL, dbOpenDynaset) 
 
   ' If the recordset is empty, exit. 
   If rstEmployees.EOF Then Exit Sub 
 
   intI = 1 
   With rstEmployees 
      Do Until .EOF 
         .Edit 
         ![ReportsTo] = 5 
         ![Title] = "Temporary" 
         ![Notes] = rstEmployees![Notes] & "Temp #" & intI 
         .Update 
         .MoveNext 
         intI = intI + 1 
      Loop 
   End With 
 
   RstEmployees.Close 
   dbsNorthwind.Close 
 
   Set rstEmployees = Nothing 
   Set dbsNorthwind = Nothing 
 
   Exit Sub 
 
ErrorHandler: 
   MsgBox "Error #: " & Err.Number & vbCrLf & vbCrLf & Err.Description 
End Sub

Hinweis

Das vorherige Beispiel dient nur dazu, die Methoden Update und MoveNext zu veranschaulichen. Für eine optimale Leistung wird empfohlen, diesen Massenvorgang mit einer SQL UPDATE-Abfrage auszuführen.

Support und Feedback

Haben Sie Fragen oder Feedback zu Office VBA oder zu dieser Dokumentation? Unter Office VBA-Support und Feedback finden Sie Hilfestellung zu den Möglichkeiten, wie Sie Support erhalten und Feedback abgeben können.