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 (siehe Bild 1).

Bild 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 Bild 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. (
  • Bild 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 Bild 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 Bild 3.

    Bild 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 (siehe Bild 4).

    Bild 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 Bild 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

    Bild 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.

    In diesem Beitrag soll eine alternative Möglichkeit vorgestellt werden, die auch in der im Beitrag Karteikasten mit Access in Ausgabe 1/2004 vorgestellten Verwaltung von juristischen Leitsätzen verwendet wird.

    Bei dieser Methode werden die verknüpften Daten Platz sparend nebeneinander in einem Textfeld angezeigt. Für die Auswahl der verknüpften Daten ist ein separates Formular vorgesehen, das über eine kleine Schaltfläche rechts von dem Textfeld geöffnet werden kann. Bild 5 zeigt, wie das bereits beschriebene Beispielformular mit diesen Steuerelementen aussieht. Dabei sollen in dem Textfeld die mit der jeweiligen Person verknüpften Kategorien angezeigt werden.

    Das Feld zur Anzeige der eigentlichen Daten ist ungebunden. Es soll lediglich der Anzeige der Daten dienen. Die Bearbeitung der Daten erfolgt über ein zusätzliches Formular, dass über die rechts von dem Feld befindliche Schaltfläche geöffnet werden kann.

    Formular zur Bearbeitung vonm:n-Lookupdaten

    Bevor die Lookupdaten des per m:n-Beziehung verknüpften Eigenschaftsfeldes angezeigt werden können, müssen sie zunächst einmal eingegeben werden. Das dazu benötigte Formular besteht aus einem Unterformular zur Anzeige der verknüpften Kategorien sowie aus zwei Schaltflächen zum Entfernen einer Kategorie durch den aktuellen Benutzer sowie zum Schließen des Formulars. Legen Sie zunächst das Unterformular namens sfmLookupKategorien an. Als Datenherkunft des Formulars dient die Verknüpfungstabelle tblPersonenKategorien. Ziehen Sie das Feld KategorieID aus der resultierenden Feldliste in den Abfrageentwurf, entfernen Sie das Beschriftungsfeld und positionieren Sie es links oben (siehe Bild 6).

    Bild 6: Entwurfsansicht des Unterformulars frmLookupKategorien

    Bild 7: Entwurfsansicht des Lookupformulars

    Stellen Sie die Eigenschaft Standardansicht auf Endlosformular ein. Damit das Kombinationsfeld nicht die in dem Feld KategorieID enthaltene Zahl, sondern die damit verbundene Kategorie anzeigt, müssen Sie das Feld in ein Kombinationsfeld umwandeln und einige Eigenschaften anpassen:

    Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

    den kompletten Artikel im PDF-Format mit Beispieldatenbank

    diesen und alle anderen Artikel mit dem Jahresabo

    Schreibe einen Kommentar