Tabellen in einer m:n-Beziehung sind Tabellen, die über eine Verknüpfungstabelle miteinander verknüpft sind, sodass jeder Datensatz der ersten Tabelle mit jedem Datensatz der zweiten Tabelle verknüpft werden kann. Die Verknüpfungstabelle realisiert das mit je einem Fremdschlüsselfeld zum Verknüpfen dieser beiden Tabellen. Wollen wir dies in Formularen darstellen, sodass der Benutzer komfortabel mit den Daten in dieser Beziehungsart arbeiten kann, können wir die Daten in einem Hauptformular mit einem Unterformular darstellen. Auch unter den m:n-Beziehungen gibt es verschiedene Variationen. Wir bilden in diesem Artikel die Variante ab, bei der die m:n-Verknüpfungstabelle neben den eigentlichen Verknüpfungsdaten noch weitere Informationen aufnimmt, die sich auf die jeweilige Kombination der Datensätze der beiden Tabellen beziehen.
Beispieldatenbank
Die Beispiele dieses Artikels findest Du in der Datenbank FormulareBasics_mnBeziehungenMitUnterformular.accdb.
Beispieltabellen der Bücherverwaltung
In unserer Bücherverwaltung finden wir eine geeignete Beziehung. Dabei handelt es sich um die Beziehung zwischen der Tabelle tblBuecher und der Tabelle tblLeser. Aber in welchem Zusammenhang führen wir diese beiden Informationen in einer m:n-Beziehung zusammen
Wir wollen unsere Bücherverwaltung auch dazu nutzen, um Bücher zu verleihen und dabei die Leihvorgänge zu dokumentieren. Deshalb wollen wir aufnehmen, welches Buch wir wem geliehen haben – und vor allem, wann es verliehen wurde und wann wir es wiederbekommen haben.
Bild 1 zeigt die an der Beziehung beteiligten Tabellen, in diesem Fall tblBuecher, tblLeser und die Verknüpfungstabelle tblAusleihen. Die Tabelle tblAusleihen enthält neben dem Primärschlüsselfeld AusleiheID und den beiden Fremdschlüsselfeldern LeserID und BuchID noch zwei Felder namens Ausleihdatum und Rueckgabedatum, mit denen wir die Ausleihvorgänge dokumentieren können. Diese Tabellen wollen wir nun in Formularen bearbeiten können.
Bild 1: Beziehung zwischen Büchern und Lesern
Daten aus einer m:n-Beziehung in Formularen anzeigen
Dabei stellt sich erst einmal die Frage, wie wir die Daten aus diesen drei Tabellen in einem Formular anzeigen können.
Dazu schauen wir uns erst einmal die Verknüp-fungs-tabelle für die m:n-Be-ziehung an (siehe Bild 2).
Bild 2: Informationen zu einer Ausleihe zusammentragen
Da wir, wie fast immer, die Fremdschlüsselfelder als Nachschlagefelder in den Tabellen definiert haben, können wir hier recht komfortabel jeweils einen Leser und ein Buch auswählen und das Ausleihdatum und gegebenenfalls auch das Rückgabedatum in dieser Tabelle einfügen.
Was wollen wir denn noch mehr Müssen wir überhaupt ein Formular erstellen, wenn wir die gewünschten Daten so komfortabel bereits über die Datenblattansicht der Tabelle eingeben können
Davon abgesehen, dass wir, wenn wir diese Daten in einem Formular abbilden, noch wesentlich bessere Möglichkeiten zum Steuern und Verarbeiten der Eingaben hinzufügen können, wollen wir den Benutzer unserer Anwendungen grundsätzlich nicht direkt in den Tabellen der Datenbank arbeiten lassen.
Wenn wir nun also ein Formular erstellen, das genau diese Daten anzeigt und uns ihre Bearbeitung erlaubt, sind wir aber dennoch schon fast am Ziel, oder
Formular zum Verwalten von Ausleihen
Wir lassen die Frage vorerst unbeantwortet und legen zuerst einmal ein solches Formular an. Dazu nutzen wir den Ribbonbefehl Erstellen|Formulare|Formularentwurf und erhalten ein neues, leeres Formular in der Entwurfsansicht. Diese weisen wir nun als Erstes die Tabelle tblAusleihen für die Eigenschaft Datensatzquelle hinzu (siehe Bild 3).
Bild 3: Hinzufügen der Datensatzquelle
Nun aktivieren wir mit dem Ribbonbefehl Formularent-wurf|Tools|Vor-handene Felder hinzufügen die Anzeige der Feldliste der Datensatzquelle und ziehen zunächst einmal alle Felder aus dieser Liste in den Detailbereich des Formularentwurfs (siehe Bild 4).
Bild 4: Hinzufügen der Felder der Tabelle tblAusleihen
Die Anordnung der Felder spielt erst einmal keine Rolle, da wir die Felder ohnehin in der Datenblattansicht anzeigen wollen. Dazu wechseln wir noch einmal von der Feldliste zum Eigenschaftenblatt und stellen hier die Eigenschaft Standardansicht auf Datenblatt ein.
Um dies zu erledigen, müssen wir zunächst das Formular selbst markieren, damit seine Eigenschaften erscheinen. Dies erreichen wir, indem wir entweder oben links auf das kleine Kästchen der auf den leeren, grauen Bereich im Formular klicken oder indem wir im Eigenschaftenblatt den Eintrag Formular auswählen (siehe Bild 5).
Bild 5: Einstellen der Standardansicht
Damit sind die Arbeiten an diesem Formular vorerst erledigt. Wir speichern es unter der Bezeichnung sfmAusleihen.
Warum nutzen wir nicht frmAusleihen, sondern verwenden das Präfix, das normalerweise für Unterformulare eingesetzt wird Das erfahren wir weiter unten. Zunächst einmal wechseln wir nun in die Datenblattansicht. Das Formular liefert nun genau die gleiche Darstellung wie die Tabelle tblAusleihen in der Datenblattansicht (siehe Bild 6). Sind wir damit bereits fertig Nein, jetzt geht der Spaß erst los, damit die Dateneingabe richtig komfortabel wird.
Bild 6: Die Ausleih-Informationen in einem Formular in der Datenblattansicht
Wir können nun zwar bereits alle notwendigen Daten eingeben, aber dafür sehen wir auch immer alle Datensätze gleichzeitig – für alle Bücher und für alle Leser. Wir könnten zwar mit einem Klick auf den nach unten zeigenden Pfeil der Spalten Leser oder Buch ein Popup-Menü anzeigen, mit dem wir nach einem oder mehreren Lesern oder Büchern filtern können, aber so richtig komfortabel ist das nicht (siehe Bild 7). Viel schöner wäre es, wenn wir beispielsweise die Leser durchblättern könnten und dabei jeweils die entliehenen Bücher dieses Lesers sehen könnten.
Bild 7: Filtermöglichkeit für die Leser
Hauptformular für die m-Seite hinzufügen
Wir möchten dazu ein Hauptformular erstellen, das nur die Leser aus der Tabelle tblLeser anzeigt, und zwar jeweils nur einen. Dazu legen wir ein neues Formular an und weisen diesem als Datensatzquelle die Tabelle tblLeser hinzu. Diesmal lassen wir ein wenig mehr Sorgfalt bei der Anordnung der Steuerelemente aus der Tabelle tblLeser walten, denn das Formular soll nicht in der Datenblattansicht erscheinen, sondern in der Formularansicht, und nur einen Datensatz der Tabelle tblLeser gleichzeitig anzeigen. Das Ergebnis sieht etwa wie in Bild 8 aus.
Bild 8: Hinzufügen der Felder zum Formular frmAusleihen
Wenn wir danach in die Formularansicht wechseln, sehen wir den ersten Datensatz der Datensatzquelle tblLeser im Formular frmAusleihen (siehe Bild 9).
Bild 9: Das Hauptformular mit den Leserdaten
Haupt- und Unterformular zusammenführen
Damit kommen wir dem Ziel näher. Wir haben nun ein Formular, dass jeweils einen Leser gleichzeitig anzeigt und eines, das alle Ausleihen liefert.
Wir bringen wir diese beiden so zusammen, dass diese sowohl den Leser als auch die von ihm ausgeliehenen Bücher anzeigt
Dazu wollen wir nun die Liste der Ausleihen so in das Formular mit den Lesern integrieren, dass dieses genau die zu dem aktuell angezeigten Leser gehörenden Ausleihen anzeigt.
Und genau dafür ist das Steuerelement Unterformular zuständig. Wir haben mehrere Möglichkeiten, ein Unterformular zu einem Hauptformular hinzuzufügen und es mit dem darin anzuzeigenden Formular zu füllen. Wir schauen uns zunächst den umständlicheren Weg an, damit Du genau verstehst, welche Schritte Du hier einsparst. Danach zeige ich Dir, wie es auf die einfache Weise gelingt.
Unterformular manuell einfügen
Voraussetzung für die nächste Schritte ist, dass das Hauptformular in der Entwurfsansicht angezeigt wird.
Als Erstes fügen wir ein Unterformular-Steuerelement aus dem Ribbon zu Formular hinzu. Dazu klicken wir entsprechende Element aus Bild 10 an.
Bild 10: Auswahl des Unterformular-Steuerelements
Anschließend ziehen wir einen Rahmen von der Größe auf, die das Unterformular gleich einnehmen soll (siehe Bild 11).
Bild 11: Aufziehen des Rahmens für das Unterformular-Steuerelement
Das Unterformular-Steuerelement wird unter einem Namen wie Untergeordnet8 angelegt. Diesen Namen ändern wir gleich in sfm. Wenn wir nur ein Unterformular-Steuerelement in einem Formular verwenden, ist das völlig in Ordnung – erst wenn wir mehrere Unterformular nutzen, sollten wir Namen verwenden, die den Inhalt repräsentieren, hier zum Beispiel sfmAusleihen. Wenn wir die Bezeichnung sfm verwenden, erhalten wir aber gleichzeitig einen anderen Namen als den des Formulars, das wir gleich in das Unterformular-Steuerelement einbetten wollen. Auch das Bezeichnungsfeld dieses Steuerelements passen wir an, beispielsweise in Ausleihen:.
Nun kommt ein wichtiger Schritt – wir weisen dem Unterformular-Steuerelement das Formular hinzu, das wir darin anzeigen wollen. Dazu stellen wir die Eigenschaft Herkunftsobjekt im Bereich Daten des Eigenschaftsblatts auf den Namen des Formulars sfmAusleihen ein (siehe Bild 12).
Bild 12: Einstellen des anzuzeigenden Unterformulars
Damit erreichen wir nicht nur, dass nun das gewünschte Formular im Unterformular-Steuerelement landet, sondern es werden auch automatisch noch die beiden Eigenschaften Verknüpfen nach und Verknüpfen von auf die richtigen Werte eingestellt (siehe Bild 13).
Unser exklusives Angebot für Dich!
(Das Abo ist jederzeit monatlich kündbar)
Hier geht’s weiter →Die ersten 4 Wochen kostenlos testen – voller Zugriff auf alle Artikel, vollständigen Code und Beispieldatenbanken. Kein Risiko: Wenn es nicht passt, kündigst Du einfach innerhalb der ersten vier Wochen.
Oder hast Du eine konkrete Frage zu Deiner eigenen Access-Anwendung?
Vielleicht stellt Deine Anwendung Dich vor eine Herausforderung, zu der Du bisher keine Lösung findest. Schlechte Performance, kein ausreichender Zugriffsschutz, Du bist unsicher über Dein Datenmodell oder Dein Code liefert unerklärliche Fehler?
In unserem kostenlosen Access-Audit schaut sich André Minhorst persönlich gemeinsam mit Dir Deine Lösung per Zoom an – und zeigt Dir, wo Datenmodell, VBA-Code, Ergonomie und Sicherheit Optimierungspotenzial bieten.
Jetzt kostenloses Access-Audit anfordern →![Access [basics]](https://access-basics.de/wp-content/uploads/2021/02/logo400.png)











