BEISPIEL
Kapitel 6: DAO-Programmierung
Tabellen verknüpfen (Relationen)
Wer bereits mit Access programmiert hat, kennt die bequeme Möglichkeit, im QbE-Fenster (QbE=Query
by Example) Beziehungen zwischen Tabellen mit Hilfe eines grafischen Editors darzustellen bzw. zu gene-
rieren.
Abbildung 6.2 Beispiel für Verknüpfungen innerhalb einer Datenbank
Neben der interaktiven Entwicklung kann man auch über die Datenzugriffsobjekte (DAO) diese Beziehun-
gen festlegen. Alles, was Sie dazu brauchen, ist ein initialisiertes Database-Objekt sowie ein Relation-Objekt.
Weiterhin muss innerhalb der Relation die Haupttabelle über einen Hauptindex (Primary Key) verfügen
(z.B. über ein Zählerfeld).
Das Beispiel behandelt eine Tabellenverknüpfung über DAO. Einem Raum sollen mehrere Personen zuge-
ordnet werden. Es handelt sich demnach um eine simple 1:n-Beziehung (Relation zwischen der Tabelle
Raum
und der Tabelle
Personen
).
Dim db As Database
Dim td As TableDef
Dim rel As Relation
Dim fld As Field
Set db = CurrentDb() ' Database-Objekt initialisieren
306
BEISPIEL
Erstellen einer Relation mit dem Namen
Relation1
zwischen der Tabelle
Raum
und der Tabelle
Personen
:
Set rel = db.CreateRelation("Relation1", "Raum", "Personen")
Festlegen des Feldes in der Haupttabelle (Raum):
Set fld = rel.CreateField("#")
Festlegen des Feldes in der Fremdtabelle (
Personen
):
fld.ForeignName = "Raum#"
Anhängen des Feldes an die Fields-Auflistung der Relation:
rel.Fields.Append fld
Anhängen der Relation an die Relationsauflistung der Datenbank:
db.Relations.Append rel
db.Close
Im obigen Beispiel haben wir lediglich eine einfache Beziehung aufgebaut, referenzielle Integrität besteht
noch nicht. Dazu müssen wir die Attributes-Eigenschaft des Relation-Objekts bemühen. Folgende Möglich-
keiten bieten sich an:
Parameter Bedeutung
dbRelationUnique Zwischen den Tabellen-Feldern wird eine 1:1-Beziehung hergestellt.
dbRelationDontEnforce Die referenzielle Integrität der Beziehung wird nicht erzwungen.
dbRelationInherited Die verwendeten Tabellen befinden sich nicht in der aktuellen Datenbank.
dbRelationUpdateCascade Aktualisierungen werden weitergegeben.
dbRelationDeleteCascade Löschvorgänge werden weitergegeben. Im obigen Beispiel würde das bedeuten, dass, wenn
ein Raum gelöscht wird, auch alle Personen mit der entsprechenden Raumnummer ebenfalls
gelöscht werden.
Tabelle 6.9 Attributes-Eigenschaften
Löschweitergabe an Detaildatensatz:
Set rel = db.CreateRelation("Relation1", "Raum", "Personen")
Set fld = rel.CreateField("#")
fld.ForeignName = "Raum#"
rel.Attributes = dbRelationDeleteCascade
rel.Fields.Append fld
db.Relations.Append rel
307
Grundlegende Arbeitstechniken

Get Microsoft Office Access 2007-Programmierung - Das Handbuch now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.