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 Mglichkeiten 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 Eintrge der n-Seite einer Beziehung des aktuell im Formular angezeigten Datensatzes der m-Seite hinzufgen und wieder davon entfernen, indem man die Eintrge einfach zwischen zwei Listenfeldern hin- und herschiebt.

Teil 1: Anzeige der verknpften Daten per Listenfeld

Teil 2: Hin- und Herschieben der Eintrge 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 verknpft. Damit jeder Kontakt jede Publikation nur einmal erhlt, sind die beiden Felder der Tabelle tblVerteiler mit einem zusammengesetzten Primrschlssel 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 hinzufgen. 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 verknpften Kontakte. Diese soll ber zwei Listenfelder erfolgen, von denen eines die verknpften und eines die brigen Kontakte anzeigt.

Die beiden Listenfelder heien lstImVerteiler und lstNichtImVerteiler. Das erste Listenfeld erhlt 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 Eintrge hinzugefgt haben, zeigt das Listenfeld diese bereits an - natrlich 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 fr die m:n-Beziehung ausgewhlt sind. Die entsprechende Datensatzherkunft lsst sich ganz einfach herleiten: Sie enthlt alle Eintrge der Tabelle tblKontakte, die nicht im ersten Listenfeld angezeigt werden. Diese Eintrge schlieen 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 verknpften Datenstze an.

© 2003-2015 André Minhorst Alle Rechte vorbehalten.