So verwenden Sie den Recordset in MS Access

So verwenden Sie den Recordset in MS Access

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:

LESEN  Hat Russland auch „Appetit“ auf Weißrussland?

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.

LESEN  24 Dinge, die Sie tun können, wenn Sie sich überfordert fühlen

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!

LESEN  Der ultimative Wärmepumpentrockner Test: Die besten Modelle im Überblick