Wie Sie die durch einen Benutzer ausgewählten Einträgen im Listenfeld auslesen, haben Sie bereits im Artikel “Mehrfachauswahl in Listenfeldern auslesen” erfahren. In diesem Folgeartikel geht es darum, eine solche Auswahl auf Basis der in einer Tabelle gespeicherten Daten wieder herzustellen. Dazu müssen wir diese Auswahl jedoch erst einmal speichern – und später kümmern wir uns um die Reproduktion
Beispieldatenbank
Die Beispiele dieses Artikels finden Sie in der Datenbank 1204_Mehrfachauswahl.mdb.
Listenfeldauswahl ganz einfach
Normalerweise können Sie Listenfelder, genau wie Kombinationsfelder, mit einer Datensatzherkunft versehen (also etwa mit einer Tabelle oder Abfrage, welche die Daten liefert) und das Steuerelement über die Eigenschaft Steuerelementinhalt an ein Feld einer weiteren Tabelle binden.
Ein Beispiel ist die Auswahl einer Anrede für einen Kunden. Normalerweise verwenden Sie hier ein Kombinationsfeld, aber Sie können dies – ausreichend Platz vorausgesetzt – auch mit einem Listenfeld erledigen. Der Vorteil ist, dass man alle zur Auswahl stehenden Einträge direkt sehen kann – zumindest, wenn es nicht mehr Einträge gibt, als das Listenfeld im sichtbaren Bereich anzeigen kann (siehe Bild 1). Das Listenfeld ist mit der Tabelle tblAnreden als Datensatzherkunft ausgestattet und es ist an das Feld AnredeID der im Formular angezeigten Tabelle tblKunden gebunden. Damit das Listenfeld nur die Anrede, nicht aber die Werte des Feldes AnredeID anzeigt, stellen Sie die Eigenschaften Spaltenanzahl und Spaltenbreite auf die Werte 2 und 0cm ein. So wird das erste Feld mit der AnredeID ausgeblendet. Dieses muss aber dennoch als gebundene Spalte vorliegen: Access sucht nämlich in der Tabelle tblAnreden nach dem Datensatz, dessen als gebundene Spalte angegebenes Feld den gleichen Wert enthält wie das in der Eigenschaft Steuerelementinhalt angegebene Feld, also das Feld AnredeID der Tabelle tblKunden.
Bild 1: Lookup-Daten per Listenfeld auswählen
Damit haben Sie gleich zwei Fliegen mit einer Klappe geschlagen: Erstens wird die Auswahl so automatisch gespeichert und zweitens wird sie beim Anzeigen eines Datensatzes auch gleich wieder hergestellt.
Mehrfachauswahl speichern
Schauen wir uns nun an, wie sich dies für die Mehrfachauswahl realisieren lässt. Wenn Sie dies mit der Mehrfachauswahl durchführen, ist der Aufwand schon erheblich höher.
Als Beispiel verwenden wir das Zuweisen von Publikationen zu Kunden, als eine Art Verteilerliste. Dazu benötigen wir drei Tabellen: erstens eine Tabelle tblKunden zum Speichern der Kundendaten, zweitens die Tabelle tblPublikationen und noch eine dritte Tabelle, mit der wir die Publikationen den Kunden zuweisen. Damit realisieren wir eine m:n-Beziehung zwischen den Tabellen tblKunden und tblPublikationen. Dies bedeutet, dass wir über die dritte Tabelle, die wir schlicht tblVerteiler nennen, jede Publikation jedem Kunden zuordnen können. Das Datenmodell sieht wie in Bild 2 aus. Dabei enthält die Tabelle tblVerteiler zwei Fremdschlüsselfelder, mit denen Sie je Datensatz einen Eintrag der Tabelle tblKunden und einen Eintrag der Tabelle tblPublikationen auswählen können. Damit kein Kunde eine Publikation doppelt erhält, haben wir außerdem einen eindeutigen Index für die beiden Felder PublikationID und KundeID festgelegt (siehe Bild 3).
Bild 2: Eindeutiger Index für die Kombination aus Kunde und Publikation
Bild 3: Datenmodell für den Publikationsverteiler
Formular zur Auswahl von Publikationen
Mit diesen Tabellen ausgestattet können wir uns an den Entwurf des Formulars zur Auswahl der Publikationen je Benutzer begeben. Das Formular soll frmVerteiler heißen und verwendet die Tabelle tblKunden als Datenherkunft. Ziehen Sie die notwendigsten Felder der Tabelle tblKunden in den Detailbereich und fügen Sie dem Formular ein Listenfeld namens lstPublikationen hinzu. Das sind vorerst alle notwendigen Steuerelemente, das Formular sollte nun so aussehen wie in Bild 4.
Bild 4: Entwurf des Formulars zum Festlegen der Verteilerlisten
Nun kümmern wir uns um die im Listenfeld angezeigten Daten. Eigentlich soll das Listenfeld nur die Liste aller Publikationen anzeigen. Aber wir benötigen doch noch Informationen darüber, ob eine Publikation über die Tabelle tblVerteiler einem Kunden zugewiesen wurde Das stimmt prinzipiell. Allerdings benötigen wir diese Information nur zum Markieren der zugeteilten Publikationen. Es werden jedoch immer alle Publikationen angezeigt – wir brauchen das Listenfeld lstPublikationen also einfach nur mit der Tabelle tblPublikationen als Datensatzherkunft zu versehen. Markieren Sie also das Listenfeld im Formularentwurf und stellen Sie die Eigenschaft Datensatzherkunft entsprechend ein. Außerdem soll nur die Publikation, nicht aber die Publikation-ID erscheinen. Dies erreichen wir durch Setzen der Eigenschaften Spaltenanzahl und Spaltenbreiten auf die Werte 2 und 0cm. Stellen Sie außerdem die Eigenschaft Mehrfachauswahl auf Einfach ein (oder Erweitert – je nach Anforderung). Das Formular bietet bereits jetzt die Möglichkeit, eine oder mehrere Publikationen je Kunde auszuwählen – allerdings werden diese weder gespeichert noch ändert sich die Auswahl beim Anzeigen des nächsten Kunden (siehe Bild 5).
Bild 5: Das Formular zum Festlegen von Verteilerlisten in der Formularansicht
Auswahl speichern
Nun wird es interessant: Die Auswahl soll nun gespeichert und beim Anzeigen eines Kunden wieder hergestellt werden. Zum Speichern gibt es grundsätzlich zwei Möglichkeiten:
- Alle ausgewählten Publikationen eines Kunden werden beim Wechseln des Datensatzes beziehungsweise beim Schließen des Formulars gespeichert.
- Jede Publikation wird gleich beim Auswählen gespeichert.
Möchten Sie weiterlesen? Dann lösen Sie Ihr Ticket!
Hier geht es zur Bestellung des Jahresabonnements des Magazins Access [basics]:
Zur Bestellung ...
Danach greifen Sie sofort auf alle rund 400 Artikel unseres Angebots zu - auch auf diesen hier!
Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein: