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 4/2010.

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

Erstellen Sie Tabellen, Felder, Indizes und Beziehungen direkt per VBA-Programmierung mit der DAO-Bibliothek.

Techniken

Datenmodellierung, VBA, DAO

Voraussetzungen

Access 2000 und höher

Beispieldateien

DAOTabellen.mdb

Shortlink

www.access-im-unternehmen.de/732

DAO: Tabellen, Felder und Co. bearbeiten

André Minhorst, Duisburg

Tabellen, Felder und Beziehungen erstellt man normalerweise mit den Werkzeugen der Benutzeroberfläche von Microsoft Access. Es kann jedoch nie schaden, per VBA-Code sowohl auf die Definition der Elemente des Datenmodells zuzugreifen und diese auch erstellen oder ändern zu können. In diesem Beitrag zeigen wir, wie Sie die datenbezogenen Objekte Ihrer Datenbank mit den Eigenschaften und Methoden der DAO-Bibliothek im Griff behalten.

Für den Zugriff auf die Tabellendefinitionen per DAO brauchen Sie natürlich zunächst einen Verweis auf die entsprechende Objektbibliothek. Dieser ist in den meisten Access-Versionen voreingestellt, zur Sicherheit sollten Sie jedoch den Verweise-Dialog (VBA-Editor, Menüeintrag Extras|Verweise) konsultieren, ob dieser einen Verweis namens Microsoft DAO 3.6 Object Library (Access 2003 und älter) oder Microsoft Office x.0 Access Database Engine Object Library (Access 2007 und jünger) enthält.

Datenbank referenzieren

Die aktuell geöffnete Datenbank referenzieren Sie am besten mit der CurrentDB-Funktion. Diese liefert immer den Blick auf den aktuellen Zustand aller Datenbankobjekte. Den Verweis speichern Sie in jedem Fall in einer Variablen des Typs Database.

Nach Verwendung geben Sie den durch die Objektvariable belegten Platz wieder frei:

Dim db As DAO.database

Set db = CurrentDb

'mit db arbeiten

Set db = Nothing

Um eine andere Datenbank zu referenzieren, verwenden Sie statt CurrentDb Folgendes:

Set db = DBEngine.OpenDatabase("c:\db.mdb")

Anschließend greifen Sie über die Objektvariable db genau so auf die Elemente dieser Datenbank zu, wie Sie es bei Verwendung von CurrentDB erledigen würden.

Datenbank erstellen

Eine Datenbank erstellen Sie mit der CreateDatabase-Methode des DBEngine-Objekts. Im folgenden Beispiel wird eine neue Datenbank erzeugt, ein Verweis darauf in der Database-Variablen db gespeichert, der Name der frisch erzeugten Datenbank im Direktfenster ausgegeben und die Datenbank wieder gelöscht:

Dim db As DAO.database

Dim strDatabase As String

strDatabase = CurrentProject.Path & "\Temp.mdb"

Set db = DBEngine.CreateDatabase(strDatabase, dbLangGeneral)

Debug.Print db.Name

Set db = Nothing

Kill strDatabase

In den folgenden Beispielen lassen wir Deklaration, Zuweisung und Leerung der Objektvariablen db aus Platzgründen weg.

Tabelle erstellen

Tabellen werden unter DAO durch das TableDef-Objekt repräsentiert. Für das Erstellen einer Tabelle verwenden Sie die CreateTableDef-Methode des Database-Objekts. Dies reicht aber nicht aus: Das Objekt hängt im leeren Raum und muss noch an die TableDefs-Auflistung der Datenbank angehängt werden. Und selbst dies führt noch zu einem Fehler, weil die Tabelle noch keine Felder enthält. Ein leeres Tabellengerüst lässt sich also weder in der Benutzeroberfläche noch per DAO erzeugen: Es muss immer mindestens ein Feld enthalten. Die folgenden Zeilen erzeugen eine neue Tabelle, fügen ein einfaches Textfeld hinzu und hängen die Tabelle dann an die TableDefs-Auflistung an. Schließlich wird noch das Datenbankfenster aktualisiert, damit dieses die neue Tabelle gleich anzeigt:

Dim tdf As DAO.TableDef

Dim fld As DAO.Field

Set tdf = db.CreateTableDef("tblNeu")

Set fld = tdf.CreateField("ID", dbLong)

tdf.Fields.Append fld

db.TableDefs.Append tdf

Application.RefreshDatabaseWindow

Versteckte Tabellen und Systemtabellen

Wenn Sie die richtigen Optionen einstellen, zeigt Access auch Systemtabellen und versteckte Tabellen im Datenbankfenster beziehungsweise im Navigationsbereich an. Eine Systemtabelle zeichnet sich durch eine spezielle Eigenschaft aus, genau wie eine versteckte Tabelle. Der Unterschied ist: Eine versteckte Tabelle können Sie über die Benutzeroberfläche als solche kennzeichnen (rechte Maustaste auf den Tabellennamen, Eintrag Tabelleneigenschaften, Eigenschaft Ausblenden), eine Systemtabelle nur per VBA. Die üblichen Deklarationen vorausgesetzt, können Sie mit diesen Anweisungen eine Tabelle ausblenden:

Set db = CurrentDb

Set tdf = db.TableDefs("tblKunden")

tdf.Attributes = 1 'dbHiddenObject

Wenn Sie eine Tabelle in eine Systemtabelle umwandeln möchten, stellen Sie die Attributes-Eigenschaft auf den Wert dbSystemObject (-2147483646) ein. Wollen Sie der Eigenschaft Attributes mehrere Attribute zuweisen, verknüpfen Sie die Zahlenwerte oder die Konstanten einfach mit dem Or-Schlüsselwort. Folgendes würde eine versteckte Systemtabelle liefern (nicht, dass dies sinnvoll wäre ...):

tdf.Attributes = dbHiddenObject Or dbSystemObject

Access zeigt versteckte Tabellen und Systemtabellen nur an, wenn die Optionen Ausgeblendete Objekte anzeigen und Systemobjekte anzeigen aktiviert sind.

Tabellenfeld anlegen

Das erste Tabellenfeld haben Sie bereits angelegt, nun folgen die Erläuterungen hierzu. Genau wie beim Anlegen einer Tabelle brauchen Sie zunächst eine Objektvariable, in der Sie den Verweis auf das neue Feld speichern können:

Dim fld As DAO.Field

Dann erstellt die CreateField-Methode des TableDef-Objekts der Tabelle, der das Feld hinzugefügt werden soll, das eigentliche Feld:

Set fld = tdf.CreateField("ID", dbLong)

Als Parameter dienen der Feldname sowie eine Konstante für den Datentyp. Als Datentypen für die Verwendung von DAO 3.6 kommen die folgenden Werte infrage (jüngere DAO-Versionen erlauben noch weitere Datentypen, auf die wir an dieser Stelle aber nicht eingehen):

  • dbBoolean(1): Ja/Nein-Feld
  • dbByte (2): Zahl, Feldgröße Byte
  • dbInteger (3): Zahl, Feldgröße Integer
  • dbLong (4): Zahl, Feldgröße Long
  • dbCurrency (5): Währung
  • dbSingle (6): Zahl, Feldgröße Single
  • dbDouble (7): Zahl, Feldgröße Double
  • dbDate (8): Datum
  • dbBinary (9): Binär (wird in der Liste der Datentypen nicht angezeigt, kann aber dennoch erstellt werden)
  • dbText (10): Text
  • dbLongBinary (11): OLE-Objekt
  • dbMemo (12): Memo
  • dbGUID (15): Zahl, Feldgröße Replikations-ID

Die Prozedur aus Listing 1 erstellt eine Tabelle, die im Entwurf wie in Abb. 1 aussieht.

Listing 1: Anlegen einer Tabelle mit allen unter DAO 3.6 möglichen Felddatentypen

Public Sub AlleDAO36Feldtypen()

    Dim db As DAO.Database

    Dim tdf As DAO.TableDef

    Dim fld As DAO.Field

    Set db = CurrentDb

    On Error Resume Next

    db.TableDefs.Delete "tblDatentypen"

    On Error GoTo 0

    Set tdf = db.CreateTableDef("tblDatentypen")

    Set fld = tdf.CreateField("dbBoolean", dbBoolean)

    tdf.Fields.Append fld

    Set fld = tdf.CreateField("dbByte", dbByte)

    tdf.Fields.Append fld

    Set fld = tdf.CreateField("dbInteger", dbInteger)

    tdf.Fields.Append fld

    Set fld = tdf.CreateField("dbLong", dbLong)

    tdf.Fields.Append fld

    Set fld = tdf.CreateField("dbCurrency", dbCurrency)

    tdf.Fields.Append fld

    Set fld = tdf.CreateField("dbSingle", dbSingle)

    tdf.Fields.Append fld

    Set fld = tdf.CreateField("dbDouble", dbDouble)

    tdf.Fields.Append fld

    Set fld = tdf.CreateField("dbDate", dbDate)

    tdf.Fields.Append fld

    Set fld = tdf.CreateField("dbBinary", dbBinary)

    tdf.Fields.Append fld

    Set fld = tdf.CreateField("dbText", dbText)

    tdf.Fields.Append fld

    Set fld = tdf.CreateField("dbLongBinary", dbLongBinary)

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:

Verwandte Beiträge:

Datenbanken und Tabellen per SQL anpassen

SQL-Datenbankschema auslesen

Indizierung mit Access

Tabellen und Felder dokumentieren

Daten aus verknüpften Tabellen kopieren

Professionelle Datenmodellierung mit Access

Reihenfolge manuell anpassen

Datenhierarchien in Access

Access 2007: Anlagefelder

Verborgene Feldeigenschaften entdecken

Aktionsabfragen mit SQL

Datenzugriff per VBA vereinfachen

© 2003-2015 André Minhorst Alle Rechte vorbehalten.