Zur Hauptseite ... Zum Onlinearchiv ... Zum Abonnement ... Zum Newsletter ... Zu den Tools ... Zum Impressum ... Zum Login ...

Achtung: Dies ist nicht der vollständige Artikel, sondern nur ein paar Seiten davon. Wenn Sie hier nicht erfahren, was Sie wissen möchten, finden Sie am Ende Informationen darüber, wie Sie den ganzen Artikel lesen können.

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

Gedrucktes Heft

Diesen Beitrag finden Sie in Ausgabe 3/2006.

Unser Angebot für Sie!

Lesen Sie diesen Beitrag und 500 andere sofort im Onlinearchiv, und erhalten Sie alle zwei Monate brandheißes Access-Know-how auf 72 gedruckten Seiten! Plus attraktive Präsente, zum Beispiel das bald erscheinende Buch 'Access 2010 - Das Grundlagenbuch für Entwickler'!

Diesen Beitrag twittern

Zusammenfassung

Lernen Sie die DAO-Objekte Database und Recordset kennen.

Techniken

VBA, DAO

Voraussetzungen

Access 97 und höher

Beispieldatei

DAO.mdb

DAO, Teil 1: Database- und Recordset-Objekt

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.

DAO oder ADO?

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.

Abb. 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.

Abb. 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

Datenbank referenzieren

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")

Datensatzgruppen

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.

Quellcode 1: Erstellen eines Recordsets auf Basis eines Recordset-Objekts

Public Sub RecordsetOeffnenAusRecordset()

    Dim db As DAO.Database

    Dim rst As DAO.Recordset

    Dim rstGefiltert As DAO.Recordset

    Set db = CurrentDb

    Set rst = db.OpenRecordset("Artikel", dbOpenDynaset)

    rst.Filter = "Artikelname LIKE 'A*'"

    Set rstGefiltert = rst.OpenRecordset

    'etwas mit rstGefiltert tun

    rstGefiltert.Close

    rst.Close

    Set rstGefiltert = Nothing

    Set rst = Nothing

    Set db = Nothing

End Sub

Die OpenRecordset-Methode hat neben der Quelle eigentlich drei Parameter, von denen in den meisten Fällen aber nur einer verwendet wird:

<Database>.OpenRecordset <Quelle>, <Typ>, <Optionen>, <Sperren>

Generell werden Sie für den Parameter <Typ> häufig die Konstante dbOpenDynaset verwenden. Er erlaubt das Öffnen der allen Typen zugrunde liegenden Daten (Tabelle, Abfrage, SQL-Ausdruck) und hat einen weiteren Vorteil:

Recordsets, die mit dbOpenDynaset geöffnet wurden und auf mehreren verknüpften Tabellen basieren, enthalten zunächst nur die Verweise auf die Datensätze der verknüpften Tabellen. Die eigentlichen Daten werden erst bei Bedarf nachgeladen. Beispiel (in einer Zeile):

Set rst = db.OpenRecordset("SELECT 
Artikel.* FROM Artikel INNER JOIN 
Kategorien ON Artikel.[Kategorie-Nr] =
Kategorien.[Kategorie-Nr]", 
dbOpenDynaset)

Sie haben das Ende des frei verfügbaren Teils des Artikels erreicht. Lesen Sie weiter, um zu erfahren, wie Sie den vollständigen Artikel lesen und auf viele hundert weitere Artikel zugreifen können.

Sind Sie Abonnent?Jetzt einloggen ...
 

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

© 2003-2015 André Minhorst Alle Rechte vorbehalten.