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 6/2011.

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

Legen Sie Beziehungen per VBA an und lesen Sie die wichtigsten Eigenschaften aus.

Techniken

VBA, Datenmodellierung

Voraussetzungen

Access 2000 und höher

Beispieldateien

BeziehungenPerDAOVerwalten.mdb

Shortlink

www.access-im-unternehmen.de/807

Beziehungen per DAO verwalten

André Minhorst, Duisburg

Beziehungen legt man normalerweise über das Beziehungsfenster an - oder man bemüht den Nachschlage-Assistenten, der zusätzlich zum Nachschlagefeld auch noch die Beziehung erstellt. Manche Anforderungen verlangen jedoch, dass man Beziehungen per VBA erstellt oder diese ausliest. In diesem Beitrag finden Sie daher alles, was Sie zum Thema Beziehungen und DAO wissen müssen.

Beziehungen

Beziehungen dienen dazu, Datensätze verschiedener Tabellen zu verknüpfen. Dabei besitzt die eine Tabelle einen eindeutigen Wert im Primärschlüsselfeld. Die andere Tabelle besitzt ein Fremdschlüsselfeld, das im Normalfall nur Werte aufnehmen sollte, die im Primärschlüsselfeld der ersten Tabelle vorkommen. Die beiden Tabellen heißen Master- und Detailtabelle, wobei die Tabelle mit dem an der Beziehung beteiligten Primärschlüsselfeld die Mastertabelle und die mit dem Fremdschlüsselfeld die Detailtabelle ist.

Beziehungen auslesen

Wenn Sie per Code die Beziehungen einer Datenbank auslesen möchten, erledigen Sie dies beispielsweise mit dem Relation-Objekt der DAO-Bibliothek. Es gibt für jede Beziehung, also für jeden Beziehungspfeil im Beziehungsfenster, ein Relation-Objekt in der Datenbank. Die Relation-Objekte referenzieren Sie entweder über die Relations-Auflistung. Diese Auflistung ist wiederum ein Element des Database-Objekts. Dies führt zu einer recht einfachen Prozedur, um die Anzahl der Beziehungen und deren Namen auszugeben - hier für die Beziehungen der Südsturm-Datenbank aus Abb. 1:

pic001.png

Abb. 1: Beziehungen in der Südsturm-Datenbank

Public Sub BeziehungenAuflisten()

    Dim db As DAO.Database

    Dim rel As DAO.Relation

    Set db = CurrentDb

    Debug.Print "Anzahl Beziehungen: " _

& db.Relations.Count

    For Each rel In db.Relations

        Debug.Print rel.Name

    Next rel

End Sub

Das Ergebnis sind die Anzahl und eine Liste der Namen der Beziehungen, die sich jeweils aus den in beiden Tabellen gespeicherten Elementen zusammensetzen:

Anzahl Beziehungen: 7

ArtikelBestelldetails

BestellungenBestelldetails

KategorienArtikel

LieferantenArtikel

PersonalBestellungen

tblKundentblBestellungen

VersandfirmenBestellungen

Welche Informationen liefert ein solches Relation-Objekt? Natürlich finden Sie dort zumindest die für eine Beziehung notwendigen Informationen, also die Namen der beteiligten Felder und Tabellen: der Mastertabelle mit dem Primärschlüsselfeld und der Detailtabelle mit dem Fremdschlüsselfeld.

Diese Informationen liefert beispielsweise die folgende Prozedur:

Public Sub BeziehungsdatenAusgeben()

    Dim db As DAO.Database

    Dim rel As DAO.Relation

    Set db = CurrentDb

    For Each rel In db.Relations

        Debug.Print rel.Name

        Debug.Print "=================="

        Debug.Print "Mastertabelle:"

        Debug.Print "  " & rel.Table

        Debug.Print "  " & rel.Fields(0).Name

        Debug.Print "Detailtabelle:"

        Debug.Print "  " & rel.ForeignTable

        Debug.Print "  " & rel.Fields(0).ForeignName

        Debug.Print ""

    Next rel

End Sub

Für eine einzige Beziehung sieht das Ergebnis etwa wie folgt aus:

tblKundentblBestellungen

==================

Mastertabelle:

  tblKunden

  KundeID

Detailtabelle:

  tblBestellungen

  KundeID

Dabei legen Sie im Fremdschlüsselfeld KundeID der Detailtabelle tblBestellungen fest, zu welchem Kunden aus der Tabelle tblKunden, hier referenziert über einen der Werte des Primärschlüsselfeldes KundeID der Mastertabelle, eine Bestellung gehört.

Wichtig ist, dass Table und Fields(0).Name immer die Daten zur Mastertabelle und ForeignTable und Fields(0).ForeignName die Daten zur Detailtabelle liefern.

Ach, und warum eigentlich der Bezug zum ersten Element der Fields-Auflistung? Kann es denn Beziehungen geben, die mehr als ein Feld enthalten? Ja, das funktioniert, und zwar wie in Abb. 3.

pic009.png

Abb. 3: Beziehung über zwei Felder

Dies macht in der Praxis nur wenig Sinn, aber für genau eine solche Definition können Sie mehr als ein Feld aus der Fields-Auflistung des Relation-Objekts auslesen. Im Modul mdlDAOBeziehungen der Beispieldatenbank finden Sie unter BeziehungsdatenAusgeben_MehrereFelder ein Beispiel, wie Sie auch die Felder solcher Beziehungen auslesen können (wir werden Ihnen nicht zeigen, wie Sie solche Beziehungen per VBA anlegen ...).

Attribute der Beziehung

Weitere Informationen liefert die Eigenschaft Attributes. Diese enthält einen Zahlenwert, der verschiedene Eigenschaftswerte verknüpft.

Die möglichen Werte lauten wie folgt und sind etwa im Objektkatalog zu finden (s. Abb. 2):

pic002.png

Abb. 2: Attributes-Konstanten im Objektkatalog

  • dbRelationUnique (1): Kennzeichnet eine 1:1-Beziehung.
  • dbRelationDontEnforce (2): Beziehung ohne referentielle Integrität.
  • dbRelationInherited (4): Beziehung besteht zwischen den Tabellen einer verknüpften Datenbank.
  • dbRelationUpdateCascade (256): Beziehung mit Aktualisierungsweitergabe.
  • dbRelationDeleteCascade (4096): Beziehung mit Löschweitergabe.
  • dbRelationLeft (16777216): Kennzeichnet ein LEFT JOIN zwischen den Tabellen.
  • dbRelationRight (33554432): Kennzeichnet ein RIGHT JOIN zwischen den Tabellen.

Alle Informationen über eine Beziehung liefert nun die Prozedur aus Listing 1. Eine einfache Beziehung mit referentieller Integrität liefert dann etwa folgende Ausgabe (s. Abb. 4):

Listing 1: Ermitteln aller Eigenschaften einer Beziehung

Public Sub BeziehungsdatenAusgeben()

    Dim db As DAO.Database

    Dim rel As DAO.Relation

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.