Lies diesen Artikel und viele weitere mit einem kostenlosen, einwöchigen Testzugang.
Die DAO-Bibliothek liefert alle für den Zugriff auf und die Manipulation von Daten in den Tabellen einer Access-Datenbank. Sie können damit Datensätze einer Tabelle oder Abfrage durchlaufen und dabei Informationen auslesen, Datensätze anlegen, bearbeiten oder löschen. Für all diese Aktionen benötigen Sie ein DAO-Recordset – ein Objekt, dass den Zugriff auf die benötigten Daten ermöglicht. Dieser Artikel stellt die Techniken vor, die zum öffnen und Durchlaufen von Datensatzgruppen mittels VBA nötig sind.
Beispieldatenbank
Die Beispiele dieses Artikels finden Sie in der Datenbank 1111_DAO_Recordsets.mdb.
Es gibt diesmal ausschließlich Code-Beispiele. Wenn Sie diese ausprobieren möchten, legen Sie in einer Datenbank ein neues Standardmodul an, geben die Listings ein, platzieren die Einfügemarke irgendwo im Code der auszuführenden Routine und betätigen die Taste F5 (oder F8 für den Einzelschrittmodus).
Records und Recordsets
Ein Record entspricht einem Datensatz, ein Recordset einer Datensatzgruppe. Dabei kann eine Datensatzgruppe allerdings auch keinen oder auch nur einen Datensatz enthalten.
Unter VBA greifen Sie auf Datensätze zu, um diese zu zählen, neu zu erstellen, zu bearbeiten, zu löschen oder einfach um die enthaltenen Werte zu untersuchen.
Recordset öffnen
Das öffnen eines Recordsets erfordert das vorherige Deklarieren und Instanzieren eines Database-Objekt, das einen Verweis auf die Datenbank mit dem zu öffnenden Objekt enthält. Dies geht auf die Schnelle mit den folgenden beiden Zeilen:
Dim db As DAO.Database Set db = CurrentDb
Weitere Informationen hierzu finden Sie im Artikel DAO: Datenbank im Griff mit dem Database-Objekt. Das auf diese Weise verfügbar gemacht Database-Objekt bietet die Funktion OpenRecordset an, mit der Sie die zu öffnende Datensatzgruppe definieren und die einen Verweis auf die zu erstellende Datensatzgruppe zurückliefert.
Für den besseren überblick steigen wir gleich mit einem größeren Beispiel ein:
Public Sub RecordsetOeffnen() Dim db As DAO.Database Dim rst As DAO.Recordset Set db = CurrentDb Set rst = db.OpenRecordset("tblArtikel", _ dbOpenDynaset) Do While Not rst.EOF Debug.Print rst!ArtikelID, rst!Artikelname rst.MoveNext Loop End Sub
Diese Prozedur deklariert neben dem Database– auch ein Recordset-Objekt namens rst, dass den Verweis auf die zu erstellende Datensatzgruppe aufnehmen soll. über diesen Verweis greifen Sie später auf die Daten der Datensatzgruppe zu. Dann erstellt die OpenRecordset-Methode ein Recordset, dass alle Felder und alle Datensätze der Tabelle tblArtikel enthält. Dazu brauchen Sie nur den Namen der betroffenen Tabelle als ersten Parameter anzugeben. Zur Bedeutung des zweiten Parameters kommen wir später; vorerst können Sie den Wert dbOpenDynaset als Standard verwenden.
Nach dem Ausführen dieser Anweisung macht rst prinzipiell den kompletten Inhalt der angegebenen Datenherkunft, hier der Tabelle tblArtikel verfügbar. Danach folgt ein Konstrukt, dass Sie noch ganz oft einsetzen werden: Das Durchlaufen der Datensätze einer Datensatzgruppe. Dies geschieht innerhalb einer Do While-Schleife. Diese prüft jeweils zu Beginn den Wert der Eigenschaft EOF der Recordset-Objekts rst.
Hierzu zur Erläuterung: Der Datensatzzeiger kann sich vor dem ersten Datensatz einer Datensatzgruppe befinden, aber auch hinter dem letzten Datensatz. Wenn EOF den Wert True zurückgibt, befindet sich der Datensatzzeiger hinter dem letzten Datensatz. In diesem Fall sollen die in der Do While-Schleife enthaltenen Anweisungen nicht mehr ausgeführt werden.
Dies wird jedoch zu Beginn nicht der Fall sein. Die Beispieltabelle enthält 77 Datensätze, die erst einmal durchlaufen werden wollen. Damit der Datensatzzeiger, der beim öffnen einer Datensatzgruppe standardmäßig auf den ersten Datensatz zeigt, sich zum nächsten Datensatz der Datensatzgruppe bewegt, rufen Sie die Methode MoveNext des Recordset-Objekts rst auf.
Vorher jedoch soll eine weitere Anweisung ein paar Daten des aktuellen Datensatzes im Direktfenster ausgeben, und zwar die Werte der Felder ArtikelID und Artikelname. Dies gelingt auch auf Anhieb, wie Bild 1 zeigt. Die Debug.Print-Anweisung gibt die beiden Werte eines Datensatzes jeweils in einer eigenen Zeile aus.
Bild 1: Ausgabe von Daten im Direktfenster
Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...
Testzugang
eine Woche kostenlosen Zugriff auf diesen und mehr als 1.000 weitere Artikel
diesen und alle anderen Artikel mit dem Jahresabo