Warum noch ein Access-Buch?
Für wen ist das Buch?
Jetzt bestellen
+ direkter Download des eBooks!
Nur EUR 59,95!
Fehler gefunden?
Bitte melden!
Wünsche an das Buch?
Her damit!
Was denken die Leser über dieses Buch?
Lesen Sie aktuelle Rezensionen!
Kapitel des noch nicht veröffentlichten Buchs zum Downloaden, Probelesen und Kommentieren
Beispieldatenbanken
Zusätzliches Material

Das Buch im HTML-Format

Für unbestimmte Zeit bieten Addison-Wesley und André Minhorst den kompletten Inhalt des Buchs als Download an. Schauen Sie rein und informieren Sie sich über den Inhalt! Und wenn Ihnen das Buch nützlich erscheint und Sie glauben, dass Sie etwas gelernt haben oder durch das Gelesene sogar etwas Zeit und somit Geld bei Ihrer Arbeit einsparen konnten, können Sie sich ja beim Autor und beim Verlag revanchieren - beispielsweise durch den Kauf dieses Buchs.

Am schönsten wäre es natürlich, wenn Sie das Buch direkt hier bestellen - Sie erhalten das Buch dann direkt vom Verlag, und der Autor und Verlag haben dann noch mehr davon, als wenn Sie es anderswo kaufen.

Danke für Ihr Interesse!

2.5.4 1:n-Beziehungen

2.5.5 n:1-Beziehungen oder Lookup-Beziehungen

n:1-Beziehungen verknüpfen Tabellen, deren Eigenschaften Objekte beschreiben, mit jenen, die ausgegliederte Eigenschaften dieses Objekts enthalten.

Wenn Sie sich etwa eine Adresstabelle vorstellen, die ein Textfeld zur Angabe der Anrede enthält, würden Sie vermutlich ungern zu jedem Eintrag »Herr« oder »Frau« manuell hinzufügen wollen. Stattdessen finden Sie in der Regel ein Kombinationsfeld vor, mit dem sich der gewünschte Eintrag auswählen lässt. Das hat zwei entscheidende Vorteile: Erstens sparen Sie Tipparbeit bei der Eingabe dieses Feldes und zweitens sorgen Sie so dafür, dass nur die für das Feld vorgesehenen Einträge eingegeben werden können.

Gleiches gilt für die Angabe des Geschlechts: In jeden Datensatz »männlich« oder »weiblich« einzutragen, ist eine sehr mühselige Arbeit, die Auswahl der Werte aber durchaus zumutbar. Bei der manuellen Eingabe dürfte sich außerdem früher oder später ein Tippfehler einschleichen, den Sie mit der Auswahlmöglichkeit ausschließen.

Und diese Tippfehler können sich durchaus auswirken: Wenn Sie beispielsweise alle Datensätze der Tabelle ausgeben möchten, in denen das Feld Geschlecht den Wert »weiblich« hat, oder sich nur die Anzahl dieser Felder anzeigen lassen, sorgt eine einzige unrichtige Schreibweise für ein falsches Ergebnis. Daher sollten Sie immer, wenn ein Feld häufig den gleichen Wert annimmt, ein Kombinationsfeld zur Eingabe der Daten in Erwägung ziehen, das aus den Daten einer verknüpften Tabelle gefüttert wird. Es gibt auch die Möglichkeit, in der Felddefinition eine Wertliste als Datensatzherkunft für ein Kombinationsfeld anzugeben. Dazu stellen Sie die in Abbildung 2.52 abgebildeten Eigenschaften ein.

Abbildung 2.52: Kombinationsfeldeinträge per Wertliste

Ausgliedern eines Feldes in eine separate Tabelle

Folgendes Beispiel zeigt, wie Sie ein Feld aus einer Tabelle in eine neue Tabelle ausgliedern. Ausgangspunkt ist die Tabelle aus Abbildung 2.53, die das Feld Anrede für die manuelle Eingabe bereitstellt. Um das Feld auszugliedern, erstellen Sie zunächst eine neue Tabelle namens tblAnreden mit den beiden Feldern AnredeID und Anrede. Legen Sie außerdem in der Tabelle tblAdressen ein neues Feld namens AnredeID mit dem Datentyp Zahl zum Herstellen der Verknüpfung an.

Abbildung 2.53: Adressentabelle mit »hart codierten« Anreden

Nun brauchen Sie nur noch die verschiedenen Einträge des Feldes Anrede der Tabelle tblAdressen in die Tabelle tblAnreden zu übertragen und die dort verwendeten Werte für das Feld AnredeID in das gleichnamige neue Feld der Tabelle tblAdressen einzutragen. Keine Frage, dass Sie das für wenige Datensätze von Hand erledigen können, aber wenn die Adressen-Tabelle mehrere hundert Datensätze enthält, verwenden Sie vielleicht besser zwei Aktionsabfragen oder die folgende VBA-Prozedur. Der Aufruf für den hier vorliegenden Fall lautet folgendermaßen:

FeldAusgliedern "tblAdressen", "tblAnreden", "AnredeID", "Anrede"

Die Prozedur erwartet den Namen der Ausgangstabelle und der Zieltabelle sowie den Namen des Primärschlüsselfeldes der Zieltabelle und des Zielfeldes der auszugliedernden Daten. Diese beiden Felder heißen hier AnredeID und Anrede und müssen in der Ziel- und in der Ausgangstabelle gleich benannt sein:

Public Sub FeldAusgliedern(strAusgangstabelle As String, strZieltabelle _
    As String, strSchluesselfeld As String, strFeldname As String)

    Dim db As DAO.Database
    Dim rst As DAO.Recordset
    Dim lngSchluesselfeld As String

    Set db = CurrentDb
    Set rst = db.OpenRecordset(strAusgangstabelle, dbOpenDynaset)

    Do While Not rst.EOF
        'Ermitteln, ob Eintrag schon in Lookuptabelle vorhanden ist
        lngSchluesselfeld = Nz(DLookup(strSchluesselfeld, _
            strZieltabelle, strFeldname & " = '" & rst(strFeldname) _
            & "'"), 0)
        'Falls nicht, diesen Eintrag hinzufügen...
        If lngSchluesselfeld = 0 Then
            db.Execute "INSERT INTO " & strZieltabelle & "(" _
                & strFeldname & ") VALUES('" & rst(strFeldname) & "')"

            '...und Primärschlüssel ermitteln
            lngSchluesselfeld = Nz(DLookup(strSchluesselfeld, _
                strZieltabelle, strFeldname & " = '" & rst(strFeldname) _
                & "'"), 0)
        End If

        'Verweisfeld auf Lookuptabelle mit Wert füllen
        rst.Edit
        rst(strSchluesselfeld) = lngSchluesselfeld
        rst.Update
        rst.MoveNext
    Loop

    Set rst = Nothing
    Set db = Nothing

End Sub

Listing 2.3: Ausgliedern von Daten in eine Lookup-Tabelle

Abbildung 2.54 zeigt das Ergebnis der Ausgliederung. Die im Feld Anrede vorhandenen Werte wurden in die Tabelle tblAnreden eingetragen und die Werte des dortigen Primärschlüsselfeldes in das neue Fremdschlüsselfeld AnredeID der Tabelle tblAdressen. Zur Kontrolle ist das alte Feld Anrede noch in der Ausgangstabelle vorhanden, dieses können Sie aber ohne Bedenken löschen.

Abbildung 2.54: Ergebnis der Ausgliederung eines Feldes in eine zusätzliche Tabelle

Damit Sie die Werte auch per Kombinationsfeld aus der Lookup-Tabelle auswählen können, legen Sie mit dem Nachschlage-Assistenten eine Beziehung zwischen den beiden Tabellen an. Wie das funktioniert, haben Sie bereits in Abschnitt 2.5.2, »Halbautomatisches Festlegen von Beziehungen« erfahren.

Nächster Abschnitt:

2.5.6 m:n-Beziehungen

© 2006-2008 André Minhorst Alle Rechte vorbehalten.