Im Artikel haben wir uns bereits angesehen, wie man die Daten einer m:n-Beziehung mit Haupt- und Unterformular verwalten kann. Wir wollen nun eine Alternative dazu betrachten, bei der wir die Daten der beiden per m:n-Beziehung verknüpften Tabellen mithilfe zweier Listenfelder anzeigen und verwalten wollen. In diesem Fall schauen wir uns die Daten der Tabellen tblBuecher und tblKategorien an, die über die Tabelle tblBuecherKategorien miteinander verknüpft sind. Wir wollen dazu in einem Formular jeweils einen Buchdatensatz anzeigen in zwei Listenfeldern jeweils die dem Buch zugeordneten Kategorien und die nicht zugeordneten Kategorien. Als Sahnehäubchen fügen wir noch einige VBA-Funktionen hinzu, mit denen wir einem Buch neue Kategorien zuweisen oder diese entfernen können.
Beispieldatenbank
Die Beispiele dieses Artikels findest Du in der Datenbank FormulareBasics_mnListenfelder.accdb.
Ausgangssituation im Datenmodell
Die Tabellen, die wir für unser Beispiel verwenden, sehen wir in Bild 1.
Bild 1: Tabellen für unser Beispiel im Datenmodell
Über die Verknüpfungstabelle tblBuecherKategorien verknüpften wir die Tabellen tblBuecher und tblKategorien so, dass jedem Buch mehrere Kategorien zugeordnet werden können und andersherum jede Kategorie mehreren Büchern.
Dazu können wir beliebige Kombinationen aus Büchern und Kategorien in der Tabelle tblBuecherKategorien hinterlegen.
Formulare zur Anzeige der Bücher
Um jeweils ein Buch anzuzeigen, dem wir dann über zwei Listenfelder Kategorien hinzufügen oder diese entfernen, erstellen wir ein neues Formular. Für dieses stellen wir die Eigenschaft Datensatzquelle auf die Tabelle tblBuecher ein.
Dadurch können wir aus der Feldliste die gewünschten Felder, in diesem Fall nur die beiden Felder BuchID und Buchtitel, in den Entwurf des Formulars ziehen (siehe Bild 2).
Bild 2: Erstellen des Formulars zur Anzeigen von Büchern
Listenfelder zum Formular hinzufügen
Damit kommen wir gleich zu den Listenfeldern. Wir fügen zwei Listenfelder zum Formular hinzu und ordnen diese so an, dass sich die Beschriftung der Listenfelder sich jeweils über diesen befindet (siehe Bild 3).
Bild 3: Hinzufügen der Listenfelder
Um die Arbeit zum Ausrichten gering zu halten, erledigen wir dies zuerst mit nur einem Listenfeld: Wir fügen dieses hinzu, verschieben das Bezeichnungsfeld über das Listenfeld und richten es dann genau aus.
Mit dieser Vorarbeit brauchen wir das Listenfeld nur noch zu kopieren und erneut einzufügen, um uns die Arbeit beim zweiten Listenfeld zu sparen.
Für die Bezeichnungsfelder der Listenfelder hinterlegen wir beispielsweise die Texte Zugeordnete Kategorien und Weitere Kategorien.
Entsprechend vergeben wir als Namen die Werte lstZugeordneteKategorien und lstWeitereKategorien.
Datensatzherkunft für die zugeordneten Kategorien
Wir weisen dem ersten Listenfeld nun die Abfrage hinzu, die nur die Kategorien anzeigt, die über die Tabelle tblBuecherKategorien mit dem aktuell angezeigten Buch verknüpft sind. Diese Abfrage erstellen wir zunächst als gespeicherte Abfrage.
Diese weisen wir die beiden Tabellen tblBuecherKategorien und tblKategorien als Datenquelle zu.
Aus der Tabelle tblKategorien ziehen wir die beiden Felder KategorieID und Kategorie in das Entwurfsraster.
Aus der Tabelle tblBuecherKategorien fügen wir schließlich noch das Feld BuchID hinzu.
Das Feld BuchID soll lediglich als Kriterium für die Abfrage dienen, daher blenden wir diese durch Deaktivieren der Zeile Anzeigen für dieses Feld aus.
Als Kriterium tragen wir für dieses Feld einen Ausdruck ein, der auf das Feld BuchID des Formulars frmBuecherUndKategorienPerListenfeld verweist (siehe Bild 4).
Bild 4: Abfrage zum Ermitteln der zugeordneten Bücher
Schließlich sorgen wir noch für eine aufsteigende Sortierung für das Feld Kategorie.
Diese Abfrage stellen wir nun als Wert der Eigenschaft Datensatzherkunft des Listenfeldes lstZugeordneteKategorien ein.
Damit das erste Feld KategorieID nicht angezeigt, sondern nur als gebundene Spalte verwendet wird und nur das zweite Feld Kategorie angezeigt wird, stellen wir die Eigenschaften Spaltenanzahl auf 2 und Spaltenbreiten auf 0cm ein (siehe Bild 5).
Bild 5: Einstellen der Listenfeldeigenschaften
Wechseln wir nun in die Formularansicht, zeigt das Listenfeld lstZugeordneteKategorien direkt den richtigen Wert an (siehe Bild 6). Allerdings nur für den ersten Datensatz: Wenn wir weitere Bücher durchlaufen, ändert sich dieser Wert nicht.
Bild 6: Die zugeordnete Kategorie wird korrekt angezeigt.
Wir müssen also wohl mit ein wenig VBA-Code nachhelfen.
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