Nachschlage- und mehrwertige Felder

Access 2007 bringt einige Features, welche die Entwicklergemeinde spalten. Eines davon sind die mehrwertigen Felder, auch Multivalue Fields genannt: Sie erlauben dem Einsteiger, leicht mehrere Werte zu einem Nachschlagefeld einer Tabelle hinzuzufügen. Wir werfen einen genauen Blick auf dieses Feature, was auch für Gegner dieser Technik interessant sein dürfte: Immerhin ist keiner davor gefeit, eine mit mehrwertigen Feldern gespickte Datenbank in eine mit sauberer Datenmodellierung zu überführen – hier erfahren Sie deshalb auch, wie Sie an die Daten aus solchen Feldern herankommen.

Der Ausgangspunkt für den Microsoft”schen Ansatz, mehrwertige Felder einzuführen, ist der Wunsch, Access-Einsteigern die Verwendung von Nachschlage- beziehungsweise Kombinationsfeldern möglichst einfach zu machen. Dies aber nicht nur für die Verwendung von Daten aus 1:n-Beziehungen, sondern auch für m:n-Beziehungen!

Das bedeutet prinzipiell, dass ein Feld mehrere Werte speichern kann. Ein Beispiel verdeutlicht dies: Wenn jeder Mitarbeiter eines Unternehmens an mehreren Projekten beteiligt sein kann, und jedes Projektteam wiederum aus einem oder mehrere Mitarbeitern besteht, dann verwenden Sie eine Mitarbeitertabelle, eine Projektetabelle und eine Verknüpfungstabelle, mit der Sie die Mitarbeiter den Projekten zuweisen und umgekehrt (siehe Bild 1).

pic001.png

Bild 1: Der herkömmliche Weg, m:n-Beziehungen im Datenmodell nachzubilden

Mehrwertige Felder bilden dies ohne die notwendigen Felder im Hintergrund nach und gleichzeitig gibt es auch noch eine Erweiterung von Kombinations- und Listenfeldern, die das Auswählen und Bearbeiten der enthaltenen Daten erlaubt.

Nachschlagefelder in Access 2007

Mit der Einführung mehrwertiger Felder hat Microsoft gleich auch noch die Bedienung von Nachschlagefeldern und deren Einrichtung verändert. Beginnen wir mit einem einfachen Nachschlagefeld, das seine Werte aus einer Wertliste beziehen soll und per Nachschlage-Assistent hergestellt wird. Dort geben Sie zunächst an, dass Sie die im Nachschlagefeld anzuzeigenden Werte selbst eingeben, also eine Wertliste anlegen möchten (siehe Bild 2).

pic002.png

Bild 2: Festlegen einer Wertliste anstelle einer Tabelle oder Abfrage als Datensatzherkunft eines Nachschlagefelds

Anschließend legen Sie fest, wie viele Spalten das Nachschlagefeld anzeigen soll und wie die enthaltenen Daten lauten (siehe Bild 3). Die Angabe eines Wertes größer 1 macht hier insofern Sinn, als dass man statt eines Kombinationsfelds als Nachschlagefeld auch gleich ein Listenfeld verwenden kann.

pic003.png

Bild 3: Festlegen der Spaltenzahl und eingeben der Werte des Nachschlagefeldes

Schließlich legen Sie im dritten Schritt den Namen des Nachschlagefeldes fest und geben an, ob Sie jeweils nur einen oder mehrere Werte auswählen möchten (siehe Bild 4) – später wählen wir die Option Mehrere Werte zulassen aus, um ein mehrwertiges Feld zu erstellen. Der Assistent hat alle notwendigen Eigenschaften eingestellt, damit Sie die beiden angegebenen Werte per Kombinationsfeld auswählen können (siehe Bild 5). Gegenüber Access 2003 und älter finden Sie hier vier neue Eigenschaften vor:

pic004.png

Bild 4: Letzte Angaben vor Fertigstellung des Nachschlagefeldes

pic005.png

Bild 5: Die Einstellung dieser Eigenschaften ist das Resultat des Nachschlage-Assistenten.

  • Mehrere Werte zulassen: Legt fest, ob Sie nur einen oder mehrere Werte der Datenherkunft (Wertliste, Tabelle oder Abfrage) auswählen können (dies entspricht prinzipiell einer m:n-Beziehung).
  • Wertlistenbearbeitung zulassen: Darf der Benutzer die Elemente einer Wertliste bearbeiten
  • Bearbeitungsformular für Listenelemente: Hier können Sie ein Formular angeben, mit dem der Benutzer die enthaltenen Werte bearbeiten kann.

Wenn Sie alle vier Eigenschaften auf Nein belassen beziehungsweise Bearbeitungsformular für Listenelemente leer lassen, bedient man das Nachschlagefeld wie in früheren Access-Versionen.

Stellen Sie testweise zunächst die Eigenschaft Wertlistenbearbeitung zulassen auf den Wert Ja ein. Wenn Sie nun in die Datenblattansicht der Tabelle wechseln und das Nachschlagefeld aufklappen, erscheint ein kleines Symbol, über das Sie per Mausklick den Dialog aus Bild 6 öffnen können.

pic006.png

Bild 6: Komfortable Bearbeitung von Wertlisteneinträgen

änderungen an der Liste werden klaglos in die semikola-separierte Eigenschaft Wertliste übernommen, und auch die Eigenschaft Standardwert lässt sich hier komfortabel einstellen.

Die Bearbeitung der Listenelemente ist auch in Formularen möglich – am einfachsten aktivieren Sie dies, indem Sie Wertlistenbearbeitung zulassen im Tabellenentwurf auf Ja einstellen und das Formular einfach mit den Feldern der Wertliste füllen, nachdem Sie als Datenherkunft die betroffene Tabelle angegeben haben. Sie können diese und weitere Eigenschaften dann aber für jedes Formular individuell einstellen (siehe Bild 7).

pic007.png

Bild 7: Die Eigenschaften bezüglich der Nachschlagefelder werden auf die Steuerelemente im Formular übertragen.

Nachteil bearbeitbarer Wertlisten

Eine Wertliste sollten Sie wirklich nur dann einsetzen, wenn die enthaltenen Daten für alle Zeiten gleich bleiben. Bedenken Sie, dass es sich bei der Eigenschaft Wertliste prinzipiell um ein Element des Datenmodells handelt und dieses nicht so einfach durch den Benutzer geändert werden sollte.

Der große Nachteil bearbeitbarer Wertlisten ist, dass es keine Möglichkeit gibt, die vom Benutzer geänderten Daten zu validieren. Der Eingabe redundanter und in der Folge inkonsistenter Daten ist also Tür und Tor geöffnet.

Ein weiterer Nachteil resultiert aus der Beobachtung, dass der Inhalt der Wertliste unter bestimmten Umständen, die wir später aufdecken werden, in einer Eigenschaft eines Steuerelements steckt. Eine änderung der Wertliste erfordert das anschließende Speichern des Formulars und somit eine änderung des Entwurfs eines Objekts – und das ist in der Runtime-Version von Access grundsätzlich nicht möglich. Wenn Sie dem Benutzer Ihrer Datenbank also eine solche Funktion bereitstellen möchten, ziehen Sie in Betracht, dass dies mit der Runtime nicht funktionieren wird.

Vom Nachschlagefeld zum mehrwertigen Feld

Als Beispiel für ein mehrwertiges Feld haben wir in der Beispieltabelle tblMitarbeiter das Feld Funktionen eingerichtet, aus dem mehrere Werte ausgewählt werden können. Ausgehend von einem normalen Nachschlagefeld, das wie oben beschrieben per Assistent erstellt wurde, brauchen wir nur die Eigenschaft Mehrere Werte zulassen auf Ja einzustellen. Es erscheint dann eine Meldung, die besagt, dass dies nicht rückgängig zu machen sei.

Das Ergebnis sieht wie in Bild 8 aus. Wählt man die Listeneinträge wie in dieser Abbildung aus, erscheinen diese anschließend in der folgenden Form als Feldinhalt:

pic008.png

Bild 8: Ein mehrwertiges Feld

Kaffeekocher; Mädchen für alles; Programmierer

Im Hintergrund

Gehen wir ein wenig in die Tiefe und schauen uns an, was sich in den Systemtabellen getan hat. Dazu aktivieren wir zunächst deren Anzeige, indem wir aus dem Kontextmenü der Überschrift des Navigationsbereichs den Eintrag Navigationsoptionen… auswählen und dort die Option Systemobjekte anzeigen aktivieren.

Im Navigationsbereich erschienen nun einige zuvor nicht sichtbare Tabellen, von denen uns zunächst die Tabelle MSysComplexColumns interessiert. Diese sieht aktuell wie in Bild 9 aus und enthält, was wir suchen: einen Hinweis darauf, dass Access im Hintergrund mehr als eine semikola-separierte Liste ausgewählter Elemente speichert.

pic009.png

Bild 9: Diese Tabelle enthält Informationen über die Speicherung des Inhalts mehrwertiger Felder.

In dieser Tabelle taucht der Name unseres Feldes auf, eine ComplexID, die möglicherweise als eindeutiger Index der mehrwertigen Felder dient, und eine ComplexTypeObjectID. Interessant sind die beiden Einträge ConceptualTableID und FlatTableID: Diese enthalten Einträge, die wir in einer anderen Systemtabelle, nämlich MSysObjects, wiederfinden. Nach dem Ausblenden einiger Spalten und dem Filtern nach den Werten 70 und 138 im Feld Id liefert die Tabelle das Bild aus Bild 10. Auf die Tabelle aus der zweiten Zeile können wir leider nicht zugreifen – Access meldet, dieses Objekt sei nicht vorhanden.

pic010.png

Bild 10: Die zweite Tabelle enthält die Daten des mehrwertigen Feldes der ersten Tabelle.

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