Zur Hauptseite ... Zum Onlinearchiv ... Zum Abonnement ... Zum Newsletter ... Zu den Tools ... Zum Impressum ... Zum Login ...

m:n-Beziehung per Listenfeld managen, Teil 1

Es gibt eine Menge Möglichkeiten zur Verwaltung der Daten von m:n-Beziehungen. In dieser Beitragsreihe lernen Sie einige davon kennen. Den Start macht die Verwendung von Listenfeldern. Damit lassen sich die Einträge der n-Seite einer Beziehung des aktuell im Formular angezeigten Datensatzes der m-Seite hinzufügen und wieder davon entfernen, indem man die Einträge einfach zwischen zwei Listenfeldern hin- und herschiebt.

Teil 1: Anzeige der verknüpften Daten per Listenfeld

Teil 2: Hin- und Herschieben der Einträge der Listenfelder

Beispieldatenbank

Das nachfolgend beschriebene Beispielformular finden Sie in der Beispieldatenbank AccessSQLDotNet.mdb unter dem Formularnamen frmMZuNPerListenfeld.

Aufbau der Beziehung

Das nachfolgende Beispiel basiert auf einer m:n-Beziehung zwischen Kontakten und Publikationen - der klassische "Verteiler"-Fall. Das Datenmodell sieht wie in Abbildung 1 aus. Die beiden Tabellen tblKontakte und tblPublikationen sind über die Tabelle tblVerteiler miteinander verknüpft. Damit jeder Kontakt jede Publikation nur einmal erhält, sind die beiden Felder der Tabelle tblVerteiler mit einem zusammengesetzten Primärschlüssel versehen.

Abbildung 1: Aufbau der m:n-Beziehung

Datenverwaltung per Listenfeld

Das zu erstellende Formular soll Publikationen anzeigen. Die Detailinformationen dazu bestehen lediglich aus dem Namen der Publikation, weitere Informationen lassen sich aber leicht hinzufügen. Stellen Sie dazu einfach die Datenherkunft des Formulars auf die entsprechende Tabelle ein und ziehen Sie die beiden Felder der Tabelle in den Formularentwurf. Viel wichtiger ist aber die Anzeige der mit der Publikation verknüpften Kontakte. Diese soll über zwei Listenfelder erfolgen, von denen eines die verknüpften und eines die übrigen Kontakte anzeigt.

Die beiden Listenfelder heißen lstImVerteiler und lstNichtImVerteiler. Das erste Listenfeld erhält folgenden Ausdruck als Datensatzherkunft:

SELECT tblKontakte.KontaktID, tblKontakte.Vorname, tblKontakte.Nachname, FROM tblKontakte INNER JOIN tblVerteiler ON tblKontakte.KontaktID=tblVerteiler.KontaktID WHERE tblVerteiler.PublikationID=Forms!frmVerteiler!PublikationID;

Wenn Sie der Tabelle tblVerteiler vorher manuell einen oder mehrere Einträge hinzugefügt haben, zeigt das Listenfeld diese bereits an - natürlich nur, wenn Sie die Eigenschaften Spaltenanzahl und Spaltenbreite auf entsprechende Werte eingestellt haben - etwa 3 und 0;2cm;2cm.

Das zweite Listenfeld soll alle Kontakte anzeigen, die nicht für die m:n-Beziehung ausgewählt sind. Die entsprechende Datensatzherkunft lässt sich ganz einfach herleiten: Sie enthält alle Einträge der Tabelle tblKontakte, die nicht im ersten Listenfeld angezeigt werden. Diese Einträge schließen Sie einfach durch eine entsprechende NOT IN-Klausel aus:

SELECT tblKontakte.KontaktID, tblKontakte.Vorname, tblKontakte.Nachname FROM tblKontakte WHERE tblKontakte.KontaktID Not In (SELECT tblKontakte.KontaktID FROM tblKontakte INNER JOIN tblVerteiler ON tblKontakte.KontaktID=tblVerteiler.KontaktID WHERE tblVerteiler.PublikationID=Forms!frmVerteiler!PublikationID);

Wenn Sie auch hier die Eigenschaften Spaltenanzahl und Spaltenbreiten entsprechend einstellen, sieht das Ergebnis wie in Abbildung 2 aus:

 

Abbildung 2: Die Listenfelder zeigen die mit der aktuellen Publikation verknüpften Datensätze an.

© 2003-2010 André Minhorst Alle Rechte vorbehalten.