Haben Sie sich jemals gefragt, wie Sie den Recordset in MS Access effektiv nutzen können? In diesem Artikel werden wir Ihnen zeigen, wie Sie das Beste aus dieser Funktion herausholen können.
Was ist ein Recordset?
Ein Recordset ist eine Datenstruktur, die aus einer Gruppe von Datenbankeinträgen besteht und entweder aus einer Tabelle, einer Abfrage oder SQL stammen kann.
Die Syntax
Die Syntax für die Verwendung des Recordsets lautet wie folgt:
expression .OpenRecordset(Name, Type(Optional), Options(Optional), LockEdit(Optional))
expression
ist eine Variable, die ein Datenbankobjekt repräsentiert.
Schritt 1: Setzen Sie Ihre Referenzen
Je nach verwendeter Access-Version müssen Sie möglicherweise Ihre Referenzen richtig setzen. In früheren Versionen von Access, die vor Access 2000 liegen, verwenden Sie den folgenden Code:
Dim rs As DAO.Recordset
In neueren Versionen von Access benötigen Sie keine DAO-Referenz mehr und können den folgenden Code verwenden:
Dim rs As Recordset
Schritt 2: Art des Recordsets
Es gibt verschiedene Arten von Recordsets, die Sie verwenden können. Hier sind zwei häufig verwendete Arten:
Dynaset
Ein Dynaset ist eine temporäre Datensammlung aus einer oder mehreren Tabellen. Ein Dynaset kann auch eine Abfrage sein. Ein Dynaset ist aktualisierbar, solange die Datei nicht gesperrt ist oder im Nur-Lesen-Modus geöffnet ist. Daten in einem Dynaset sind “lebendig” und können bearbeitet werden.
Um ein Dynaset zu öffnen, verwenden Sie den folgenden Code:
Set rs = db.OpenRecordset("Tabellenname", dbOpenDynaset)
Snapshot
Ein Snapshot-Recordset ähnelt einem Dynaset, kann jedoch nicht aktualisiert werden. Es ist eine Momentaufnahme der Datensätze aus einer oder mehreren Tabellen oder Abfragen.
Um ein Snapshot-Recordset zu öffnen, verwenden Sie den folgenden Code:
Set rs = db.OpenRecordset("Tabellenname", dbOpenSnapshot)
Schritt 3: Einrichten des Recordset-Objekts
Um ein Recordset-Objekt einzurichten, verwenden wir die OpenRecordset-Methode eines Datenbankobjekts. Es gibt mehrere Möglichkeiten, dies zu tun:
Dim rs As DAO.Recordset
Set rs = CurrentDb.OpenRecordset("Datenquelle")
oder
Dim rs As DAO.Recordset
Dim db As Database
Set db = CurrentDb
Set rs = db.OpenRecordset("Datenquelle")
Die “Datenquelle” kann entweder ein Tabellenname, ein Abfragename oder ein SQL-String sein, der Datensätze zurückgibt.
Schritt 4: Bewegen Sie den Cursor im Recordset
Um den Cursor im Recordset zu bewegen, verwenden Sie eine der folgenden Methoden:
rs.MoveFirst
rs.MoveLast
rs.MoveNext
rs.MovePrevious
rs.Move
Schritt 5: BOF (Beginning of File) und EOF (End of File)
Wenn Sie einen der oben genannten Bewegungsmethoden verwenden und das Recordset keine Datensätze enthält, wird ein Fehler generiert. Um diesen Fehler zu vermeiden, sollten Sie vor der Verwendung einer der Bewegungsmethoden testen, ob Datensätze vorhanden sind. Sie können dies mit folgenden Methoden tun:
If Not (rs.BOF And rs.EOF) Then
'Es gibt Datensätze
End If
If rs.RecordCount <> 0 Then
'Es gibt Datensätze
End If
If (rs.EOF = False) Or (rs.BOF = False) Then
'Es gibt Datensätze
End If
Schritt 6: Ermitteln der Anzahl der Datensätze
Sie können die Anzahl der Datensätze in einem Recordset ermitteln, indem Sie zum letzten Datensatz gehen und die Eigenschaft RecordCount
abrufen. Hier ist ein Beispiel für eine Funktion, die dies tut:
Function FindRecordCount(strSQL As String) As Long
Dim db As Database
Dim rstRecords As Recordset
Set db = CurrentDb
Set rstRecords = db.OpenRecordset(strSQL)
If rstRecords.EOF Then
FindRecordCount = 0
Else
RstRecords.MoveLast
FindRecordCount = rstRecords.RecordCount
End If
rstRecords.Close
db.Close
Set rstRecords = Nothing
Set db = Nothing
End Function
Bitte beachten Sie, dass das Bewegen zum letzten Datensatz (MoveLast
) langsam sein kann, insbesondere bei großen Recordsets oder Recordsets über ein Netzwerk. Die RecordCount
-Eigenschaft ist immer mindestens 1, wenn Datensätze vorhanden sind.
Schritt 7: MoveNext
mit EOF
und Schleife
Eine MoveNext
-Anweisung kann Sie ans Ende des Recordsets (EOF
) führen oder eine MovePrevious
-Anweisung an den Anfang des Recordsets (BOF
). Wenn Sie diese Bedingungen nicht überprüfen, funktioniert Ihr Code möglicherweise bei den meisten Fällen, aber generiert einen Fehler, wenn der letzte/erste Datensatz abgerufen wird. Verwenden Sie daher die folgende Konstruktion, um eine Schleife durch das Recordset zu erstellen:
Do While Not rst.EOF
If rst![MyField] <> Something Then
Exit Do 'Die eigentliche Abbruchbedingung der Schleife
End If
'Ihr eigener Code hier
rst.MoveNext
Loop
Schritt 8: FindFirst
/Seek
mit NoMatch
Wenn Sie die Methoden Seek
oder Find
(z. B. FindFirst
, FindLast
, FindNext
, FindPrevious
) verwenden, sollten Sie immer auf NoMatch
testen. Wenn Sie dies nicht tun, scheint Ihr Code zu funktionieren, bis Sie auf einen Fall stoßen, in dem die Suche fehlschlägt. Hier ist ein Beispiel:
rs.FindFirst "City = 'New York'"
If Not rs.NoMatch Then
'Es ist in Ordnung, mit der Verarbeitung fortzufahren
End If
Schritt 9: Auf ein Feld im Recordset verweisen
Die verfügbaren Felder im Recordset basieren auf der verwendeten Tabelle oder Abfrage und sind im Recordset in der gleichen Reihenfolge wie in der Tabelle oder Abfrage geordnet. Sie können auf ein Feld zugreifen, um einen Wert zu lesen oder zu schreiben, indem Sie die Fields
-Sammlung des Recordset-Objekts aufrufen. Hier sind einige Möglichkeiten, dies zu tun:
rs.Fields("Feldname")
rs.Fields(Variablenname)
rs.Fields(Positionsnummer)
rs(Positionsnummer)
Schritt 10: AddNew
ohne zum LastModified
zu wechseln
Wenn Sie einen neuen Datensatz in ein Recordset einfügen, wird der neue Datensatz nicht automatisch zum aktuellen Datensatz. Um auf den neuen Datensatz zuzugreifen, wechseln Sie zum Lesezeichen LastModified
. Hier ist ein Beispiel:
rst.AddNew
.Fields("Feldname1") = Wert1
.Fields("Feldname2") = Wert2
rst.Update
rst.Bookmark = rst.LastModified
'Arbeiten Sie hier mit dem neuen Datensatz
Schritt 11: Ein Datensatz bearbeiten
Um einen vorhandenen Datensatz zu bearbeiten, verwenden Sie die folgenden Schritte:
Set rs = CurrentDb.OpenRecordset("Datenquelle")
With rs
.Edit
.Fields("Feldname1") = Wert1
.Fields("Feldname2") = Wert2
.Update
End With
oder
Set rs = CurrentDb.OpenRecordset("Datenquelle")
rs.Edit
rs!Feldname1 = Wert1
rs!Feldname2 = Wert2
rs.Update
'Beispiel für die Aktualisierung eines Datensatzes mit Recordset hier
Schritt 12: Schließen Sie ein Recordset
Schließen Sie immer Recordsets und setzen Sie Objekte auf Nothing
, um Speicherlecks zu vermeiden. Es ist schlechte Programmierung, etwas zu öffnen, ohne es explizit zu schließen. Hier ist ein Beispielcode:
Sub SomeName()
On Error Goto Err_Name
Dim db As Database
Dim rst As Recordset
Set db = CurrentDb()
Set rst = db.OpenRecordset("MeineTabelle")
'Nützlicher Code hier
rst.Close 'Schließen Sie, was Sie geöffnet haben
Exit_Name:
Set rst = Nothing 'Alle Objekte aufheben
Set db = Nothing
Exit Sub
Err_MyProc:
'Fehlerbehandlung hier
Resume Exit_Name
End Sub
Schritt 13: Vollständiges Recordset
Hier ist ein Beispiel, wie Sie das Gelernte in Ihrem Code verwenden können:
Sub SomeName()
On Error Goto Err_Name
Dim db As Database
Dim rst As Recordset
Set db = CurrentDb()
Set rst = db.OpenRecordset("MeineTabelle")
Do While Not rst.EOF
If rst![MyField] <> Something Then
Exit Do 'Die eigentliche Abbruchbedingung der Schleife
End If
'Ihr eigener Code hier
rst.MoveNext
Loop
rst.Close 'Schließen Sie, was Sie geöffnet haben
Exit_Name:
Set rst = Nothing 'Alle Objekte aufheben
Set db = Nothing
Exit Sub
Err_Name:
'Fehlerbehandlung hier
Resume Exit_Name
End Sub
Mit diesem Wissen sind Sie in der Lage, den Recordset in MS Access optimal zu nutzen. Viel Spaß beim Programmieren!