{"id":55000651,"date":"2025-02-01T00:00:00","date_gmt":"2025-02-01T00:00:00","guid":{"rendered":"http:\/\/access-basics.de\/651"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Formulare_basics_mnBeziehung_mit_Unterformular","status":"publish","type":"post","link":"https:\/\/access-basics.de\/index.php\/Formulare_basics_mnBeziehung_mit_Unterformular.html","title":{"rendered":"Formulare [basics]: m:n-Beziehung mit Unterformular"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg07.met.vgwort.de\/na\/c56d76eb52674dffb0852184bef8af61\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p class='introduction'>Tabellen in einer m:n-Beziehung sind Tabellen, die &uuml;ber eine Verkn&uuml;pfungstabelle miteinander verkn&uuml;pft sind, sodass jeder Datensatz der ersten Tabelle mit jedem Datensatz der zweiten Tabelle verkn&uuml;pft werden kann. Die Verkn&uuml;pfungstabelle realisiert das mit je einem Fremdschl&uuml;sselfeld zum Verkn&uuml;pfen dieser beiden Tabellen. Wollen wir dies in Formularen darstellen, sodass der Benutzer komfortabel mit den Daten in dieser Beziehungsart arbeiten kann, k&ouml;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&uuml;pfungstabelle neben den eigentlichen Verkn&uuml;pfungsdaten noch weitere Informationen aufnimmt, die sich auf die jeweilige Kombination der Datens&auml;tze der beiden Tabellen beziehen.<\/p>\n<h2>Beispieldatenbank<\/h2>\n<p>Die Beispiele dieses Artikels findest Du in der Datenbank <b>FormulareBasics_mnBeziehungenMitUnterformular.accdb<\/b>.<\/p>\n<h2>Beispieltabellen der B&uuml;cherverwaltung<\/h2>\n<p>In unserer B&uuml;cherverwaltung finden wir eine geeignete Beziehung. Dabei handelt es sich um die Beziehung zwischen der Tabelle <b>tblBuecher <\/b>und der Tabelle <b>tblLeser<\/b>. Aber in welchem Zusammenhang f&uuml;hren wir diese beiden Informationen in einer m:n-Beziehung zusammen<\/p>\n<p>Wir wollen unsere B&uuml;cherverwaltung auch dazu nutzen, um B&uuml;cher zu verleihen und dabei die Leihvorg&auml;nge zu dokumentieren. Deshalb wollen wir aufnehmen, welches Buch wir wem geliehen haben &#8211; und vor allem, wann es verliehen wurde und wann wir es wiederbekommen haben.<\/p>\n<p>Bild 1 zeigt die an der Beziehung beteiligten Tabellen, in diesem Fall <b>tblBuecher<\/b>, <b>tblLeser <\/b>und die Verkn&uuml;pfungstabelle <b>tblAusleihen<\/b>. Die Tabelle <b>tblAusleihen <\/b>enth&auml;lt neben dem Prim&auml;rschl&uuml;sselfeld <b>AusleiheID <\/b>und den beiden Fremdschl&uuml;sselfeldern <b>LeserID <\/b>und <b>BuchID <\/b>noch zwei Felder namens <b>Ausleihdatum <\/b>und <b>Rueckgabedatum<\/b>, mit denen wir die Ausleihvorg&auml;nge dokumentieren k&ouml;nnen. Diese Tabellen wollen wir nun in Formularen bearbeiten k&ouml;nnen.<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_651_001.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_651_001.png\" alt=\"Beziehung zwischen B&uuml;chern und Lesern\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 1: Beziehung zwischen B&uuml;chern und Lesern<\/p>\n<h2>Daten aus einer m:n-Beziehung in Formularen anzeigen<\/h2>\n<p>Dabei stellt sich erst einmal die Frage, wie wir die Daten aus diesen drei Tabellen in einem Formular anzeigen k&ouml;nnen.<\/p>\n<p>Dazu schauen wir uns erst einmal die Verkn&uuml;p-fungs-tabelle f&uuml;r die m:n-Be-ziehung an (siehe Bild 2).<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_651_002.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_651_002.png\" alt=\"Informationen zu einer Ausleihe zusammentragen\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 2: Informationen zu einer Ausleihe zusammentragen<\/p>\n<p>Da wir, wie fast immer, die Fremdschl&uuml;sselfelder als Nachschlagefelder in den Tabellen definiert haben, k&ouml;nnen wir hier recht komfortabel jeweils einen Leser und ein Buch ausw&auml;hlen und das Ausleihdatum und gegebenenfalls auch das R&uuml;ckgabedatum in dieser Tabelle einf&uuml;gen.<\/p>\n<p>Was wollen wir denn noch mehr M&uuml;ssen wir &uuml;berhaupt ein Formular erstellen, wenn wir die gew&uuml;nschten Daten so komfortabel bereits &uuml;ber die Datenblattansicht der Tabelle eingeben k&ouml;nnen<\/p>\n<p>Davon abgesehen, dass wir, wenn wir diese Daten in einem Formular abbilden, noch wesentlich bessere M&ouml;glichkeiten zum Steuern und Verarbeiten der Eingaben hinzuf&uuml;gen k&ouml;nnen, wollen wir den Benutzer unserer Anwendungen grunds&auml;tzlich nicht direkt in den Tabellen der Datenbank arbeiten lassen.<\/p>\n<p>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<\/p>\n<h2>Formular zum Verwalten von Ausleihen<\/h2>\n<p>Wir lassen die Frage vorerst unbeantwortet und legen zuerst einmal ein solches Formular an. Dazu nutzen wir den Ribbonbefehl <b>Erstellen|Formulare|Formularentwurf <\/b>und erhalten ein neues, leeres Formular in der Entwurfsansicht. Diese weisen wir nun als Erstes die Tabelle <b>tblAusleihen <\/b>f&uuml;r die Eigenschaft <b>Datensatzquelle <\/b>hinzu (siehe Bild 3).<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_651_003.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_651_003.png\" alt=\"Hinzuf&uuml;gen der Datensatzquelle\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 3: Hinzuf&uuml;gen der Datensatzquelle<\/p>\n<p>Nun aktivieren wir mit dem Ribbonbefehl <b>Formularent-wurf|Tools|Vor-handene Felder hinzuf&uuml;gen <\/b>die Anzeige der Feldliste der Datensatzquelle und ziehen zun&auml;chst einmal alle Felder aus dieser Liste in den Detailbereich des Formularentwurfs (siehe Bild 4).<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_651_004.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_651_004.png\" alt=\"Hinzuf&uuml;gen der Felder der Tabelle tblAusleihen\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 4: Hinzuf&uuml;gen der Felder der Tabelle tblAusleihen<\/p>\n<p>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 <b>Standardansicht <\/b>auf <b>Datenblatt <\/b>ein.<\/p>\n<p>Um dies zu erledigen, m&uuml;ssen wir zun&auml;chst das Formular selbst markieren, damit seine Eigenschaften erscheinen. Dies erreichen wir, indem wir entweder oben links auf das kleine K&auml;stchen der auf den leeren, grauen Bereich im Formular klicken oder indem wir im Eigenschaftenblatt den Eintrag <b>Formular <\/b>ausw&auml;hlen (siehe Bild 5).<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_651_005.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_651_005.png\" alt=\"Einstellen der Standardansicht\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 5: Einstellen der Standardansicht<\/p>\n<p>Damit sind die Arbeiten an diesem Formular vorerst erledigt. Wir speichern es unter der Bezeichnung <b>sfmAusleihen<\/b>.<\/p>\n<p>Warum nutzen wir nicht <b>frmAusleihen<\/b>, sondern verwenden das Pr&auml;fix, das normalerweise f&uuml;r Unterformulare eingesetzt wird Das erfahren wir weiter unten. Zun&auml;chst einmal wechseln wir nun in die Datenblattansicht. Das Formular liefert nun genau die gleiche Darstellung wie die Tabelle <b>tblAusleihen <\/b>in der Datenblattansicht (siehe Bild 6). Sind wir damit bereits fertig Nein, jetzt geht der Spa&szlig; erst los, damit die Dateneingabe richtig komfortabel wird.<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_651_006.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_651_006.png\" alt=\"Die Ausleih-Informationen in einem Formular in der Datenblattansicht\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 6: Die Ausleih-Informationen in einem Formular in der Datenblattansicht<\/p>\n<p>Wir k&ouml;nnen nun zwar bereits alle notwendigen Daten eingeben, aber daf&uuml;r sehen wir auch immer alle Datens&auml;tze gleichzeitig &#8211; f&uuml;r alle B&uuml;cher und f&uuml;r alle Leser. Wir k&ouml;nnten zwar mit einem Klick auf den nach unten zeigenden Pfeil der Spalten Leser oder Buch ein Popup-Men&uuml; anzeigen, mit dem wir nach einem oder mehreren Lesern oder B&uuml;chern filtern k&ouml;nnen, aber so richtig komfortabel ist das nicht (siehe Bild 7). Viel sch&ouml;ner w&auml;re es, wenn wir beispielsweise die Leser durchbl&auml;ttern k&ouml;nnten und dabei jeweils die entliehenen B&uuml;cher dieses Lesers sehen k&ouml;nnten.<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_651_007.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_651_007.png\" alt=\"Filterm&ouml;glichkeit f&uuml;r die Leser\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 7: Filterm&ouml;glichkeit f&uuml;r die Leser<\/p>\n<h2>Hauptformular f&uuml;r die m-Seite hinzuf&uuml;gen<\/h2>\n<p>Wir m&ouml;chten dazu ein Hauptformular erstellen, das nur die Leser aus der Tabelle <b>tblLeser <\/b>anzeigt, und zwar jeweils nur einen. Dazu legen wir ein neues Formular an und weisen diesem als Datensatzquelle die Tabelle <b>tblLeser <\/b>hinzu. Diesmal lassen wir ein wenig mehr Sorgfalt bei der Anordnung der Steuerelemente aus der Tabelle <b>tblLeser <\/b>walten, denn das Formular soll nicht in der Datenblattansicht erscheinen, sondern in der Formularansicht, und nur einen Datensatz der Tabelle <b>tblLeser <\/b>gleichzeitig anzeigen. Das Ergebnis sieht etwa wie in Bild 8 aus. <\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_651_008.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_651_008.png\" alt=\"Hinzuf&uuml;gen der Felder zum Formular frmAusleihen\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 8: Hinzuf&uuml;gen der Felder zum Formular frmAusleihen<\/p>\n<p>Wenn wir danach in die Formularansicht wechseln, sehen wir den ersten Datensatz der Datensatzquelle <b>tblLeser<\/b> im Formular <b>frmAusleihen <\/b>(siehe Bild 9).<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_651_009.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_651_009.png\" alt=\"Das Hauptformular mit den Leserdaten\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 9: Das Hauptformular mit den Leserdaten<\/p>\n<h2>Haupt- und Unterformular zusammenf&uuml;hren<\/h2>\n<p>Damit kommen wir dem Ziel n&auml;her. Wir haben nun ein Formular, dass jeweils einen Leser gleichzeitig anzeigt und eines, das alle Ausleihen liefert.<\/p>\n<p>Wir bringen wir diese beiden so zusammen, dass diese sowohl den Leser als auch die von ihm ausgeliehenen B&uuml;cher anzeigt<\/p>\n<p>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&ouml;renden Ausleihen anzeigt.<\/p>\n<p>Und genau daf&uuml;r ist das Steuerelement <b>Unterformular <\/b>zust&auml;ndig. Wir haben mehrere M&ouml;glichkeiten, ein Unterformular zu einem Hauptformular hinzuzuf&uuml;gen und es mit dem darin anzuzeigenden Formular zu f&uuml;llen. Wir schauen uns zun&auml;chst den umst&auml;ndlicheren Weg an, damit Du genau verstehst, welche Schritte Du hier einsparst. Danach zeige ich Dir, wie es auf die einfache Weise gelingt.<\/p>\n<h2>Unterformular manuell einf&uuml;gen<\/h2>\n<p>Voraussetzung f&uuml;r die n&auml;chste Schritte ist, dass das Hauptformular in der Entwurfsansicht angezeigt wird.<\/p>\n<p>Als Erstes f&uuml;gen wir ein Unterformular-Steuerelement aus dem Ribbon zu Formular hinzu. Dazu klicken wir entsprechende Element aus Bild 10 an.<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_651_010.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_651_010.png\" alt=\"Auswahl des Unterformular-Steuerelements\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 10: Auswahl des Unterformular-Steuerelements<\/p>\n<p>Anschlie&szlig;end ziehen wir einen Rahmen von der Gr&ouml;&szlig;e auf, die das Unterformular gleich einnehmen soll (siehe Bild 11).<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_651_011.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_651_011.png\" alt=\"Aufziehen des Rahmens f&uuml;r das Unterformular-Steuerelement\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 11: Aufziehen des Rahmens f&uuml;r das Unterformular-Steuerelement<\/p>\n<p>Das Unterformular-Steuerelement wird unter einem Namen wie <b>Untergeordnet8<\/b> angelegt. Diesen Namen &auml;ndern wir gleich in <b>sfm<\/b>. Wenn wir nur ein Unterformular-Steuerelement in einem Formular verwenden, ist das v&ouml;llig in Ordnung &#8211; erst wenn wir mehrere Unterformular nutzen, sollten wir Namen verwenden, die den Inhalt repr&auml;sentieren, hier zum Beispiel <b>sfmAusleihen<\/b>. Wenn wir die Bezeichnung <b>sfm <\/b>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 <b>Ausleihen:<\/b>.<\/p>\n<p>Nun kommt ein wichtiger Schritt &#8211; wir weisen dem Unterformular-Steuerelement das Formular hinzu, das wir darin anzeigen wollen. Dazu stellen wir die Eigenschaft <b>Herkunftsobjekt <\/b>im Bereich <b>Daten <\/b>des Eigenschaftsblatts auf den Namen des Formulars <b>sfmAusleihen <\/b>ein (siehe Bild 12).<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_651_012.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_651_012.png\" alt=\"Einstellen des anzuzeigenden Unterformulars\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 12: Einstellen des anzuzeigenden Unterformulars<\/p>\n<p>Damit erreichen wir nicht nur, dass nun das gew&uuml;nschte Formular im Unterformular-Steuerelement landet, sondern es werden auch automatisch noch die beiden Eigenschaften <b>Verkn&uuml;pfen nach <\/b>und <b>Verkn&uuml;pfen von <\/b>auf die richtigen Werte eingestellt (siehe Bild 13).<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_651_013.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_651_013.png\" alt=\"Die beiden Eigenschaften Verkn&uuml;pfen nach und Verkn&uuml;pfen von werden automatisch eingestellt\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 13: Die beiden Eigenschaften Verkn&uuml;pfen nach und Verkn&uuml;pfen von werden automatisch eingestellt<\/p>\n<p>Mit diesen beiden Eigenschaften k&ouml;nnen wir einstellen, nach welchen Feldern die Daten aus dem Hauptformular und dem Unterformular synchronisiert werden sollen. Synchronisieren bedeutet in diesem Fall, dass das Unterformular nur die Datens&auml;tze anzeigen soll, die zu dem Datensatz aus dem Hauptformular geh&ouml;ren.<\/p>\n<p>Und da wir in der Datensatzquelle des Unterformulars bereits ein Feld namens <b>LeserID <\/b>haben, das angibt, welchem Leser die Ausleihe zugeordnet ist, hat Access die Zuordnung genau richtig vorgenommen. Das ist allerdings kein Zufall, denn Access untersucht beim Hinzuf&uuml;gen eines Unterformulars beziehungsweise beim Ausw&auml;hlen des Unterformulars automatisch, ob es eine Beziehung zwischen den Datensatzquellen der beiden beteiligten Formular gibt. Und wenn es im Unterformular das Fremdschl&uuml;sselfeld einer Beziehung findet und im Hauptformular das Prim&auml;rschl&uuml;sselfeld, dann stellt es die beiden Eigenschaften <b>Verkn&uuml;pfen nach <\/b>und <b>Verkn&uuml;pfen von <\/b>automatisch auf die Namen der beteiligten Felder ein.<\/p>\n<p>Sollte diese Zuordnung einmal nicht funktionieren, hast Du zwei M&ouml;glichkeiten:<\/p>\n<ul>\n<li>Du wei&szlig;t, welche Felder an der Beziehung beteiligt sind, und w&auml;hlst diese selbstst&auml;ndig f&uuml;r die beiden Eigenschaften <b>Verkn&uuml;pfen nach <\/b>und <b>Verkn&uuml;pfen von <\/b>aus. Da diese in diesem Fall beide <b>LeserID <\/b>hei&szlig;en, kannst Du nichts verkehrt machen.<\/li>\n<li>Oder Du klickst auf die Schaltfl&auml;che mit den drei Punkten und arbeitest mit dem nun erscheinenden Dialog <b>Feldverkn&uuml;pfungs-Assistent f&uuml;r Unterformulare <\/b>(siehe Bild 14). Hier werden die im linken Kombinationsfeld alle Felder der Datensatzquelle des Hauptformulars angeboten und im rechten Kombinationsfeld alle Felder der Datensatzquelle des Unterformulars.<\/li>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_651_014.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_651_014.png\" alt=\"Einstellen der beiden Eigenschaften Verkn&uuml;pfen nach und Verkn&uuml;pfen von mit dem Feldverkn&uuml;pfungs-Assistent f&uuml;r Unterformulare\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 14: Einstellen der beiden Eigenschaften Verkn&uuml;pfen nach und Verkn&uuml;pfen von mit dem Feldverkn&uuml;pfungs-Assistent f&uuml;r Unterformulare<\/p>\n<\/ul>\n<p>Wenn wir anschlie&szlig;end in die Formularansicht des Hauptformulars wechseln, erhalten wir das Formular aus Bild 15. Hier sehen wir bereits, dass nicht mehr alle Datens&auml;tze der Tabelle <b>tblAusleihen <\/b>angezeigt werden, sondern nur noch derjenige, der dem aktuell im Hauptformular angezeigten Leser-Datensatz zugeordnet ist.<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_651_015.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_651_015.png\" alt=\"Hauptformular und Unterformular nach dem Wechsel in die Formularansicht\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 15: Hauptformular und Unterformular nach dem Wechsel in die Formularansicht<\/p>\n<p>Bl&auml;ttern wir nun durch die &uuml;brigen Datens&auml;tze im Hauptformular, sehen wir, dass sich die im Unterformular angezeigten Datens&auml;tze jeweils an den Datensatz im Hauptformular anpassen.<\/p>\n<p>Damit haben wir bereits den gr&ouml;&szlig;ten Teil der Arbeit erledigt. Jetzt schauen wir uns an, was wir hier geschaffen haben.<\/p>\n<p>Dabei werfen wir vor allem einen Blick auf den neuen, leeren Datensatz im Unterformular. Das Feld <b>Leser <\/b>zeigt hier einen Standardwert an, obwohl wir in der Tabelle selbst gar keinen Standardwert f&uuml;r dieses Feld hinterlegt haben. Das w&uuml;rde auch keinen Sinn machen, au&szlig;er wir w&uuml;rden einen Gro&szlig;teil der Ausleihvorg&auml;nge immer mit der gleichen Person durchf&uuml;hren.<\/p>\n<p>Also hat wohl Access diesen Standardwert hinzugef&uuml;gt. Und das hat durchaus seinen Grund: Wenn das Unterformular nur Datens&auml;tze anzeigen soll, die mit dem aktuell im Hauptformular angezeigten Datensatz der Tabelle <b>tblLeser <\/b>verkn&uuml;pft sind, dann ist es nur sinnvoll, ausschlie&szlig;lich den Wert im Feld <b>Leser<\/b> zur Verf&uuml;gung zu stellen, der auch im Hauptformular angezeigt wird.<\/p>\n<p>Wir k&ouml;nnen hier zwar auch einen anderen Leser ausw&auml;hlen, allerdings wird ein so ausgew&auml;hlter Datensatz nur bis zur n&auml;chsten Aktualisierung unter dem aktuellen Leser angezeigt &#8211; dann erkennt Access, dass die Beziehung nicht stimmt und zeigt den Datensatz mit dem falschen Leser nicht mehr im Unterformular an.<\/p>\n<h2>Prim&auml;rschl&uuml;ssel- und Fremdschl&uuml;sselfeld ausblenden<\/h2>\n<p>Jetzt, wo wir sichergestellt haben, dass das Fremdschl&uuml;sselfeld <b>LeserID <\/b>immer den Leser als Standardwert zugeordnet bekommt, der im Hauptformular angezeigt wird, k&ouml;nnen wir dieses Feld auch ausblenden. Schlie&szlig;lich sehen wir bereits im Hauptformular, zu welchem Leser die Ausleihe geh&ouml;rt.<\/p>\n<p>Und wenn wir schon dabei sind, k&ouml;nnen wir auch gleich noch das Prim&auml;rschl&uuml;sselfeld <b>AusleiheID <\/b>loswerden.<\/p>\n<p>Wer gedacht hat, wir k&ouml;nnten diese ausblenden, indem wir ihre Eigenschaft <b>Sichtbar <\/b>auf den Wert <b>Nein <\/b>einstellen, irrt sich: Die Datenblattansicht zeigt grunds&auml;tzlich immer alle Felder an, die sich im Detailbereich des Formularentwurfs befinden. Wir m&uuml;ssen die beiden Felder <b>AusleiheID<\/b> und <b>LeserID <\/b>also aus dem Entwurf entfernen (siehe Bild 16).<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_651_016.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_651_016.png\" alt=\"Entfernen der beiden Steuerelemente AusleiheID und Leser-ID\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 16: Entfernen der beiden Steuerelemente AusleiheID und Leser-ID<\/p>\n<p>Gleichzeitig stellen wir die beiden Eigenschaften <b>Horizontaler Anker <\/b>und <b>Vertikaler Anker <\/b>des Unterformular-Steuerelements auf den Wert <b>Beide <\/b>ein.<\/p>\n<p>Dadurch stellen wir sicher, dass beim Vergr&ouml;&szlig;ern des Hauptformulars auch das Unterformular-Steuerelement samt Inhalt vergr&ouml;&szlig;ert wird. So k&ouml;nnen wir wie in Bild 17 alle Felder des Unterformulars sichtbar machen.<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_651_017.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_651_017.png\" alt=\"Unterformular mit automatischer Gr&ouml;&szlig;enanpassung\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 17: Unterformular mit automatischer Gr&ouml;&szlig;enanpassung<\/p>\n<p>In diesem Fall ist es bereits etwas schwieriger, das Unterformular-Steuerelement zu markieren, um die beiden Eigenschaften einzustellen. Schnell hat man das enthaltene Unterformular statt des Unterformular-Steuerelements markiert, was &#8211; um es noch einmal deutlich zu machen &#8211; zwei v&ouml;llig unterschiedliche Elemente sind. Um das Unterformular-Steuerelement zu markieren, hast Du verschiedene M&ouml;glichkeiten:<\/p>\n<ul>\n<li>Mausklick auf irgendeinen anderen Bereich im Hauptformular und anschlie&szlig;end auf das Unterformular,<\/li>\n<li>Aufziehen eines Rahmens, der au&szlig;erhalb des Unterformular-Steuerelements beginnt und im Unterformular-Steuerelement endet oder<\/li>\n<li>Auswahl des Unterformular-Steuerelements im Eigenschaftenblatt.<\/li>\n<\/ul>\n<p>Letztlich sehen wir das mit einer Markierung versehene Unterformular wie in und k&ouml;nnen dann die beiden Eigenschaften <b>Horizontaler Anker <\/b>und <b>Vertikaler Anker <\/b>wie gew&uuml;nscht einstellen (siehe Bild 18).<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_651_018.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_651_018.png\" alt=\"Einstellen der Gr&ouml;&szlig;enanpassung des Unterformulars\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 18: Einstellen der Gr&ouml;&szlig;enanpassung des Unterformulars<\/p>\n<h2>Unterformular aus dem Navigationsbereich hineinziehen<\/h2>\n<p>Nun l&ouml;schen wir das Unterformularsteuerelement aus dem Hauptformular und schauen uns den zweiten, aus unserer Sicht effizienteren Weg zum Einf&uuml;gen eines Unterformulars in ein Hauptformular an.<\/p>\n<p>Dazu suchen wir im Navigationsbereich das als Unterformular einzusetzende Formular <b>sfmAusleihen<\/b> und ziehen es in den freien Bereich des Hauptformulars (siehe Bild 19).<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_651_019.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_651_019.png\" alt=\"Hinzuf&uuml;gen eines Unterformulars aus dem Navigationsbereich\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 19: Hinzuf&uuml;gen eines Unterformulars aus dem Navigationsbereich<\/p>\n<p>Lassen wir es fallen, erhalten wir in einem Schritt ein Unterformularsteuerelement, das direkt mit dem richtigen Unterformular gef&uuml;llt ist. Hier gilt es nun zun&auml;chst zu beachten, dass das Unterformularsteuerelement genau den gleichen Namen erh&auml;lt wie das im Unterformularsteuerelement enthaltene Unterformular, hier also <b>sfmAusleihen<\/b>. Das f&uuml;hrt in vielen F&auml;llen, gerade bei Anf&auml;ngern, zu Missverst&auml;ndnissen. Sie glauben dann, wenn sie das Element <b>Me!sfmAusleihen <\/b>referenzieren, dass sie direkt auf das im Unterformular angezeigte Unterformular zugreifen w&uuml;rden. Dann sind sie verwundert, dass beispielsweise <b>Me!sfmAusleihen!BuchID <\/b>einen Fehler liefert.<\/p>\n<p>Tats&auml;chlich ben&ouml;tigen wir jedoch den folgenden Ausdruck, um beispielsweise einen der Feldinhalte aus dem Unterformular in einem weiteren Textfeld auszugeben:<\/p>\n<pre>Forms!frmAusleihen!sfmAusleihen.Form!BuchID<\/pre>\n<p>Deshalb kann es sinnvoll sein, das Unterformularsteuerelement auch in diesem Fall nachtr&auml;glich umzubenennen, beispielsweise einfach in <b>sfm<\/b>. Das sollte man allerdings nur machen, wenn das Formular nur ein Unterformular enth&auml;lt &#8211; anderenfalls k&ouml;nnen wir ja nicht mehrere Unterformularsteuerelemente <b>sfm <\/b>nennen.<\/p>\n<h2>Feldwerte beim Anlegen von Datens&auml;tzen im Unterformular automatisch setzen<\/h2>\n<p>Bei dem absoluten Standardbeispiel f&uuml;r m:n-Beziehungen in Haupt- und Unterformular, den Rechnungen und Rechnungspositionen, f&uuml;hrt man meist noch eine Aktion durch, wenn eine neue Rechnungsposition angelegt und dabei der Artikel dieser Position ausgew&auml;hlt wird. Hier tr&auml;gt man n&auml;mlich beispielsweise den Einzelpreis und den Mehrwertsteuersatz des Artikels ein, damit der entsprechende Wert in der Artikeltabelle sich gegebenenfalls im Laufe der Zeit &auml;ndern kann. Die Rechnungsdaten sollen jedoch erhalten bleiben, deshalb erfassen wir diese Daten in eigenen Feldern in der m:n-Verkn&uuml;pfungstabelle.<\/p>\n<p>Auch in unserem Beispiel haben wir ein Feld, dass wir gleich beim Anlegen eines neuen Datensatzes im Unterformular f&uuml;llen k&ouml;nnen &#8211; n&auml;mlich das <b>Ausleihdatum<\/b>. Dieses wollen wir, ausgehend davon, dass die Ausleihe an dem Tag eingetragen wird, an dem sie auch stattfindet, auf den aktuellen Tag einstellen.<\/p>\n<p>Dazu f&uuml;gen wir dem Unterformular eine VBA-Prozedur hinzu, die durch das Ereignis <b>Nach Aktualisierung <\/b>des Feldes <b>BuchID <\/b>ausgel&ouml;st wird.<\/p>\n<p>Dieses Ereignis feuert immer, wenn der Benutzer ein neues Buch in einem der Datens&auml;tze im Unterformular ausgew&auml;hlt hat.<\/p>\n<p>Wir legen es an, indem wir das Hauptformular mit dem Unterformular in die Entwurfsansicht versetzen. Dann klicken wir auf das Feld <b>BuchID <\/b>im Unterformular und zeigen im Eigenschaftenblatt die Seite <b>Ereignisse <\/b>an. Hier w&auml;hlen wir f&uuml;r die Ereigniseigenschaft <b>Nach Aktualisierung <\/b>den Wert <b>[Ereignisprozedur] <\/b>aus und klicken rechts auf die Schaltfl&auml;che mit den drei Punkten (siehe Bild 20).<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_651_020.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_651_020.png\" alt=\"Hinzuf&uuml;gen eines Ereignisses zum Feld BuchID\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 20: Hinzuf&uuml;gen eines Ereignisses zum Feld BuchID<\/p>\n<p>Dies &ouml;ffnet den VBA-Editor und zeigt direkt die frisch angelegte Ereignisprozedur <b>BuchID_AfterUpdate <\/b>an (siehe Bild 21). Diese f&uuml;llen wir mit der folgenden Anweisung:<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_651_021.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_651_021.png\" alt=\"F&uuml;llen des Ereignisses f&uuml;r das Feld BuchID\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 21: F&uuml;llen des Ereignisses f&uuml;r das Feld BuchID<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>BuchID_AfterUpdate()\r\n     Me!Ausleihdatum = Date\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Diese weist einfach dem Feld Ausleihdatum das Ergebnis der Funktion <b>Date <\/b>zu, die das aktuelle Datum ermittelt. Wechseln wir nun zur&uuml;ck in die Formularansicht und w&auml;hlen in einem neuen Datensatz ein neues Buch aus, legt die Prozedur das aktuelle Datum im Feld <b>Ausleihdatum<\/b> an (siehe Bild 22).<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_651_022.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_651_022.png\" alt=\"Das Ausleihdatum wird automatisch gef&uuml;llt.\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 22: Das Ausleihdatum wird automatisch gef&uuml;llt.<\/p>\n<p>Im Falle des Beispiels mit den Rechnungen ist die Vorgehensweise etwas komplizierter, aber auch &uuml;berschaubar: Hier m&uuml;ssten wir mit der <b>DLookup<\/b>-Anweisung erst noch herausfinden, welcher Einzelpreis und welcher Mehrwertsteuersatz in der Artikeltabelle f&uuml;r den der Bestellposition hinzugef&uuml;gten Artikel gelten. Letztlich ben&ouml;tigen wir dazu aber auch nur einen einzigen Funktionsaufruf je zu f&uuml;llendem Feld.<\/p>\n<h2>Zusammenfassung und Ausblick<\/h2>\n<p>Mit der hier vorgestellten Vorgehensweise haben wir ein praktisches Formular mit einem Unterformular erstellt, in dem wir die Daten zweier per m:n-Beziehung verkn&uuml;pfter Tabellen verwalten k&ouml;nnen. Au&szlig;erdem haben wir gleich noch gezeigt, wie man automatisch die Daten eines neuen Datensatzes anpassen kann.<\/p>\n<p>Beim Einf&uuml;gen des Unterformular haben wir zwei Methoden vorgestellt: Bei der ersten haben wir zun&auml;chst ein Unterformularsteuerelement zum Formular hinzugef&uuml;gt und dann das anzuzeigende Unterformular &uuml;ber die Eigenschaft <b>Herkunftsobjekt <\/b>ausgew&auml;hlt. Bei der zweiten Methode haben wir einfach das Unterformular aus dem Navigationsbereich in das Hauptformular gezogen und ein &auml;hnliches Ergebnis erhalten.<\/p>\n<p>Beim Eingeben von Daten in eine Kombination aus Haupt- und Unterformular kann es jedoch leicht zu Problemen kommen.<\/p>\n<p>Wenn wir n&auml;mlich Daten im Unterformular eingeben, ohne dass wir einen Datensatz im Hauptformular angelegt haben, verschwinden die Datens&auml;tze aus dem Unterformular scheinbar im Nirvana. Wie wir diese umschiffen, zeigen wir in einem weiteren Artikel namens <b>Formulare [basics]: Probleme mit Haupt- und Unterformular <\/b>(<b>www.access-basics.de\/640<\/b>).<\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>FormulareBasics_mnBeziehungenMitUnterformular.accdb<\/p>\n<p><a href=\"..\/Downloads\/Beispiele\/{F56D29D6-2B73-4E7E-A80C-DA4A037F1B5A}\/FormulareBasics_mnBeziehungenMitUnterformular.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Tabellen in einer m:n-Beziehung sind Tabellen, die &uuml;ber eine Verkn&uuml;pfungstabelle miteinander verkn&uuml;pft sind, sodass jeder Datensatz der ersten Tabelle mit jedem Datensatz der zweiten Tabelle verkn&uuml;pft werden kann. Die Verkn&uuml;pfungstabelle realisiert das mit je einem Fremdschl&uuml;sselfeld zum Verkn&uuml;pfen dieser beiden Tabellen. Wollen wir dies in Formularen darstellen, sodass der Benutzer komfortabel mit den Daten in dieser Beziehungsart arbeiten kann, k&ouml;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&uuml;pfungstabelle neben den eigentlichen Verkn&uuml;pfungsdaten noch weitere Informationen aufnimmt, die sich auf die jeweilige Kombination der Datens&auml;tze der beiden Tabellen beziehen.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[66012025,662025,44000004],"tags":[],"class_list":["post-55000651","post","type-post","status-publish","format-standard","hentry","category-66012025","category-662025","category-Formulare_fuer_die_Dateneingabe"],"aioseo_notices":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v15.9.2 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Formulare [basics]: m:n-Beziehung mit Unterformular - Access [basics]<\/title>\n<link rel=\"canonical\" href=\"https:\/\/access-basics.de\/index.php\/Formulare_basics_mnBeziehung_mit_Unterformular.html\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Formulare [basics]: m:n-Beziehung mit Unterformular - Access [basics]\" \/>\n<meta property=\"og:description\" content=\"Tabellen in einer m:n-Beziehung sind Tabellen, die &uuml;ber eine Verkn&uuml;pfungstabelle miteinander verkn&uuml;pft sind, sodass jeder Datensatz der ersten Tabelle mit jedem Datensatz der zweiten Tabelle verkn&uuml;pft werden kann. Die Verkn&uuml;pfungstabelle realisiert das mit je einem Fremdschl&uuml;sselfeld zum Verkn&uuml;pfen dieser beiden Tabellen. Wollen wir dies in Formularen darstellen, sodass der Benutzer komfortabel mit den Daten in dieser Beziehungsart arbeiten kann, k&ouml;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&uuml;pfungstabelle neben den eigentlichen Verkn&uuml;pfungsdaten noch weitere Informationen aufnimmt, die sich auf die jeweilige Kombination der Datens&auml;tze der beiden Tabellen beziehen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-basics.de\/index.php\/Formulare_basics_mnBeziehung_mit_Unterformular.html\" \/>\n<meta property=\"og:site_name\" content=\"Access [basics]\" \/>\n<meta property=\"article:published_time\" content=\"2025-02-01T00:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"-0001-11-30T00:00:00+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg07.met.vgwort.de\/na\/c56d76eb52674dffb0852184bef8af61\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Gesch\u00e4tzte Lesezeit\">\n\t<meta name=\"twitter:data1\" content=\"16\u00a0Minuten\">\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebSite\",\"@id\":\"https:\/\/access-basics.de\/#website\",\"url\":\"https:\/\/access-basics.de\/\",\"name\":\"Access [basics]\",\"description\":\"DAS ACCESS-MAGAZIN F\\u00dcR ALLE, DIE VON 0 AUF 100 WOLLEN\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":\"https:\/\/access-basics.de\/?s={search_term_string}\",\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"de\"},{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Formulare_basics_mnBeziehung_mit_Unterformular.html#primaryimage\",\"inLanguage\":\"de\",\"url\":\"http:\/\/vg07.met.vgwort.de\/na\/c56d76eb52674dffb0852184bef8af61\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Formulare_basics_mnBeziehung_mit_Unterformular.html#webpage\",\"url\":\"https:\/\/access-basics.de\/index.php\/Formulare_basics_mnBeziehung_mit_Unterformular.html\",\"name\":\"Formulare [basics]: m:n-Beziehung mit Unterformular - Access [basics]\",\"isPartOf\":{\"@id\":\"https:\/\/access-basics.de\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/access-basics.de\/index.php\/Formulare_basics_mnBeziehung_mit_Unterformular.html#primaryimage\"},\"datePublished\":\"2025-02-01T00:00:00+00:00\",\"dateModified\":\"-0001-11-30T00:00:00+00:00\",\"author\":{\"@id\":\"https:\/\/access-basics.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f\"},\"breadcrumb\":{\"@id\":\"https:\/\/access-basics.de\/index.php\/Formulare_basics_mnBeziehung_mit_Unterformular.html#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/access-basics.de\/index.php\/Formulare_basics_mnBeziehung_mit_Unterformular.html\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Formulare_basics_mnBeziehung_mit_Unterformular.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"item\":{\"@type\":\"WebPage\",\"@id\":\"https:\/\/access-basics.de\/\",\"url\":\"https:\/\/access-basics.de\/\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"position\":2,\"item\":{\"@type\":\"WebPage\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Formulare_basics_mnBeziehung_mit_Unterformular.html\",\"url\":\"https:\/\/access-basics.de\/index.php\/Formulare_basics_mnBeziehung_mit_Unterformular.html\",\"name\":\"Formulare [basics]: m:n-Beziehung mit Unterformular\"}}]},{\"@type\":\"Person\",\"@id\":\"https:\/\/access-basics.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f\",\"name\":\"Andr\\u00e9 Minhorst\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/access-basics.de\/#personlogo\",\"inLanguage\":\"de\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"caption\":\"Andr\\u00e9 Minhorst\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","_links":{"self":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/posts\/55000651","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/comments?post=55000651"}],"version-history":[{"count":0,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/posts\/55000651\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/media?parent=55000651"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/categories?post=55000651"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/tags?post=55000651"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}