Zusammenfassung
Lernen Sie die DAO-Objekte Database und Recordset kennen.
Techniken
VBA, DAO
Voraussetzungen
Access 97 und höher
Beispieldatei
DAO.mdb
André Minhorst, Duisburg
Die Bibliothek DAO (Data Access Objects) liefert dem VBA-Entwickler alles, was er für den Zugriff auf die in einer Datenbank enthaltenen Daten benötigt. Darüber hinaus offeriert diese Bibliothek Funktionen zum Bearbeiten des Tabellenentwurfs oder für den Zugriff auf Abfragen. Access im Unternehmen stellt die wichtigsten Techniken dieser Bibliothek vor.
Access erscheint seit Version 2000 mit zwei Bibliotheken für den Datenzugriff unter VBA. Die neuere namens ADO ist vor allem für den Einsatz in Access-Projekten (ADPs) geeignet. Anwendungen, die nicht auf SQL-Server-Datenbanken wie den Microsoft SQL Server und die MSDE zugreifen sollen, sondern die JET-Engine verwenden, sind mit DAO besser bedient.
DAO existiert bereits seit sehr langer Zeit, ist stabil und ADO performance-technisch beim Einsatz mit .mdb-Datenbanken meist überlegen. Wenn also nicht absehbar ist, dass aus einer Datenbank eine Client-Server-Datenbank wird, sollten Sie DAO in Ihrer Datenbank einsetzen.
Verweise
Access 97 besitzt standardmäßig nur einen Verweis auf DAO, Access 2000 nur einen auf ADO. Seit Access 2002 sind beide im Boot. Beide Bibliotheken lassen sich parallel in einer Datenbankanwendung einsetzen. Dabei ist zu beachten, dass einige Elemente wie etwa das Recordset-Objekt in beiden Bibliotheken vorhanden sind.
Bild 1 zeigt den Verweise-Dialog von Access 2003: Hier ist der Verweis auf die DAO-Bibliothek über dem der ADO-Bibliothek angeordnet. In vorhergehenden Versionen war dies noch anders, aber Microsoft hat offensichtlich erkannt, dass der Großteil der Datenbanken auf JET basiert und die Entwickler dabei DAO einsetzen. Auch im Internet finden sich viel mehr DAO- als ADO-Beispiele.
Bild 1: Verweise-Dialog mit DAO- und ADO-Bibliothek
Leider handelt es sich dabei nicht um die gleichen Objekte; sie enthalten je nach Bibliothek unterschiedliche Methoden und Eigenschaften. Daher müssen Sie genau darauf achten, auch die richtige Version einzusetzen. Global lässt sich dies festlegen, indem Sie im Verweise-Dialog die bevorzugte Bibliothek weiter oben platzieren. Access durchsucht die Bibliotheken immer nach ihrer Reihenfolge im Verweise-Dialog.
Auf Nummer Sicher gehen Sie, wenn Sie den jeweiligen Objekten die Bibliothek durch einen Punkt getrennt voranstellen, also etwa so:
Dim rst As DAO.Recordset Dim rst As ADODB.Recordset
Bevor Sie die Kommandos der DAO-Bibliothek auf die Daten Ihrer Tabelle loslassen, müssen Sie diese zunächst einmal referenzieren. Die meistbenutzte Variante ist folgende:
Dim db As DAO.Database Set db = CurrentDB
Diese Anweisungen deklarieren und instanzieren ein Database-Objekt und füllen es mit einer neuen Instanz der aktuellen Datenbank, die die CurrentDB-Funktion erzeugt.
Die zweite Variante geht so:
Dim db As DAO.Database Set db = DBEngine(0)(0)
Die zweite Zeile erzeugt keine neue Instanz der aktuellen Datenbank, sondern verweist auf die bestehende Instanz – eben DBEngine(0)(0).
Letzteres ist eine Abkürzung für folgenden Ausdruck:
DBEngine.Workspaces(0).Databases(0)
Microsoft empfiehlt in der Onlinehilfe, die CurrentDB-Funktion für den Zugriff auf die aktuelle Datenbank zu verwenden (siehe Onlinehilfe, Stichwort CurrentDB).
Zugriff auf externe Datenbanken
Wenn Sie auf eine externe Datenbank zugreifen möchten, verwenden Sie die OpenDatabase-Methode. Ein Beispielaufruf sieht wie folgt aus (in einer Zeile):
Set db = DBEngine.Workspaces(0).OpenDatabase("<Datenbankname")
Der Zugriff auf Daten erfolgt unter DAO immer über eine Datensatzgruppe, die im Code durch ein Objekt des Typs Recordset repräsentiert wird.
Ein Recordset-Objekt ist mit einer Tabelle oder dem Ergebnis einer Abfrage vergleichbar: Es enthält keinen, einen oder mehrere Datensätze und ein oder mehrere Felder. Der einzige Unterschied ist, dass Sie diese Repräsentation per VBA bearbeiten und nicht in der Datenblattansicht einer Tabelle oder Abfrage oder in einem Formular.
Datensatzgruppe öffnen
In den meisten Fällen werden Sie eine Datensatzgruppe mit der OpenRecordset-Methode des Database-Objekts öffnen (was Sie wiederum, wie oben beschrieben, per CurrentDB oder DBEngine(0)(0) erhalten).
öffnen auf Basis eines Objekts oder einer SQL-Abfrage
Als Grundlage für das öffnen eines Recordset-Objekts eignen sich Tabellen, Abfragen oder SQL-Ausdrücke. Der Name der Tabelle oder Abfrage beziehungsweise der SQL-Ausdruck ist das erste Argument der OpenRecordset-Anweisung. Die einfachste Variante sieht wie folgt aus:
Dim db As DAO.Database Dim rst As DAO.Recordset Set db = CurrentDb Set rst = db.OpenRecordset("Artikel")
Diese einfachste Variante öffnet das Recordset mit dem Standardparameter dbOpenTable. Diese Variante funktioniert allerdings nur bei Recordsets auf Basis von Tabellen.
Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...
den kompletten Artikel im PDF-Format mit Beispieldatenbank
diesen und alle anderen Artikel mit dem Jahresabo