Lookupdaten in der Praxis

André Minhorst, Duisburg

Lookupdaten sind solche Daten, die zur näheren Beschreibung von in Tabellen gespeicherten Objekten dienen. Gute Beispiele sind die Anrede oder das Geschlecht von Personen. Im vorliegenden Beitrag erfahren Sie, warum Lookupdaten verwendet werden, in welchen Formen das möglich ist und wie sie am einfachsten verwaltet werden können.

Viele Daten haben Eigenschaften, für die es immer wieder die gleichen Werte gibt. Betrachten Sie das Beispiel aus der Einleitung: Eine Tabelle mit den Daten von Personen enthält in der Regel Informationen wie Vorname, Nachname, Anrede, Geschlecht, Adressdaten und so weiter.

Hinweis

Im Folgenden ist von Objekttabellen und Eigenschaftstabellen die Rede. Objekttabellen enthalten je Datensatz ein Objekt wie beispielsweise eine Person, eine Adresse, ein Produkt oder eine Rechnung. Eigenschaftstabellen enthalten lediglich Werte, die zur näheren Beschreibung der jeweiligen Objekte dienen.

Während Vorname, Nachname und Adressdaten sich meist von Person zu Person unterscheiden, kann das Geschlecht beispielsweise nur zwei Werte annehmen und auch die Werte für die Anrede sind auf Herr, Frau und einige mit diversen Titeln verzierte Varianten beschränkt.

Sie können diese Informationen natürlich mit den anderen Informationen in einer einzigen Tabelle, der Objekttabelle, speichern. Das kann aber erstens zu Inkonsistenzen führen und zweitens ist das Ausklammern von oft wiederkehrenden Daten Platz sparend.

Inkonsistenzen treten vor allem dadurch auf, dass gleichbedeutende Einträge in unterschiedlicher Schreibweise vorkommen, was beispielsweise durch Schreibfehler oder durch die Verwendung von Abkürzungen passieren kann. Das führt zu Fehlern, wenn Abfragen auf diese Daten ausgeführt werden:

Wenn zum Beispiel die Schreibweisen Herr und Hr. als Anrede verwendet werden und eine Abfrage alle Personen mit der Anrede Herr ermitteln soll, fallen die abgekürzten Herren sprichwörtlich unter den Tisch und das Abfrageergebnis wird – bezogen auf die eigentliche Intention – verfälscht.

1:n-Lookupdaten

Wenn Sie diese Daten in eine weitere Tabelle, die Eigenschaftstabelle, ausklammern und nur die Einträge dieser Tabelle als mögliche Werte für die Eigenschaft Anrede verwenden, können keine solchen Inkonsistenzen auftreten (s. Abb. 1).

Abb. 1: Beispiel für Lookupdaten in einer 1:n-Beziehung

Beziehung für 1:n-Lookupdaten festlegen

Um die Beziehung zwischen Objekttabellen und Eigenschaftstabellen wie in Abb. 1 festzulegen, gehen Sie folgendermaßen vor:

  • öffnen Sie die Objekttabelle in der Entwurfsansicht.
  • Markieren Sie das Feld, das mit der Eigenschaftstabelle verknüpft werden soll.
  • Wählen Sie für die Eigenschaft Steuerelement anzeigen den Wert Kombinationsfeld aus.
  • Wählen Sie unter Datensatzherkunft die gewünschte Eigenschaftstabelle aus.
  • Stellen Sie die Eigenschaften Spaltenanzahl und Spaltenbreiten auf die Werte 2 und 0 ein.
  • Stellen Sie die Eigenschaft Standardwert im Register Allgemein auf einen der in den zu verknüpfenden Tabellen enthaltenen Werte ein. (
  • Abb. 2: Festlegen der Verknüpfung zu einer Eigenschaftstabelle

    Hinweis

    Die Verwendung von Standardwerten bei verknüpften Tabellen, deren Beziehung referentielle Integrität voraussetzt, spart dem Benutzer in vielen Fällen die Zeit zum Auswählen der entsprechenden Werte und dem Entwickler die sonst anzulegende Fehlerbehandlung, falls der Benutzer gar keinen Wert auswählt.

    Wenn die Eigenschaften mit denen aus Abb. 2 übereinstimmen, müssen Sie nur noch die Verknüpfung festlegen. Das erfolgt im Beziehungsfenster. Dieses öffnen Sie über den Menüeintrag Extras/Beziehungen. Zeigen Sie dort alle Tabellen an und ziehen Sie das Primärindexfeld von der Eigenschaftstabelle auf das Verknüpfungsfeld in der Objekttabelle. Legen Sie für die Beziehung referentielle Integrität fest.

    m:n-Lookupdaten

    Neben den Lookupdaten, die per 1:n-Beziehung verknüpft sind, gibt es auch solche, die eine m:n-Verknüpfung zwischen der Objekttabelle und der Eigenschaftstabelle erfordern.

    Wenn Sie die Personen in unterschiedliche Kategorien einteilen möchten, können Sie das natürlich auch per 1:n-Verknüpfung tun. Dann kann aber jede Person nur einer Kategorie zugeordnet werden. Was aber passiert, wenn eine Person mehreren Kategorien zugeordnet werden soll Verwenden Sie in dem Fall einfach eine m:n-Beziehung wie in Abb. 3.

    Abb. 3: Lookupdaten per m:n-Beziehung

    Wenn Sie eine solche Verknüpfung verwenden, können Sie jeder Person mehrere Kategorien zuweisen. Damit jede Kategorie jeder Person nur einmal zugewiesen werden kann, erstellen Sie für die Verknüpfungstabelle tblPersonenKategorien einen aus den beiden Feldern der Tabelle bestehenden Primärschlüssel.

    Beziehung für m:n-Lookupdaten festlegen

    Das Anlegen einer Verknüpfung für eine m:n-Beziehung erfolgt im Prinzip genau wie für eine 1:n-Beziehung – nur zweimal. Dabei wird jedes der beiden Primärschlüsselfelder der Verknüpfungstabelle mit dem jeweiligen Primärschlüsselfeld der Objekt- und der Eigenschaftstabelle verknüpft.

    Aktivieren Sie außerdem für beide Beziehungen die Option Löschweitergabe. Das bewirkt, dass beim Löschen sowohl einer Person als auch einer Kategorie alle entsprechenden Einträge der Tabelle tblPersonenKategorien ebenfalls gelöscht werden.

    Die Anzeige von Lookupdaten kann im Fall einer 1:n-Beziehung leicht mit Hilfe eines Kombinationsfeldes erfolgen. Bei m:n-Beziehungen wird es komplizierter: Da nicht feststeht, wie viele Datensätze der Eigenschaftstabelle einem Datensatz der Objekttabelle zugeordnet sind, kann schlecht ausreichend Platz eingeräumt werden.

    Normalerweise würden Sie hier ein Unterformular in der Datenblatt- oder Endlosansicht verwenden, um solche Datensätze anzuzeigen. Da dies bei mehreren solcher Eigenschaften die übersichtlichkeit des Hauptformulars verschlechtern könnte, lernen Sie in den folgenden Abschnitten eine alternative Methode kennen.

    Beispielformular

    Das nachfolgend verwendete Beispielformular hat die Tabelle tblPersonen als Datenherkunft. Ziehen Sie alle Felder aus der Feldliste in den Entwurf des Formulars. Wenn Sie die Verknüpfungen wie in Abschnitt 1.2 angelegt haben, werden die Felder AnredeID und GeschlechtID direkt als Kombinationsfeld angezeigt (s. Abb. 4).

    Abb. 4: Das Beispielformular mit zwei 1:n-Lookupfeldern

    1:n-Lookupdaten anzeigen und bearbeiten

    Die Anzeige von 1:n-Lookupdaten erfolgt eigentlich immer wie in Abb. 4. Alternativen sind kaum denkbar, zumal gegenüber einem herkömmlichen Textfeld lediglich die kleine Schaltfläche zum Ausklappen des Kombinationsfeldes hinzukommt und es damit für den eigentlichen Inhalt nur ein bisschen weniger Platz zur Verfügung stellt.

    Hinweis

    Selbstverständlich können Sie auch ein Listenfeld zur Auswahl von per 1:n-Beziehung verknüpften Daten verwenden. Da sich eine Lookup-Beziehung aber dadurch auszeichnet, dass die verknüpfte Tabelle neben dem Primärindexfeld nur den eigentlichen Eigenschaftswert als Feld hat, reicht ein Kombinationsfeld hier immer aus.

    Kombinationsfelder zur Anzeige von Lookupdaten bieten den Vorteil, dass nicht nur bestehende Datensätze ausgewählt, sondern mit wenigen Handgriffen auch neue Lookupdaten eingegeben werden können.

    Eingabe neuer Lookupdaten perKombinationsfeld

    Dazu stellen Sie lediglich die Ereigniseigenschaft Bei Nicht In Liste des Kombinationsfeldes auf den Wert [Ereignisprozedur] ein und bearbeiten selbige durch einen Mausklick auf die daneben erscheinende Schaltfläche mit den drei Punkten (…).

    Die Ereignisprozedur sollte nach der Bearbeitung wie in Quellcode 1 aussehen. Die Prozedur erhält mit dem Parameter NewData den nicht in der Datensatzherkunft vorhandenen Wert übergeben.

    Dieser wird der Tabelle tblAnreden über die Methode AddNew eines mit dieser Tabelle gefüllten Recordsets hinzugefügt. Die entsprechende Prozedur für das andere Lookupfeld, Geschlecht, können Sie analog anlegen.

    Private Sub AnredeID_NotInList(NewData As String, _    Response As Integer)
        Response = acDataErrAdded
        Dim cnn As ADODB.Connection
        Dim rst As New ADODB.Recordset
        Set cnn = CurrentProject.Connection
        rst.Open "tblAnreden", cnn, adOpenDynamic, _        adLockOptimistic
        rst.AddNew
        rst!Anrede = NewData
        rst.Update
        rst.Close
        cnn.Close
        Set rst = Nothing
        Set cnn = Nothing
    End Sub

    Quellcode 1

    Abb. 5: Beispielformular mit m:n-Lookupdatenfeld

    m:n-Lookupdaten anzeigen

    Die Anzeige von m:n-Lookupdaten kann auf mehrere Arten erfolgen. Für welche Methode man sich entscheidet, hängt vom Anwendungsfall und davon, wie die Anzeige in das bestehende Formular integriert werden kann, ab.

    Bekannte und in Access im Unternehmen mehrfach vorgestellte Methoden sind die per Unterformular und jene mit zwei Listenfeldern, zwischen denen die verknüpften Datensätze und die nicht verknüpften Datensätze hin- und hergeschoben werden können.

    Sie haben das Ende des frei verfügbaren Textes erreicht. Möchten Sie ...

    Workplace

    Jahresabonnement TestzugangOder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:

    Schreibe einen Kommentar