{"id":55000952,"date":"2014-10-01T00:00:00","date_gmt":"2020-05-22T21:12:40","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=952"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"1nBeziehungen_in_Unterformularen","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/1nBeziehungen_in_Unterformularen\/","title":{"rendered":"1:n-Beziehungen in Unterformularen"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg07.met.vgwort.de\/na\/a8e927f66b144dc1959f64ab42d86d29\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Meistens zeigt man 1:n-Beziehungen in einem Haupt- und einem Unterformular an. Was aber, wenn man die Datens&auml;tze beider Seiten im &uuml;berblick anzeigen m&ouml;chte &#8211; etwa wenn Sie alle Kategorien in einer Liste und die Artikel zur ausgew&auml;hlten Kategorie in einer anderen Liste darzustellen Oder, um es noch eine Nummer komplizierter zu machen, im Hauptformular die Kunden, im ersten Unterformular ihre Bestellungen und im zweiten Unterformular die Bestellpositionen der im ersten Unterformular ausgew&auml;hlten Bestellung Dann ist meist ein kleiner Trick erforderlich, um dies zu bewerkstelligen &#8211; wie der vorliegende Beitrag zeigt.<\/b><\/p>\n<p><b>Herk&ouml;mmliche Darstellung<\/b><\/p>\n<p>Normalerweise verwendet man zur Darstellung von 1:n-Beziehungen ein Haupt- und ein Unterformular. Das Hauptformular zeigt dabei die Datens&auml;tze der Mastertabelle an, also beispielsweise die Daten der Tabelle <b>tblKategorien<\/b>. Die Anzeige ist dabei allerdings auf Formularansicht eingestellt, was bewirkt, dass nur die Daten jeweils eines Datensatzes im Formular erscheinen.<\/p>\n<p>Das Unterformular zeigt die Daten der Detailtabelle an, also der Tabelle, die &uuml;ber ein Fremdschl&uuml;sselfeld mit den Datens&auml;tzen der Mastertabelle verkn&uuml;pft ist. In unserem Beispiel handelt es sich dabei um die Tabelle <b>tblArtikel<\/b>.<\/p>\n<p>Das Formular aus Bild 1 ist genau wie beschrieben aufgebaut &#8211; es zeigt die Daten der Tabelle <b>tblKategorien <\/b>im Hauptformular und die der Tabelle <b>tblArtikel <\/b>im Unterformular an. Damit das Unterformular nur die Daten der Tabelle <b>tblArtikel <\/b>anzeigt, die &uuml;ber das Fremdschl&uuml;sselfeld <b>KategorieID <\/b>mit dem aktuellen Datensatz der Tabelle <b>tblKategorien <\/b>im Hauptformular verkn&uuml;pft sind, tr&auml;gt man f&uuml;r die Eigenschaft <b>Verkn&uuml;pfen von <\/b>des Unterformular-Steuerelements den Namen des Fremdschl&uuml;sselfeldes der Tabelle im Unterformular ein (hier <b>KategorieID<\/b>) und f&uuml;r die Eigenschaft <b>Verkn&uuml;pfen nach <\/b>den Namen des Prim&auml;rschl&uuml;sselfeldes der im Hauptformular abgebildeten Tabelle <b>tblKategorien<\/b>. Das Ergebnis finden Sie in Bild 2 vor: Sie k&ouml;nnen durch die Datens&auml;tze im Hauptformular navigieren und das Unterformular zeigt jeweils nur die passenden Datens&auml;tze an.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2014_05\/pic_952_001.png\" alt=\"1:n-Beziehung in Haupt- und Unterformular mit Verkn&uuml;pfungseigenschaften\" width=\"575\" height=\"402,4106\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: 1:n-Beziehung in Haupt- und Unterformular mit Verkn&uuml;pfungseigenschaften<\/span><\/b><\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2014_05\/pic_952_002.png\" alt=\"1:n-Beziehung in Haupt- und Unterformular\" width=\"575\" height=\"400,5833\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: 1:n-Beziehung in Haupt- und Unterformular<\/span><\/b><\/p>\n<p><b>Zwei Unterformulare<\/b><\/p>\n<p>Nun gehen wir eine Stufe weiter: Wir wollen die Kategorien nicht mehr im Hauptformular anzeigen, sondern in einem weiteren Unterformular. So hat der Benutzer nicht nur die mit einer Kategorie verkn&uuml;pften Artikel im &uuml;berblick, sondern kann auch gleich die Liste der Kategorien einsehen und die gew&uuml;nschte Kategorie ausw&auml;hlen.<\/p>\n<p>Um dies zu erreichen, legen Sie zun&auml;chst ein neues Hauptformular namens <b>frmKategorienArtikelUFUF <\/b>an (<b>UFUF <\/b>f&uuml;r Unterformular\/Unterformular). Dann erstellen Sie ein Formular namens <b>sfmKategorienUFUF<\/b>, das die Tabelle <b>tblKategorien <\/b>als Datenherkunft verwendet und seine Daten in der Datenblattansicht anzeigt. Auf &auml;hnliche Weise erstellen Sie das Formular <b>sfmArtikelUFUF<\/b>, das Sie mit der Tabelle <b>tblArtikel <\/b>f&uuml;llen &#8211; ebenfalls in der Datenblattansicht. Ziehen Sie beide Unterformulare in das Hauptformular. Da das Hauptformular seinerseits keine Daten anzeigen soll, entfernen Sie der &uuml;bersichtlichkeit halber Elemente wie die <b>Navigationsschaltfl&auml;chen<\/b>, <b>Bildlaufleisten <\/b>und <b>Datensatzmarkierer<\/b>, indem Sie die entsprechenden Eigenschaften jeweils auf den Wert <b>Nein <\/b>einstellen. Beide Formulare ziehen Sie nun nebeneinander in das Hauptformular <b>frmKategorienArtikelUFUF<\/b>, sodass dieses wie in Bild 3 aussieht.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2014_05\/pic_952_003.png\" alt=\"Zwei Unterformulare, die miteinander verkn&uuml;pft werden sollen\" width=\"650\" height=\"323,3951\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Zwei Unterformulare, die miteinander verkn&uuml;pft werden sollen<\/span><\/b><\/p>\n<p>Ein Wechsel in die Formularansicht zeigt, dass die Daten schon einmal wie gew&uuml;nscht erscheinen (s. Bild 4). Allerdings filtert das rechte Unterformular seine Daten noch nicht nach dem aktuell im linken Unterformular angezeigten Wert.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2014_05\/pic_952_004.png\" alt=\"Aktuell zeigen beide Formulare alle Daten an, aber die Artikel werden nicht nach der aktuellen Kategorie gefiltert.\" width=\"650\" height=\"264,0124\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Aktuell zeigen beide Formulare alle Daten an, aber die Artikel werden nicht nach der aktuellen Kategorie gefiltert.<\/span><\/b><\/p>\n<p>Dummerweise erkennt Access auch nicht automatisch, was wir hier vorhaben, daher f&uuml;llt es die beiden Eigenschaften <b>Verkn&uuml;pfen von <\/b>und <b>Verkn&uuml;pfen nach <\/b>nicht automatisch aus wie im vorherigen Beispiel. Kommen wir hier &uuml;berhaupt mit den beiden Eigenschaften aus Ein Versuch, f&uuml;r die Eigenschaft <b>Verkn&uuml;pfen Nach <\/b>einen direkten Bezug zum  anderen Unterformular unterzubringen wie in Bild 5, scheitert allerdings &#8211; Access fragt den Ausdruck <b>Parent!sfmKategorienUFUF!KategorieID<\/b> in einer Inputbox ab und das Unterformular <b>sfmArtikelUFUF <\/b>bleibt leer.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2014_05\/pic_952_005.png\" alt=\"Diese Einstellung funktioniert nicht.\" width=\"350\" height=\"184,9383\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 5: Diese Einstellung funktioniert nicht.<\/span><\/b><\/p>\n<p>Allerdings sollte man immer mehrere Varianten ausprobieren und vor allem eventuelle Tipp- oder Syntaxfehler ausschlie&szlig;en. In diesem Fall war es kein Syntaxfehler, Access kann den zun&auml;chst verwendeten Ausdruck schlicht nicht verarbeiten. Mit dem folgenden Ausdruck f&uuml;r die Eigenschaft <b>Verkn&uuml;pfen nach <\/b>haben wir allerdings mehr Erfolg:<\/p>\n<pre>Forms!frmKategorienArtikelUFUF! sfmKategorienUFUF!KategorieID<\/pre>\n<p>Das Unterformular <b>sfmArtikelUFUF <\/b>zeigt nach dem Wechsel in die Entwurfsansicht die korrekten Daten an, also nur diejenigen Artikel, die zur aktuellen Kategorie geh&ouml;ren. Dummerweise ist die Begeisterung nach dem Wechsel zu einer anderen Kategorie schon wieder erledigt: Die zuvor angezeigten Artikel werden nicht gegen die der nun eingestellten Kategorie ausgetauscht.<\/p>\n<p>Erst wenn man links eine neue Kategorie ausw&auml;hlt, dann in das rechte Unterformular klickt und dann mit der Taste <b>F5 <\/b>die Datenherkunft aktualisiert, zeigt dieses Unterformular die gew&uuml;nschten Artikel-Datens&auml;tze an. Das ist allerdings ein wenig umst&auml;ndlich.<\/p>\n<p>Also kommen wir nicht umhin, mit einer kleinen VBA-Prozedur nachzuhelfen. Da das rechte Unterformular immer dann aktualisiert werden soll, wenn der Benutzer im linken Unterformular einen anderen Datensatz ausgew&auml;hlt hat, ben&ouml;tigen wir eine Ereignisprozedur, die durch das Ereignis <b>Beim Anzeigen <\/b>des linken Unterformulars ausgel&ouml;st wird.<\/p>\n<p>Das w&auml;re also vom linken Unterformular aus ein Verweis auf das <b>Parent<\/b>-Objekt und von dort aus auf das Unterformular-Steuerelement <b>sfmArtikelUFUF <\/b>und dann auf das darin enthaltene <b>Form<\/b>-Objekt. F&uuml;r dieses soll dann die Requery-Methode ausgef&uuml;hrt werden, was wie folgt aussehen k&ouml;nnte:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Form_Current()\r\n     Me.Parent!sfmArtikelUFUF.Form.Requery\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Access macht uns aber beim &ouml;ffnen des Formulars mit der Fehlermeldung aus Bild 6 einen Strich durch die Rechnung.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2014_05\/pic_952_006.png\" alt=\"Fehlermeldung beim &ouml;ffnen des Formulars\" width=\"400\" height=\"221,5385\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 6: Fehlermeldung beim &ouml;ffnen des Formulars<\/span><\/b><\/p>\n<p>In einem solchen Fall klickt man am besten auf die <b>Debuggen<\/b>-Schaltfl&auml;che und untersucht die aktuelle Situation durch entsprechende Pr&uuml;fungen im Direktfenster des VBA-Fensters. M&ouml;glicherweise haben wir ja irgendwo einen Syntaxfehler eingebaut<\/p>\n<p>Also hangeln wir uns durch die referenzierten Elemente, wobei wir uns von links nach rechts vorarbeiten und am besten immer eine g&auml;ngige Eigenschaft des jeweils referenzierten Elements abfragen. Wir starten mit dieser Abfrage:<\/p>\n<pre>  Me.Parent.Name\r\nfrmKategorienArtikelUFUF<\/pre>\n<p><!--30percent--><\/p>\n<p>Dies klappt also. Gehen wir einen Schritt weiter:<\/p>\n<pre>  Me.Parent.sfmArtikelUFUF.Name\r\nsfmArtikelUFUF<\/pre>\n<p>Und noch einen Schritt:<\/p>\n<pre>  Me.Parent.sfmArtikelUFUF.Form.Name<\/pre>\n<p>Hier erscheint dann die bereits bekannte Fehlermeldung. Das im Unterformularsteuerelement enthaltene Formular ist also anscheinend nicht verf&uuml;gbar. Das kann nat&uuml;rlich sein, denn die Unterformulare werden ja in einer bestimmten Reihenfolge geladen &#8211; m&ouml;glicherweise ist das Unterformular <b>sfmArtikelUFUF <\/b>ja noch gar nicht existent, wenn die obige Ereignisprozedur versucht, darauf zuzugreifen.<\/p>\n<p>Wenn Sie an dieser Stelle auf die Schaltfl&auml;che <b>Beenden <\/b>der Fehlermeldung klicken, erscheint das Formular mit beiden Unterformularen, wobei die Artikel entsprechend dem aktuell markierten ersten Eintrag des Kategorien-Unterformulars gefiltert werden &#8211; aber dies war ja auch schon ohne den Einsatz der Ereignisprozedur der Fall.<\/p>\n<p>Wenn Sie nun allerdings eine andere Kategorie w&auml;hlen, zeigt das rechte Unterformular pl&ouml;tzlich die zugeordneten Artikel an &#8211; die Ereignisprozedur scheint also doch korrekt zu funktionieren, nur eben nicht beim &ouml;ffnen des Formulars.<\/p>\n<p>Wir brauchen uns also nur darum zu k&uuml;mmern, dass das Unterformular <b>sfmArtikelUFUF <\/b>nur aktualisiert wird, wenn es bereits vorhanden ist. Da dies beim &ouml;ffnen des Hauptformulars automatisch geschieht, k&ouml;nnen wir die Pr&uuml;fung aus Listing 1 in die Ereignisprozedur einbauen.<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Form_Current()\r\n     <span style=\"color:blue;\">Dim <\/span>strForm<span style=\"color:blue;\"> As String<\/span>\r\n     On Error Resume <span style=\"color:blue;\">Next<\/span>\r\n     strForm = Me.Parent!sfmArtikelUFUF.Form.Name\r\n     <span style=\"color:blue;\">On Error GoTo<\/span> 0\r\n     <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Len<\/span>(strForm) &gt; 0<span style=\"color:blue;\"> Then<\/span>\r\n         Me.Parent!sfmArtikelUFUF.Form.Requery\r\n     <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 1: Aktualisieren des Unterformulars sfmArtikelUFUF<\/span><\/b><\/p>\n<p>Diese versucht, nach vorheriger Deaktivierung der Fehlerbehandlung den Namen des Unterformulars einzulesen. Ist das Formular bereits vorhanden, ist <b>strForm <\/b>danach mit dem Namen des Formulars gef&uuml;llt. Dies pr&uuml;ft eine <b>If&#8230;Then<\/b>-Bedingung und aktualisiert in diesem Fall die Datenherkunft des Unterformulars <b>sfmArtikelUFUF<\/b>.<\/p>\n<p><b>Elegantere L&ouml;sung<\/b><\/p>\n<p>Nun ist dies nicht die sch&ouml;nste L&ouml;sung. Das eine Unterformular wei&szlig; nicht, wann das andere Unterformular geladen wird &#8211; das ist nicht optimal. Wir wollen zun&auml;chst einmal betrachten, in welcher Reihenfolge die Unterformulare eigentlich geladen werden &#8211; und wie diese Zeitpunkte sich zum Laden des Hauptformulars verhalten. Also f&uuml;gen Sie sowohl f&uuml;r das Hauptformular als auch f&uuml;r die beiden Unterformulare jeweils eine Ereignisprozedur f&uuml;r das Ereignis <b>Beim Laden <\/b>hinzu.<\/p>\n<p>Wir ben&ouml;tigen keine weiteren Anweisungen, lediglich je einen Haltepunkt in der ersten Zeile der jeweiligen Prozedur. Wenn Sie das Formular nun &ouml;ffnen, zeigt der VBA-Editor nacheinander die Haltepunkte in der entsprechenden Reihenfolge an. Wir stellen fest: Das Unterformular <b>sfmKategorienUFUF <\/b>l&auml;dt als erstes, dann folgt <b>sfmArtikelUFUF <\/b>und schlie&szlig;lich das Hauptformular.<\/p>\n<p>Ein paar weitere Experimente, in denen wir die Unterformulare nacheinander ausschneiden und neu anlegen, zeigen, dass das Hauptformular immer zuletzt geladen wird.<\/p>\n<p>Bei den Unterformularen richtet sich die Reihenfolge offensichtlich danach, in welcher Reihenfolge die Unterformulare zum Hauptformular hinzugef&uuml;gt wurden.<\/p>\n<p>Mit dieser Erkenntnis gehen wir das Ganze von ganz oben an, n&auml;mlich vom Hauptformular aus. Der designtechnische Hintergrund ist, dass das Hauptformular n&auml;mlich wei&szlig;, dass es die beiden Unterformulare enth&auml;lt, umgekehrt aber nicht.<\/p>\n<p>Wie aber wollen wir im Hauptformular erfahren, wann der Benutzer einen neuen Datensatz im Unterformular <b>sfmKategorienUFUF <\/b>ausgew&auml;hlt hat Ganz einfach: Indem wir im Klassenmodul des Hauptformulars ein Objekt deklarieren, mit dem wir dann das Unterformular referenzieren und dessen Ereignisse abfangen. Dazu deklarieren wir es mit dem Schl&uuml;sselwort <b>WithEvents <\/b>im Kopf des Klassenmoduls des Formulars <b>frmKategorienArtikelUFUF <\/b>als <b>Form<\/b>-Objekt.<\/p>\n<p>&uuml;ber die beiden Kombinationsfelder im Kopf des Code-Fensters k&ouml;nnen wir nun links das Objekt <b>objSfmKategorien-UFUF <\/b>ausw&auml;hlen und rechts das Ereignis <b>OnCurrent<\/b>. Dies legt im Klassenmodul die Ereignisprozedur <b>objSfmKategorienUFUF_Current <\/b>an, die durch das Wechseln des Datensatzes im Unterformular <b>sfmKategorienUFUF <\/b>ausgel&ouml;st wird.<\/p>\n<p>Nun m&uuml;ssen wir allerdings noch die Objektvariable mit einem Verweis auf das betroffene Unterformular f&uuml;llen. Dies erledigen wir in der Ereignisprozedur, die durch das Ereignis <b>Beim Laden <\/b>des Hauptformulars ausgel&ouml;st wird. Dort stellen wir auch die Eigenschaft <b>OnCurrent <\/b>des Objekts <b>objSfmKategorienUFUF <\/b>auf den Wert <b>[Event Procedure] <\/b>ein. Dies entspricht dem Einstellen der Eigenschaft <b>Beim Anzeigen <\/b>auf den Wert <b>[Ereigniseigenschaft]<\/b>.<\/p>\n<p>Wenn Sie nun noch die Anweisung zum Aktualisieren des Unterformulars <b>sfmArtikelUFUF <\/b>zur Prozedur <b>objSfmKategorienUFUF_Current <\/b>hinzuf&uuml;gen, sind Sie fertig &#8211; der Code des Hauptformulars sieht nun wie in Listing 2 aus und aktualisiert den Inhalt des rechten Unterformulars, wenn der Benutzer im linken Unterformular einen neuen Datensatz ausw&auml;hlt.<\/p>\n<pre><span style=\"color:blue;\">Dim <\/span>WithEvents objSfmKategorienUFUF<span style=\"color:blue;\"> As <\/span>Form\r\n<span style=\"color:blue;\">Private Sub <\/span>Form_Load()\r\n     <span style=\"color:blue;\">Set<\/span> objSfmKategorienUFUF = Me!sfmKategorienUFUF.Form\r\n     <span style=\"color:blue;\">With<\/span> objSfmKategorienUFUF\r\n         .OnCurrent = \"[Event Procedure]\"\r\n     End <span style=\"color:blue;\">With<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span>\r\n<span style=\"color:blue;\">Private Sub <\/span>objSfmKategorienUFUF_Current()\r\n     Me!sfmArtikelUFUF.Form.Requery\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 2: Aktualisieren des Unterformulars sfmArtikelUFUF, alternativer Weg<\/span><\/b><\/p>\n<p>Wichtiger Hinweis: Damit das Ereignis <b>Beim Anzeigen <\/b>des Unterformulars <b>sfm-KategorienUFUF <\/b>auch ausgel&ouml;st wird, m&uuml;ssen Sie dem Unterformular noch ein Klassenmodul hinzuf&uuml;gen. Das erledigen Sie, soweit noch nicht geschehen, wenn Sie die Eigenschaft <b>Enth&auml;lt Modul <\/b>auf den Wert <b>Ja <\/b>einstellen (s. Bild 7).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2014_05\/pic_952_007.png\" alt=\"Hinzuf&uuml;gen eines Klassenmoduls zu einem Formular\" width=\"450\" height=\"305,535\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 7: Hinzuf&uuml;gen eines Klassenmoduls zu einem Formular<\/span><\/b><\/p>\n<p><b>Einfachere Variante<\/b><\/p>\n<p>Wer nicht so gern mit VBA programmiert, kann auch die folgende Variante verwenden. Dabei f&uuml;gen wir dem Hauptformular ein Textfeld namens <b>txtKategorieID <\/b>hinzu.<\/p>\n<p>Dessen Steuerelementinhalt stellen wir auf das Feld <b>KategorieID <\/b>des ersten Unterformulars ein, also auf den folgenden Ausdruck:<\/p>\n<pre>=sfmKategorienUFUF!KategorieID<\/pre>\n<p>Damit zeigt dieses Textfeld, das im echten Betrieb nat&uuml;rlich ausgeblendet sein soll, immer die <b>KategorieID <\/b>des im Unterformular <b>sfmKategorienUFUF <\/b>ausgew&auml;hlten Datensatzes an.<\/p>\n<p>Und wie bringen wir nun das zweite Unterformular dazu, nur die Artikel anzuzeigen, die zu dieser Kategorie geh&ouml;ren Ganz einfach: Wir stellen einfach die Eigenschaft des entsprechenden Unterformular-Steuerelements auf den Namen dieses Textfeldes ein, also <b>txtKategorieID<\/b> (s. Bild 8).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2014_05\/pic_952_009.png\" alt=\"Verkn&uuml;pfung &uuml;ber Umwege\" width=\"650\" height=\"299,8155\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 8: Verkn&uuml;pfung &uuml;ber Umwege<\/span><\/b><\/p>\n<p>Dann gelingt die Synchronisierung v&ouml;llig automatisch und ohne Code, hat aber einen entscheidenden Nachteil: Es dauert manchmal ein paar Sekundenbruchteile, bis die Aktualisierung erfolgt.<\/p>\n<p>Wenn man schnell durch die Datens&auml;tze navigiert, kann es daher schon mal haken. Dies liegt daran, dass das Unterformular nicht st&auml;ndig den Wert des Textfeldes im Hauptformular abfragt. Aus Perfomance-Sicht sollte man also die erste Variante verwenden.<\/p>\n<p><b>1:n und 1:n<\/b><\/p>\n<p>Es gibt noch eine weitere denkbare interessante Konstellation. Dabei zeigt das Hauptformular die Daten einer Tabelle an, das erste Unterformular alle Daten, die mit dem aktuellen Datensatz des Hauptformulars per 1:n-Beziehung verkn&uuml;pft sind, und das zweite Unterformular zeigt alle Datens&auml;tze an, die mit dem aktuell markierten Datensatz im ersten Unterformular verkn&uuml;pft sind.<\/p>\n<p>Im Beispiel sollen dies die Tabellen <b>tblKunden <\/b>(im Hauptformular), <b>tblBestellungen <\/b>(im ersten Unterformular) und <b>tblBestelldetails <\/b>(im zweiten Unterformular) sein. Dem Hauptformular, das <b>frmKundenBestellungenArtikel <\/b>hei&szlig;t, f&uuml;gen wir einige repr&auml;sentante Felder der Tabelle <b>tblKunden <\/b>hinzu, die Ansicht des Hauptformulars ist die Formularansicht.<\/p>\n<p>Das erste Unterformular hei&szlig;t <b>sfmBestellungen <\/b>und soll die Felder <b>Bestelldatum<\/b>, <b>Lieferdatum<\/b>, <b>Versanddatum <\/b>und <b>VersandUeber <\/b>enthalten. Diese Felder werden in der Datenblattansicht angezeigt. Das zweite Unterformular hei&szlig;t <b>sfmBestelldetails <\/b>und liefert die Felder <b>ArtikelID<\/b>, <b>Einzelpreis<\/b>, <b>Anzahl <\/b>und <b>Rabatt <\/b>der Tabelle <b>tblBestelldetails<\/b>. Auch dieses Formular zeigt seine Daten in der Datenblattansicht an (s. Bild 9).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2014_05\/pic_952_008.png\" alt=\"Hauptformular mit zwei verkn&uuml;pften Unterformularen\" width=\"575\" height=\"444,5227\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 9: Hauptformular mit zwei verkn&uuml;pften Unterformularen<\/span><\/b><\/p>\n<p>Wenn wir nun in die Formularansicht wechseln, funktionieren zumindest schon einmal das Hauptformular und das erste Unterformular wie gewohnt: Wenn Sie im Hauptformular einen Kunden ausw&auml;hlen, zeigt das Unterformular <b>sfmBestellungen <\/b>die dazu geh&ouml;renden Datens&auml;tze an. Dies geschieht, weil Access beim Hinzuf&uuml;gen des Unterformulars automatisch erkannt hat, dass seine Datenherkunft ein Fremdschl&uuml;sselfeld enth&auml;lt, das mit dem Prim&auml;rschl&uuml;sselfeld der Datenherkunft im Hauptformular verkn&uuml;pft ist und die beiden Eigenschaften <b>Verkn&uuml;pfen von <\/b>und <b>Verkn&uuml;pfen nach <\/b>des Unterformular-Steuerelements entsprechend gef&uuml;llt hat (s. Bild 10).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2014_05\/pic_952_010.png\" alt=\"Hauptformular mit zwei synchronen Unterformular\" width=\"450\" height=\"352,1053\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 10: Hauptformular mit zwei synchronen Unterformular<\/span><\/b><\/p>\n<p>Beim Unterformular-Steuerelement <b>sfmBestelldetails <\/b>sind diese Eigenschaften hingegen leer geblieben.<\/p>\n<p>Das ist klar &#8211; es gibt keine verwertbare Beziehung zwischen den Datenherk&uuml;nften in Haupt- und Unterformular. Also probieren wir es zun&auml;chst wieder in der Variante des vorherigen Beispiels ohne Code. Wir f&uuml;gen dem Hauptformular ein Textfeld namens <b>txtBestellungID <\/b>hinzu, das den folgenden Ausdruck als Steuerelementinhalt verwendet:<\/p>\n<pre>=sfmBestellungen!BestellungID<\/pre>\n<p>F&uuml;r die Eigenschaft <b>Verkn&uuml;pfen von <\/b>des Unterformulars <b>sfmBestelldetails <\/b>tragen wir <b>BestellungID <\/b>ein, f&uuml;r die Eigenschaft <b>Verkn&uuml;pfen nach <\/b>das Textfeld <b>txtBestellungID<\/b>.<\/p>\n<p>Nach dem Wechsel in die Formularansicht wird deutlich, dass alles so funktioniert wie gew&uuml;nscht &#8211; beim Navigieren durch das Unterformular <b>sfmBestellungen<\/b> &auml;ndert sich st&auml;ndig der Inhalt des Unterformulars <b>sfmBestelldetails<\/b>, und wenn der Benutzer einen neuen Kunden ausw&auml;hlt, passen sich gleich beide Unterformulare an.<\/p>\n<p>Interessant ist an dieser Stelle die Betrachtung der Performance: Wenn Sie durch die Kundendatens&auml;tze im Hauptformular navigieren, werden beide Unterformulare blitzschnell angepasst.<\/p>\n<p>Wenn Sie hingegen durch die Datens&auml;tze des Unterformulars <b>sfmBestellungen <\/b>bl&auml;ttern, erhalten Sie wieder eine Verz&ouml;gerung von ein paar Sekundenbruchteilen. Wenn Sie das nicht w&uuml;nschen, m&uuml;ssen Sie auch hier wieder mit VBA arbeiten.<\/p>\n<p>Dazu legen wir im Klassenmodul des Hauptformulars <b>frmKundenBestellungenArtikel <\/b>prinzipiell wieder die gleichen Elemente an wie im vorherigen Beispiel &#8211; also eine mit <b>WithEvents<\/b> deklarierte Objektvariable f&uuml;r das Unterformular <b>sfmBestellungen<\/b> sowie zwei Ereignisprozeduren, von denen die erste beim Laden des Hauptformulars ausgel&ouml;st wird und die Konfiguration des zweiten Ereignisses vornimmt. Dieses wird dann beim Anzeigen eines jeden Datensatzes im Unterformular <b>sfmBestellungen<\/b> ausgel&ouml;st und aktualisiert die Datenherkunft des zweiten Unterformulars <b>sfmBestelldetails<\/b> (s. Listing 3).<\/p>\n<pre><span style=\"color:blue;\">Dim <\/span>WithEvents objSfmBestellungen<span style=\"color:blue;\"> As <\/span>Form\r\n<span style=\"color:blue;\">Private Sub <\/span>Form_Load()\r\n     <span style=\"color:blue;\">Set<\/span> objSfmBestellungen = Me!sfmBestellungen.Form\r\n     <span style=\"color:blue;\">With<\/span> objSfmBestellungen\r\n         .OnCurrent = \"[Event Procedure]\"\r\n     End <span style=\"color:blue;\">With<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span>\r\n<span style=\"color:blue;\">Private Sub <\/span>objSfmBestellungen_Current()\r\n     Me!sfmBestelldetails.Form.Requery\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 3: Aktualisieren des Unterformulars sfmBestelldetails per VBA<\/span><\/b><\/p>\n<p>&uuml;brigens wirkt es sich offensichtlich nicht sonderlich auf die Performance aus, ob Sie nun ein Textfeld im Hauptformular unterbringen, das sich den Inhalt des Prim&auml;rschl&uuml;sselfeldes des ersten Unterformulars holt, und dann &uuml;ber die Eigenschaft <b>Verkn&uuml;pfen nach <\/b>des zweiten Unterformular-Steuerelements darauf zugreifen oder ob Sie gleich das entsprechende Feld im ersten Unterformular mit der Eigenschaft <b>Verkn&uuml;pfen nach <\/b>des zweiten Unterformulars referenzieren. Letzteres w&uuml;rde in diesem Fall wie folgt lauten:<\/p>\n<pre>Forms!frmKundenBestellungenArtikel_VBA_II!\r\nsfmBestellungen!BestellungID<\/pre>\n<p><b>Zusammenfassung und Ausblick<\/b><\/p>\n<p>Mit diesem Beitrag haben Sie einige M&ouml;glichkeiten kennengelernt, um vom Hauptformular abh&auml;ngige Unterformulare und voneinander abh&auml;ngige Unterformulare zu synchronisieren. Es ist offensichtlich, dass die L&ouml;sungen, die rein auf der Verwendung von Eigenschaften wie <b>Verkn&uuml;pfen von <\/b>und <b>Verkn&uuml;pfen nach<\/b> basieren, teilweise eine schlechte Performance bieten.<\/p>\n<p>Daher empfiehlt es sich, per VBA zu den entsprechenden Gelegenheiten nachzuhelfen &#8211; beispielsweise durch Aktualisieren des zu filternden Unterformulars.<\/p>\n<p>Hier gibt es wieder mindestens zwei M&ouml;glichkeiten: Entweder Sie f&uuml;gen die entsprechenden Ereignisprozeduren den jeweiligen Unterformularen hinzu, oder Sie steuern die Unterformulare fern, indem Sie diese vom Hauptformular aus referenzieren und deren Ereignisse dort abfangen und passende Ereignisprozeduren implementieren.<\/p>\n<p>Dies ist die sauberere L&ouml;sung, denn so brauchen Sie den Unterformularen keinen Code hinzuzuf&uuml;gen, den sie &#8211; wenn sie noch anderswo als Unterformular eingesetzt werden &#8211; gar nicht gebrauchen k&ouml;nnen.<\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>1zuNInUnterformularen.mdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/{89A5D007-8213-46AE-BECF-B817F0D13D2A}\/aiu_952.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Meistens zeigt man 1:n-Beziehungen in einem Haupt- und einem Unterformular an. Was aber, wenn man die Datens&auml;tze beider Seiten im &Uuml;berblick anzeigen m&ouml;chte &#8211; etwa wenn Sie alle Kategorien in einer Liste und die Artikel zur ausgew&auml;hlten Kategorie in einer anderen Liste darzustellen Oder, um es noch eine Nummer komplizierter zu machen, im Hauptformular die Kunden, im ersten Unterformular ihre Bestellungen und im zweiten Unterformular die Bestellpositionen der im ersten Unterformular ausgew&auml;hlten Bestellung Dann ist meist ein kleiner Trick erforderlich, um dies zu bewerkstelligen &#8211; wie der vorliegende Beitrag zeigt.<\/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":[662014,66052014,44000023],"tags":[],"class_list":["post-55000952","post","type-post","status-publish","format-standard","hentry","category-662014","category-66052014","category-Mit_Formularen_arbeiten"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.9 (Yoast SEO v27.4) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>1:n-Beziehungen in Unterformularen - Access im Unternehmen<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/access-im-unternehmen.de\/1nBeziehungen_in_Unterformularen\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"1:n-Beziehungen in Unterformularen\" \/>\n<meta property=\"og:description\" content=\"Meistens zeigt man 1:n-Beziehungen in einem Haupt- und einem Unterformular an. Was aber, wenn man die Datens&auml;tze beider Seiten im &Uuml;berblick anzeigen m&ouml;chte - etwa wenn Sie alle Kategorien in einer Liste und die Artikel zur ausgew&auml;hlten Kategorie in einer anderen Liste darzustellen Oder, um es noch eine Nummer komplizierter zu machen, im Hauptformular die Kunden, im ersten Unterformular ihre Bestellungen und im zweiten Unterformular die Bestellpositionen der im ersten Unterformular ausgew&auml;hlten Bestellung Dann ist meist ein kleiner Trick erforderlich, um dies zu bewerkstelligen - wie der vorliegende Beitrag zeigt.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/1nBeziehungen_in_Unterformularen\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-22T21:12:40+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg07.met.vgwort.de\/na\/a8e927f66b144dc1959f64ab42d86d29\" \/>\n<meta name=\"author\" content=\"Andr\u00e9 Minhorst\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Andr\u00e9 Minhorst\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"15\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/1nBeziehungen_in_Unterformularen\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/1nBeziehungen_in_Unterformularen\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"1:n-Beziehungen in Unterformularen\",\"datePublished\":\"2020-05-22T21:12:40+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/1nBeziehungen_in_Unterformularen\\\/\"},\"wordCount\":2791,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/1nBeziehungen_in_Unterformularen\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/a8e927f66b144dc1959f64ab42d86d29\",\"articleSection\":[\"2014\",\"5\\\/2014\",\"Mit Formularen arbeiten\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/1nBeziehungen_in_Unterformularen\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/1nBeziehungen_in_Unterformularen\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/1nBeziehungen_in_Unterformularen\\\/\",\"name\":\"1:n-Beziehungen in Unterformularen - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/1nBeziehungen_in_Unterformularen\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/1nBeziehungen_in_Unterformularen\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/a8e927f66b144dc1959f64ab42d86d29\",\"datePublished\":\"2020-05-22T21:12:40+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/1nBeziehungen_in_Unterformularen\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/1nBeziehungen_in_Unterformularen\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/1nBeziehungen_in_Unterformularen\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/a8e927f66b144dc1959f64ab42d86d29\",\"contentUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/a8e927f66b144dc1959f64ab42d86d29\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/1nBeziehungen_in_Unterformularen\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"1:n-Beziehungen in Unterformularen\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"name\":\"Access im Unternehmen\",\"description\":\"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access\",\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/access-im-unternehmen.de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\",\"name\":\"Andr\u00e9 Minhorst Verlag\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"contentUrl\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"width\":370,\"height\":111,\"caption\":\"Andr\u00e9 Minhorst Verlag\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\",\"name\":\"Andr\u00e9 Minhorst\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"caption\":\"Andr\u00e9 Minhorst\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"1:n-Beziehungen in Unterformularen - Access im Unternehmen","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/access-im-unternehmen.de\/1nBeziehungen_in_Unterformularen\/","og_locale":"de_DE","og_type":"article","og_title":"1:n-Beziehungen in Unterformularen","og_description":"Meistens zeigt man 1:n-Beziehungen in einem Haupt- und einem Unterformular an. Was aber, wenn man die Datens&auml;tze beider Seiten im &Uuml;berblick anzeigen m&ouml;chte - etwa wenn Sie alle Kategorien in einer Liste und die Artikel zur ausgew&auml;hlten Kategorie in einer anderen Liste darzustellen Oder, um es noch eine Nummer komplizierter zu machen, im Hauptformular die Kunden, im ersten Unterformular ihre Bestellungen und im zweiten Unterformular die Bestellpositionen der im ersten Unterformular ausgew&auml;hlten Bestellung Dann ist meist ein kleiner Trick erforderlich, um dies zu bewerkstelligen - wie der vorliegende Beitrag zeigt.","og_url":"https:\/\/access-im-unternehmen.de\/1nBeziehungen_in_Unterformularen\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-05-22T21:12:40+00:00","og_image":[{"url":"http:\/\/vg07.met.vgwort.de\/na\/a8e927f66b144dc1959f64ab42d86d29","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"15\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/1nBeziehungen_in_Unterformularen\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/1nBeziehungen_in_Unterformularen\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"1:n-Beziehungen in Unterformularen","datePublished":"2020-05-22T21:12:40+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/1nBeziehungen_in_Unterformularen\/"},"wordCount":2791,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/1nBeziehungen_in_Unterformularen\/#primaryimage"},"thumbnailUrl":"http:\/\/vg07.met.vgwort.de\/na\/a8e927f66b144dc1959f64ab42d86d29","articleSection":["2014","5\/2014","Mit Formularen arbeiten"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/1nBeziehungen_in_Unterformularen\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/1nBeziehungen_in_Unterformularen\/","url":"https:\/\/access-im-unternehmen.de\/1nBeziehungen_in_Unterformularen\/","name":"1:n-Beziehungen in Unterformularen - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/1nBeziehungen_in_Unterformularen\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/1nBeziehungen_in_Unterformularen\/#primaryimage"},"thumbnailUrl":"http:\/\/vg07.met.vgwort.de\/na\/a8e927f66b144dc1959f64ab42d86d29","datePublished":"2020-05-22T21:12:40+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/1nBeziehungen_in_Unterformularen\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/1nBeziehungen_in_Unterformularen\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/1nBeziehungen_in_Unterformularen\/#primaryimage","url":"http:\/\/vg07.met.vgwort.de\/na\/a8e927f66b144dc1959f64ab42d86d29","contentUrl":"http:\/\/vg07.met.vgwort.de\/na\/a8e927f66b144dc1959f64ab42d86d29"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/1nBeziehungen_in_Unterformularen\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"1:n-Beziehungen in Unterformularen"}]},{"@type":"WebSite","@id":"https:\/\/access-im-unternehmen.de\/#website","url":"https:\/\/access-im-unternehmen.de\/","name":"Access im Unternehmen","description":"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access","publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/access-im-unternehmen.de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/access-im-unternehmen.de\/#organization","name":"Andr\u00e9 Minhorst Verlag","url":"https:\/\/access-im-unternehmen.de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/","url":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","contentUrl":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","width":370,"height":111,"caption":"Andr\u00e9 Minhorst Verlag"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f","name":"Andr\u00e9 Minhorst","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","caption":"Andr\u00e9 Minhorst"}}]}},"_links":{"self":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000952","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/comments?post=55000952"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000952\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55000952"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55000952"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55000952"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}