window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-TCJTE9L38H');

DAO-Objekte und -Auflistungen

Lies diesen Artikel und viele weitere mit einem kostenlosen, einwöchigen Testzugang.

Abseits der wohlbekannten Objekte Database, der Recordsets und Fields, sowie TableDefs und QueryDefs, finden Sie noch etliche andere Klassen in der Bibliothek DAO für den Datenzugriff unter VBA, die deutlich seltener zur Anwendung kommen. Im überblick stellen wir hier die wichtigsten Vertreter vor und erläutern die grundlegenden Programmierschritte und Verwendungszwecke.

Beispieldatenbank

Die Beispiele dieses Artikels finden Sie in der Datenbank 1510_DAOObjekte.accdb

Auflistungen und Elemente

Unter dem Terminus Auflistung versteht man unter VBA eine Klasse, die selbst nur einen Behälter für einzelne Klassenobjekte, dessen Elemente, bereitstellt. Sie ähnelt insofern einem Array, kommt technisch gesehen aber als VBA-Collection daher. Die wesentlichen Methoden sind damit die Eigenschaft Count, welche die Zahl der Elemente der Collection zurückgibt, die Eigenschaft Item, über die auf ein einzelnes Element zugegriffen werden kann, und die Methoden Add, sowie Remove, mit denen Elemente der Auflistung hinzugefügt oder aus ihr gelöscht werden können. Zudem lassen sich die Elemente der Auflistung grundsätzlich über eine For-Each-Schleife durchlaufen. Die Schleifenvariable gibt dabei jeweils ein Item der Auflistung zurück.

Während die Items einer allgemeinen Collection keinen besonderen Typ aufweisen, sieht das unter den DAO-Auflistungen anders aus. Hier entspricht ein Item immer einer speziellen DAO-Klasse und spiegelt deren Objektinstanz wieder. So sind die Elemente einer Auflistung Fields vom Objekttyp Field, die Recordsets eines Database-Objekts haben den Typ Recordset. TableDefs enthalten TableDef-Objekte, QueryDefs-Auflistungen QueryDef-Objekte, und so fort. Die Auflistungs-Collection ist in der Regel schlicht dadurch gekennzeichnet, dass an den Elementtypnamen ein s angehängt wird: Error und Errors, Parameter und Parameters.

Die DAO-Auflistungen, um die es aber in diesem Beitrag gehen soll, sind diese:

  • Containers
  • Documents
  • Properties

Containers, Container

Sie gelangen an die Containers, indem Sie die gleichnamige Eigenschaft eines Database-Objekts abfragen. Also etwa so:

 CurrentDB.Containers.Count

Das gibt die Zahl der Container aus, die die aktuelle Datenbank enthält. In der Regel sind das neun, wenn die Datenbank keine Besonderheiten, wie etwa Replikation, aufweist. Die einzelnen Container durchlaufen Sie mit einer Routine, wie in Listing 1. Hier wird die Objektvariable dbs auf die aktuelle Datenbank gesetzt, und in der For-Each-Schleife werden die Elemente der Auflistung Containers abgearbeitet. Die Enumerationsvariable ist mit daoCont benannt. Ausgegeben werden die Namen der Container im VBA-Direktfenster. Als Ergebnis erhalten Sie diese Liste:

Sub GetContainers()
     Dim dbs As Database
     Dim daoCont As DAO.Container
     Set dbs = CurrentDb
     For Each daoCont In dbs.Containers
         Debug.Print daoCont.Name
     Next daoCont
End Sub

Listing 1: Prozedur zum Durchlaufen der DAO-Auflistung Containers

DataAccessPages
Databases
Forms
Modules
Relationships
Reports
Scripts
SysRel
Tables

Sie werden daraus ablesen können, dass es sich dabei um alle Objekte handelt, die die Datenbank enthält. Tatsächlich ist die Containers-Auflistung der virtuelle Speicher für alles, was es in der Datenbank gibt. Forms etwa ist die Gesamtheit der Formulare der Datenbank. Reports verweist auf die Berichte. Modules bezieht sich auf alle VBA-Module, Scripts auf die Makros. Bei Relationships handelt es sich um die Beziehungen zwischen den Tabellen, falls solche festgelegt wurden, während SysRel das grafische Layout der Beziehungen, so, wie es im Beziehungsfenster angezeigt wird, wiedergibt. Bei DataAccessPages handelt es sich um eine obsolete Auflistung, die die Datenzugriffsseiten enthält, welche früher (Office 2000) zum Entwickeln von datengebundenen HTML-Seiten verwendet werden konnten, heute aber nicht mehr unterstützt werden. Tables ist der Container für alle Tabellen und Abfragen der Datenbank. Access macht hier keinen Unterschied – beide geben eben eine Datenmenge zurück.

Irritierend schließlich ist der Databases-Container. Kann eine Datenbank nicht nur ein Database-Objekt enthalten Nein, denn in VBA können Sie über die OpenDatabase-Funktion eine weitere Datenbank in der aktuellen Sitzung öffnen, die sowohl auf die gerade geöffnete Datei verweisen kann, wie auch auf eine andere. Zudem listet der Container interessanterweise auch noch die Datenbankeigenschaften (Summary) als eigene Datenbank auf, wie auch die Werteliste, die man in den Datenbankeigenschaften im Backstage selbst anlegen kann (UserDefined).

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

Schreibe einen Kommentar