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:
Die MoveFirst-Methode wird zum ersten Datensatz verschoben.
Die MoveLast-Methode wird zum letzten Datensatz verschoben.
Die MoveNext-Methode wird zum nächsten Datensatz verschoben.
Die MovePrevious-Methode wird zum vorherigen Datensatz verschoben.
Die Move-Methode verschiebt die Anzahl der Datensätze, die Sie in ihrer Syntax angeben, vorwärts oder rückwärts.
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.
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für