|  | Unser Angebot für Sie! Lesen Sie diesen Beitrag und 500 andere sofort im Onlinearchiv, und erhalten Sie alle zwei Monate brandheißes Access-Know-how auf 72 gedruckten Seiten! Plus attraktive Präsente, zum Beispiel das bald erscheinende Buch 'Access 2010 - Das Grundlagenbuch für Entwickler'! |
| | | | | |
Zusammenfassung
Verwalten Sie die Daten der Verknüpfungstabelle einer m:n-Beziehung über das Kontrollkästchen einer temporären Tabelle
Techniken
Formulare, Tabellen
Voraussetzungen
Access 2002 und höher
Beispieldateien
IndividuelleDatenauswahl.mdb
Shortlink
www.access-im-unternehmen.de/723
m:n-Beziehung per Kontrollkästchen verwalten
André Minhorst, Duisburg
Wenn Sie die Daten zweier Tabellen mit einer einfachen Verknüpfungstabelle zu einer m:n-Beziehung verbunden haben, können Sie die Daten auf verschiedenste Arten verwalten. Wir stellen eine nicht so oft verwendete, aber dennoch sehr ergonomische Variante vor. Dabei erfolgt die Zuordnung ausschließlich über das Aktivieren oder Deaktivieren eines Kontrollkästchens für den gewünschten Eintrag.
Ziel dieses Beitrags
Übliche Ausprägungen der m:n-Beziehung sehen ein Haupt- und ein Unterformular vor, wobei das Hauptformular einen Datensatz der m-Seite der Beziehung anzeigt und das Unterformular die damit verknüpften Datensätze der n-Seite. Neue verknüpfte Datensätze lassen sich beispielsweise per Kombinationsfeld in einem neuen Datensatz im Unterformular hinzufügen, wie es auch im Bestellformular der Nordwind-Datenbank der Fall ist.
Hier ist gleichzeitig die Bearbeitung weiterer in der Verknüpfungstabelle enthaltener Daten möglich. Eine andere Möglichkeit zur Darstellung und Bearbeitung einer m:n-Beziehung ist die Verwendung zweier Listenfelder in einem Formular, das selbst an die m-Seite der Verknüpfung gebunden ist. Dabei zeigt das erste Listenfeld alle verknüpften und das zweite Listenfeld die übrigen Datensätze der n-Seite an
In unserem Beispiel möchten wir eine Darstellung erzielen, bei dem das Hauptformular den Datensatz der m-Seite und das Unterformular alle Datensätze der n-Seite anzeigt - unabhängig davon, ob diese dem aktuellen Datensatz des Hauptformulars zugeordnet sind oder nicht. Diesen Zustand markiert ein Kontrollkästchen, über das der Benutzer gleichzeitig neue Verknüpfungen herstellen als auch bestehende löschen kann. Abb. 1 zeigt, wie das am Beispiel von Fahrzeugen und deren Ausstattungsmerkmalen aussehen soll.
Abb. 1: Verwaltung der Daten einer m:n-Beziehung per Kontrollkästchen
Beispiel
Als Beispiel verwenden wir Fahrzeuge und deren Ausstattungen. Das Datenmodell haben wir so einfach gehalten wie möglich (s. Abb. 2). Die beiden Tabellen tblFahrzeuge und tblAusstattungen sind dabei über die Tabelle tblFahrzeugeAusstattungen miteinander verknüpft.
Abb. 2: Datenmodell der Beispieldatenbank
Diese Tabelle enthält neben dem Primärschlüsselfeld FahrzeugeAusstattungenID zwei Fremdschlüsselfelder, die mit den beiden Tabellen tblFahrzeuge und tblAusstattungen verknüpft sind. Da jedes Fahrzeug jede Ausstattung nur einmal enthalten soll, legen Sie für die beiden Fremdschlüsselfelder einen zusammengesetzten eindeutigen Index fest (s. Abb. 3).
Abb. 3: Eindeutiger Index für die Kombination aus Fahrzeug und Ausstattung
Unterformular zur Darstellung der n-Seite der Beziehung
Das Unterformular soll nur zwei Felder anzeigen: die Bezeichnung eines jeden Ausstattungsmerkmals (Feld Ausstattung) und ein Kontrollkästchen, das anzeigt, ob das Fahrzeug aus dem Hauptformular diese Ausstattung besitzt (ohne entsprechendes Feld). Außerdem benötigen wir das Feld AusstattungID, um den Ausstattungs-Datensatz eindeutig zu identifizieren. Um ein wenig Arbeit zu sparen, weisen Sie der Eigenschaft Datenherkunft eines neuen Formulars namens sfmFahrzeugeAusstattungen die Tabelle tblAusstattungen zu. Ziehen Sie aus der Feldliste die beiden Felder AusstattungID und Ausstattung in den Detailbereich des Formularentwurfs.
Fehlt noch das Kontrollkästchen: Dieses erstellen Sie zunächst als neues, ungebundenes Steuerelement, benennen es in IstAusstattung um und stellen die Eigenschaft Steuerelementinhalt auf lstAusstattung ein - auch wenn dieses Feld zum aktuellen Zeitpunkt noch gar nicht in der Datenherkunft des Formulars existiert. Im Entwurf sieht das Unterformular nun wie in Abb. 4 aus. Bevor Sie das Unterformular speichern und schließen, leeren Sie die Eigenschaft Datenherkunft wieder - wir kümmern uns später um die Daten für das Formular. Außerdem stellen Sie unbedingt die Eigenschaft Standardansicht auf den Wert Datenblatt ein, damit die Ausstattungen schön tabellarisch angezeigt werden.
Abb. 4: Das Unterformular mit einem gebundenen Feld, das in der Datenherkunft nicht existiert.
Hauptformular zur Anzeige der Fahrzeuge
Das Hauptformular soll frmFahrzeugeAusstattungen heißen und die Tabelle tblFahrzeuge als Datenherkunft verwenden. Aus dieser Tabelle fügen Sie dem Formular alle Felder hinzu. Außerdem soll das Formular natürlich das Unterformular mit den verknüpften Ausstattungsmerkmalen anzeigen, wozu Sie das soeben erstellte Formular als Unterformular hinzufügen. Dazu ziehen Sie es am einfachsten aus dem Datenbankfenster beziehungsweise Navigationsbereich in den Detailbereich des Hauptformulars, sodass sich die Konstellation aus Abb. 5 ergibt.
Abb. 5: Haupt- und Unterformular in der Entwurfsansicht
Ausstattungen per temporärem Recordset
Nun ist es an der Zeit, auch das Unterformular an eine Datenherkunft zu binden beziehungsweise ihm die entsprechenden Daten hinzuzufügen. Dabei greifen wir auf eine im Beitrag Temporäre Datensatzgruppen (www.access-im-unternehmen.de/711) vorgestellte Technik zu, die allerdings leider erst ab Access 2002 funktioniert.
Normalerweise wird ein Unterformular, dessen Daten über ein Fremdschlüsselfeld mit denen des Hauptformulars verknüpft sind, beim Anzeigen eines neuen Datensatzes automatisch aktualisiert. Dazu stellt man die Eigenschaften Verknüpfen von und Verknüpfen nach auf die Namen der Steuerelemente mit dem Primär- und dem Fremdschlüsselfeld der beiden beteiligten Formulare ein. Hier ist die Verwendung dieser Eigenschaften nicht möglich, und das Unterformular besitzt ohnehin keine feste Datenherkunft.
|