{"id":55001463,"date":"2023-12-01T00:00:00","date_gmt":"2023-11-07T11:45:14","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=1463"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Dateneingabe_in_Haupt_und_Unterformular","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Dateneingabe_in_Haupt_und_Unterformular\/","title":{"rendered":"Dateneingabe in Haupt- und Unterformular"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg02.met.vgwort.de\/na\/49dae6cf448744a1a01205733cc6158e\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Wenn man Daten in die Tabellen einer 1:n-Beziehung eingeben m&ouml;chte, nutzt man in der Regel ein Haupt- und ein Unterformular. Das Hauptformular nimmt die Daten der Mastertabelle auf, das Unterformular die Daten der Detailtabelle. Wenn man nun keine weiteren Vorsichtsma&szlig;nahmen trifft, kann der Benutzer Daten in das Unterformular eingeben, ohne dass das Hauptformular einen Datensatz anzeigt. Damit erzeugt er Datens&auml;tze in der Detailtabelle, die mit keinem Datensatz der Mastertabelle verkn&uuml;pft sind. Das ist aus mehreren Gr&uuml;nden schlecht &#8211; diese schauen wir uns an und zeigen, wie wir das Problem beheben k&ouml;nnen.<\/b><\/p>\n<h2>Beispieldatenbank<\/h2>\n<p>Wir w&auml;hlen als einfaches Beispiel zwei Tabellen namens <b>tblKategorien <\/b>und <b>tblProdukte<\/b>. Die Tabelle <b>tblProdukte <\/b>ist &uuml;ber das als Nachschlagefeld ausgelegte Fremdschl&uuml;sselfeld <b>KategorieID <\/b>mit der Tabelle <b>tblKategorien <\/b>verkn&uuml;pft, sodass wir f&uuml;r jedes Produkt eine Kategorie ausw&auml;hlen k&ouml;nnen. Im Datenmodell sehen die beiden Tabellen mit ihrer Verkn&uuml;pfung wie in Bild 1 aus.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_06\/pic_1463_001.png\" alt=\"Die Tabellen der Beispielanwendung\" width=\"549,559\" height=\"275,9846\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Die Tabellen der Beispielanwendung<\/span><\/b><\/p>\n<p>Der Eigenschaft <b>Datensatzquelle <\/b>des Unterformulars <b>sfmKategorienProdukte <\/b>weisen wir die Tabelle <b>tblProdukte <\/b>hinzu. Aus der Feldliste ziehen wir alle Felder in den Detailbereich des Formularentwurfs und stellen die Eigenschaft <b>Standardansicht <\/b>auf <b>Datenblatt <\/b>ein (siehe Bild 2). Danach speichern und schlie&szlig;en wir dieses Formular.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_06\/pic_1463_002.png\" alt=\"Das Unterformular der Anwendung\" width=\"599,559\" height=\"282,7935\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Das Unterformular der Anwendung<\/span><\/b><\/p>\n<p>F&uuml;r das Hauptformular <b>frmKategorienProdukte <\/b>legen wir die Tabelle <b>tblKategorien <\/b>als Datensatzquelle fest. Auch hier ziehen wir alle Felder aus der Feldliste in den Detailbereich. Au&szlig;erdem ziehen wir das Formular <b>sfmKategorienProdukte <\/b>aus dem Navigationsbereich in das Hauptformular <b>frmKategorienProdukte <\/b>und platzieren es unterhalb der hinzugef&uuml;gten Felder. Access erkennt dabei automatisch die Beziehung zwischen den Tabellen, die als Datensatzquelle f&uuml;r die beiden Formulare dienen, und tr&auml;gt die Verkn&uuml;pfungsfelder, also das Fremdschl&uuml;sselfeld der Tabelle <b>tblProdukte <\/b>und das Prim&auml;rschl&uuml;sselfeld der Tabelle <b>tblKategorien<\/b>, in die beiden Eigenschaften <b>Verkn&uuml;pfen von <\/b>und <b>Verkn&uuml;pfen nach <\/b>des Unterformular-Steuerelements ein (siehe Bild 3).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_06\/pic_1463_003.png\" alt=\"Einbau des Unterformulars in das Hauptformular\" width=\"549,559\" height=\"400,3067\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Einbau des Unterformulars in das Hauptformular<\/span><\/b><\/p>\n<h2>Problem: Produkte ohne Kategorie<\/h2>\n<p>Geht man in diesem Formular den &uuml;blichen Weg und legt zun&auml;chst eine Kategorie an, bevor man ein Produkt hinzuf&uuml;gt, werden die Daten miteinander verkn&uuml;pft und das Fremdschl&uuml;sselfeld <b>KategorieID <\/b>der Tabelle <b>tblProdukte <\/b>weist den gew&uuml;nschten Wert der Tabelle <b>tblKategorien <\/b>auf. Das ist deswegen der Fall, weil das Fremdschl&uuml;sselfeld <b>KategorieID <\/b>im Unterformular automatisch mit dem Wert des Prim&auml;rschl&uuml;sselfeldes im Hauptformular als Standardwert gef&uuml;llt wird (siehe Bild 4).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_06\/pic_1463_004.png\" alt=\"Eingabe von Daten auf dem geplanten Weg\" width=\"499,5589\" height=\"275,0184\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Eingabe von Daten auf dem geplanten Weg<\/span><\/b><\/p>\n<p>Das ist insbesondere deshalb m&ouml;glich, weil durch den Wechsel ins Unterformular der Datensatz im Hauptformular gespeichert wird und der Prim&auml;rschl&uuml;sselwert der Kategorie bereits verf&uuml;gbar ist.<\/p>\n<p>Wir k&ouml;nnen in diesem Formular allerdings auch direkt einen Datensatz im Unterformular anlegen, ohne dass das Hauptformular einen Datensatz anzeigt &#8211; beziehungsweise w&auml;hrend es einen neuen, leeren Datensatz anzeigt, f&uuml;r den es noch keinen automatisch vergebenen Prim&auml;rschl&uuml;sselwert gibt. Wechseln wir ins Unterformular, ist das Fremdschl&uuml;sselfeld <b>KategorieID<\/b> noch nicht gef&uuml;llt (siehe Bild 5).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_06\/pic_1463_005.png\" alt=\"Ohne Kategorie wird auch das Fremdschl&uuml;sselfeld nicht vorbelegt\" width=\"499,5589\" height=\"275,0184\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 5: Ohne Kategorie wird auch das Fremdschl&uuml;sselfeld nicht vorbelegt<\/span><\/b><\/p>\n<p>Wir k&ouml;nnen hier nun einen Datensatz anlegen, den wir <b>Produkt 2 <\/b>nennen. F&auml;llt uns dann auf, dass wir noch die Kategorie anlegen wollten und wechseln wir dazu ins Hauptformular, ist der Datensatz im Unterformular noch sichtbar.<\/p>\n<p>Sobald wir jedoch mit der Eingabe in die Felder des Hauptdatensatzes beginnen, wird das Prim&auml;rschl&uuml;sselfeld gef&uuml;llt und somit passt der Datensatz im Unterformular nicht mehr zu diesem Datensatz &#8211; er hat den Wert <b>Null <\/b>im Fremdschl&uuml;sselfeld <b>KategorieID<\/b>, w&auml;hrend das Prim&auml;rschl&uuml;sselfeld <b>KategorieID <\/b>im Hauptformular nun den Wert <b>2 <\/b>aufweist (siehe Bild 6). Speichern wir nun den Datensatz im Hauptformular, indem wir auf den Datensatzmarkierer klicken oder zum Unterformular wechseln, wird der Standardwert f&uuml;r das dortige Fremdschl&uuml;sselfeld <b>KategorieID<\/b> korrekt auf <b>2 <\/b>eingestellt. Der dort angelegte Produkt-Datensatz bleibt jedoch verschwunden (siehe Bild 7).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_06\/pic_1463_007.png\" alt=\"Nach dem Speichern im Hauptformular wird der Fremdschl&uuml;sselwert im Unterformular wieder auf den richtigen Wert eingestellt.\" width=\"499,5589\" height=\"276,0486\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 6: Nach dem Speichern im Hauptformular wird der Fremdschl&uuml;sselwert im Unterformular wieder auf den richtigen Wert eingestellt.<\/span><\/b><\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_06\/pic_1463_006.png\" alt=\"Nach dem Erg&auml;nzen der Kategorie verschwindet der Datensatz im Unterformular.\" width=\"499,5589\" height=\"276,0486\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 7: Nach dem Erg&auml;nzen der Kategorie verschwindet der Datensatz im Unterformular.<\/span><\/b><\/p>\n<p>Werfen wir einen Blick in die Tabelle <b>tblProdukte<\/b>, finden wir den verlorengeglaubten Datensatz allerdings wieder &#8211; er hat lediglich keinen Wert im Feld <b>KategorieID<\/b>, weshalb er im Formular nicht im Kontext einer Kategorie erscheint (siehe Bild 8).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_06\/pic_1463_008.png\" alt=\"Der Produkt-Datensatz wurde angelegt - wenn auch ohne Kategorie.\" width=\"424,5589\" height=\"182,5939\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 8: Der Produkt-Datensatz wurde angelegt &#8211; wenn auch ohne Kategorie.<\/span><\/b><\/p>\n<p>Der Datensatz erscheint erst wieder, wenn wir im Formular zu einer neuen, leeren Kategorie wechseln &#8211; dann passt der Fremdschl&uuml;sselwert <b>Null <\/b>wieder zu dem Prim&auml;rschl&uuml;sselwert im Hauptformular, der f&uuml;r einen neuen, leeren Datensatz ebenfalls <b>Null <\/b>lautet. Den falsch erstellten Datensatz k&ouml;nnen wir nun l&ouml;schen oder wir weisen ihm &uuml;ber das Nachschlagefeld in der Tabelle eine Kategorie zu.<\/p>\n<h2>Anlegen von Datens&auml;tzen im Unterformular ohne Datensatz im Hauptformular verhindern<\/h2>\n<p>Es gibt viele Wege, mit denen wir verhindern k&ouml;nnen, dass ein Datensatz im Unterformular angelegt wird, wenn das Hauptformular noch keinen Datensatz enth&auml;lt.<\/p>\n<p>Ein Weg ist, die Eigenschaft <b>Eingabe erforderlich <\/b>des Feldes <b>KategorieID <\/b>der Tabelle <b>tblProdukte <\/b>auf <b>Ja <\/b>einzustellen. Das erledigen wir wie in Bild 9 im Entwurf der Tabelle <b>tblProdukte<\/b>.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_06\/pic_1463_011.png\" alt=\"Verhindern von Datens&auml;tzen ohne Fremdschl&uuml;sselwert\" width=\"599,559\" height=\"413,5237\" \/><\/p>\n<p>[<\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 9: Verhindern von Datens&auml;tzen ohne Fremdschl&uuml;sselwert<\/span><\/b><\/p>\n<p>Nun speichern und schlie&szlig;en wir die Tabelle und &ouml;ffnen das Formular <b>frmKategorienProdukte <\/b>erneut. Hier wechseln wir nun wieder direkt ins Unterformular, w&auml;hrend das Hauptformular einen neuen, leeren Datensatz anzeigt.<\/p>\n<p>Sobald wir hier das erste Zeichen in eines der Felder eintippen und somit den Datensatz im Unterformular in den Bearbeitungszustand versetzen, erscheint die Meldung aus Bild 10.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_06\/pic_1463_010.png\" alt=\"Fehler beim Anlegen eines Produkt-Datensatzes ohne erforderlichen Wert im Feld KategorieID\" width=\"599,559\" height=\"382,5107\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 10: Fehler beim Anlegen eines Produkt-Datensatzes ohne erforderlichen Wert im Feld KategorieID<\/span><\/b><\/p>\n<p>Wir k&ouml;nnen dieser Meldung zwar nun folgen und einen Eintrag im Feld <b>KategorieID <\/b>ausw&auml;hlen. Aber erstens zeigen wir diese Feld hier nur an, um zu sehen, wann und ob die Beziehung &uuml;ber das Fremdschl&uuml;sselfeld hergestellt wird und zweitens wollen wir dem Benutzer nicht eine solche Meldung pr&auml;sentieren.<\/p>\n<p>Wir k&ouml;nnten an dieser Stelle noch weitergehen und diesen Fehler abfangen. Das ginge &uuml;ber das Ereignis <b>Bei Fehler <\/b>des Unterformulars, wo wir pr&uuml;fen k&ouml;nnen, welcher Fehler aufgetreten ist und diesen Fehler entsprechend behandeln. Allerdings ist dieser Weg relativ aufwendig, daher schauen wir uns eine einfachere Alternative an.<\/p>\n<h2>Zugriff auf das Unterformular ohne Datensatz im Hauptformular verwehren<\/h2>\n<p>Dabei wollen wir verhindern, dass der Benutzer &uuml;berhaupt auf das Unterformular zugreifen kann, wenn das Hauptformular noch keinen Datensatz aufweist. Das k&ouml;nnen wir mit einer sehr einfachen Ma&szlig;nahme erreichen.<\/p>\n<p>Dazu hinterlegen wir eine Ereignisprozedur f&uuml;r die Ereigniseigenschaft <b>Beim Hingehen <\/b>des Unterformular-Steuerelements (nicht des Unterformulars selbst). Hier w&auml;hlen wir den Wert <b>[Ereignisprozedur] <\/b>aus und klicken auf die Schaltfl&auml;che mit den drei Punkten (siehe Bild 11).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_06\/pic_1463_009.png\" alt=\"Anlegen einer Prozedur, die beim Hingehen zum Unterformular ausgel&ouml;st wird\" width=\"599,559\" height=\"394,7173\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 11: Anlegen einer Prozedur, die beim Hingehen zum Unterformular ausgel&ouml;st wird<\/span><\/b><\/p>\n<p>Die nun im VBA-Editor angelegte Ereignisprozedur f&uuml;llen wir mit den Zeilen aus Bild 12. Diese pr&uuml;ft, ob das Feld <b>KategorieID <\/b>des Hauptformulars <b>Null <\/b>ist. Ist das der Fall, wurde im Hauptformular noch kein Datensatz angelegt. Dann soll die Anwendung eine Meldung anzeigen, die ihn darauf hinweist, dass er zun&auml;chst die Daten im Hauptformular erg&auml;nzen soll.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_06\/pic_1463_012.png\" alt=\"Prozedur, die beim Hingehen zum Unterformular ausgel&ouml;st wird.\" width=\"700\" height=\"281,097\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 12: Prozedur, die beim Hingehen zum Unterformular ausgel&ouml;st wird.<\/span><\/b><\/p>\n<p>Und damit der Fokus nicht doch noch auf einem Steuerelement im Unterformular landet, setzen wir diesen mit der <b>SetFocus<\/b>-Methode auf das Steuerelement zur Eingabe des Kategorienamens.<\/p>\n<p>Dies ist die einfachste Methode, um zu verhindern, dass der Benutzer Daten in das Unterformular eingibt, ohne dass ein Datensatz im Hauptformular existiert.<\/p>\n<h2>Alternative: Unterformular deaktivieren, wenn Hauptformular ohne Datensatz<\/h2>\n<p>Eine alternative Methode ist es, das Unterformular-Steuerelement zu deaktivieren und es erst zu aktivieren, wenn im &uuml;bergeordneten Formular ein Datensatz vorliegt. Wir haben dies einmal in einer Kopie des Hauptformulars namens <b>frmKategorienProdukte_Enable <\/b>demonstriert. Diesem Formular haben wir f&uuml;r die Ereignisprozedur <b>Beim Anzeigen<\/b>, die immer beim Anzeigen eines Datensatzes ausgel&ouml;st wird, die folgende Prozedur hinterlegt:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Form_Current()\r\n     <span style=\"color:blue;\">If <\/span>IsNull(Me!KategorieID)<span style=\"color:blue;\"> Then<\/span>\r\n         Me!sfmKategorienProdukte.Enabled = <span style=\"color:blue;\">False<\/span>\r\n     <span style=\"color:blue;\">Else<\/span>\r\n         Me!sfmKategorienProdukte.Enabled = <span style=\"color:blue;\">True<\/span>\r\n     <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Dies sorgt daf&uuml;r, dass das Unterformular-Steuerelement f&uuml;r einen neuen, leeren Datensatz zun&auml;chst deaktiviert wird und f&uuml;r alle anderen Datens&auml;tze aktiviert wird. Beachten Sie, dass wir explizit das Unterformular-Steuerelement deaktivieren, also das Steuerelement, indem das eigentliche Unterformular enthalten ist. Das dort enthaltene Unterformular k&ouml;nnen wir nicht deaktivieren. <\/p>\n<p>Allerdings wird das Unterformular-Steuerelement nicht aktiviert, wenn der Benutzer mit der Bearbeitung eines Datensatzes begonnen hat &#8211; was eigentlich der Fall sein sollte, denn ab jetzt k&ouml;nnen wir theoretisch verkn&uuml;pfte Datens&auml;tze im Unterformular hinzuf&uuml;gen.<\/p>\n<p>F&uuml;r das Aktivieren ben&ouml;tigen wir eine weitere Ereigniseigenschaft namens <b>Bei Ge&auml;ndert<\/b>. Diese wird immer ausgel&ouml;st, wenn ein neuer, leerer Datensatz oder ein anderer, seit dem Anzeigen noch nicht bearbeiteter Datensatz, zum ersten Mal ge&auml;ndert wird. Das ist zum Beispiel beim Eingeben des ersten Zeichens in ein Textfeld der Fall. In der Formularansicht erkennt man an dem Stift-Symbol im Datensatzmarkierer (siehe Bild 13), dass dieses Ereignis ausgel&ouml;st wurde. F&uuml;r die entsprechende Ereignisprozedur brauchen wir nur eine einzige Anweisung zu hinterlegen &#8211; diese aktiviert das Unterformular-Steuerelement:<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_06\/pic_1463_013.png\" alt=\"Hier wurde soeben das Ereignis Bei Ge&auml;ndert ausgel&ouml;st.\" width=\"424,5589\" height=\"223,7025\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 13: Hier wurde soeben das Ereignis Bei Ge&auml;ndert ausgel&ouml;st.<\/span><\/b><\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Form_Dirty(Cancel<span style=\"color:blue;\"> As Integer<\/span>)\r\n     Me!sfmKategorienProdukte.Enabled = <span style=\"color:blue;\">True<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<h2>Unterformular wieder deaktivieren<\/h2>\n<p>Es gibt auch noch einen Fall, indem wir das Unterformular wieder deaktivieren m&uuml;ssen. Dieser tritt ein, wenn der Benutzer die Bearbeitung des neuen, leeren Datensatzes vor dem Speichern abbricht &#8211; in dem er zum Beispiel die <b>Escape<\/b>-Taste dr&uuml;ckt. Diese muss er dazu ein oder zwei Mal bet&auml;tigen: Wenn er nur Daten in ein Steuerelement eingegeben hat, f&uuml;hrt das einmalige Bet&auml;tigen zum Verwerfen der Eingabe in das Steuerelement und zum Verlassen des Bearbeiten-Modus.<\/p>\n<p>Hat er schon mehrere Steuerelemente bearbeitet, f&uuml;hrt das erste Bet&auml;tigen der <b>Escape<\/b>-Taste zum Verwerfen der &Auml;nderung im aktuellen Steuerelement, das zweite zum Verwerfen aller &uuml;brigen &Auml;nderungen und zum Verlassen des Bearbeiten-Modus.<\/p>\n<p>Diesen Modus k&ouml;nnen wir &uuml;brigens mit der Eigenschaft <b>Dirty <\/b>des Formulars abrufen (<b>Me.Dirty<\/b>). Diese liefert unmittelbar nach dem Verlassen der Ereignisprozedur <b>Form_Dirty <\/b>den Wert <b>True <\/b>und nach dem Verwerfen der &Auml;nderungen mit der <b>Escape<\/b>-Taste wieder den Wert <b>False<\/b>.<\/p>\n<p>In der <b>Form_Dirty<\/b>-Prozedur ist der Wert noch <b>False<\/b>. Warum? Weil wir das Bearbeiten des Datensatzes in der Prozedur <b>Form_Dirty <\/b>durch Setzen des <b>Cancel<\/b>-Parameters noch abbrechen k&ouml;nnen.<\/p>\n<p>Wie aber k&ouml;nnen wir das Unterformular wieder sperren, wenn der Benutzer die <b>Escape<\/b>-Taste f&uuml;r einen neuen, bearbeiteten und ungespeicherten Datensatz bet&auml;tigt? Dazu k&ouml;nnen wir theoretisch das Ereignis verwenden, das ausgel&ouml;st wird, wenn wir die <b>Escape<\/b>-Taste bet&auml;tigen. Dieses hei&szlig;t <b>Bei R&uuml;ckg&auml;ngig <\/b>und die Ereignisprozedur ist wie folgt aufgebaut:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Form_Undo(Cancel<span style=\"color:blue;\"> As Integer<\/span>)\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Hier k&ouml;nnen wir nun allerdings nicht einfach die Anweisung zum Deaktivieren des Unterformular-Steuerelements einbauen. Es kann n&auml;mlich auch sein, dass der Benutzer einen bereits gespeicherten Datensatz &auml;ndert und die &Auml;nderungen mit <b>Escape <\/b>verwirft. Dann soll das Unterformular-Steuerelement aktiviert bleiben, denn es existiert ja ein Datensatz im Hauptformular. Also probieren wir im ersten Ansatz Folgendes aus:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Form_Undo(Cancel<span style=\"color:blue;\"> As Integer<\/span>)\r\n     <span style=\"color:blue;\">If <\/span>IsNull(Me!KategorieID)<span style=\"color:blue;\"> Then<\/span>\r\n         Me!sfmKategorienProdukte.Enabled = <span style=\"color:blue;\">False<\/span>\r\n     <span style=\"color:blue;\">Else<\/span>\r\n         Me!sfmKategorienProdukte.Enabled = <span style=\"color:blue;\">True<\/span>\r\n     <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Hier pr&uuml;fen wir, ob es eine <b>KategorieID <\/b>gibt. Liegt eine vor, haben wir einen bestehenden Datensatz und k&ouml;nnen die Aktivierung beibehalten. Falls nicht, deaktivieren wir das Unterformular-Steuerelement wieder. Allerdings ist es beim Ereignis <b>Form_Undo <\/b>wie bei <b>Form_Dirty<\/b>: Es enth&auml;lt einen <b>Cancel<\/b>-Parameter und damit k&ouml;nnten wir das Verwerfen der &Auml;nderungen noch verhindern.<\/p>\n<p>Die &Auml;nderung ist also in <b>Form_Undo <\/b>noch nicht verworfen, sondern erst nach dem Beenden der Prozedur. Deshalb wird auch der beim Start der Bearbeitung hinzugef&uuml;gte Wert f&uuml;r <b>KategorieID <\/b>erst nach dem Ende von <b>Form_Undo <\/b>wieder entfernt. Wir ben&ouml;tigen also einen Workaround.<\/p>\n<h2>Zeitliche Steuerung zum Deaktivieren des Unterformular-Steuerelements<\/h2>\n<p>Wir wissen, dass der Prim&auml;rschl&uuml;sselwert eines neu hinzugef&uuml;gten Datensatzes erst nach dem Ende von <b>Form_Undo <\/b>wieder entfernt wird. Also brauchen wir eine Prozedur, die kurz nach dem Ende von <b>Form_Undo <\/b>ausgel&ouml;st wird.<\/p>\n<p>Standardm&auml;&szlig;ig gibt es diese aber nicht, sodass wir das Ereignis <b>Bei Zeitgeber <\/b>nutzen. Wir starten den Zeitgeber am Ende von <b>Form_Undo <\/b>und pr&uuml;fen in der dadurch ausgel&ouml;sten Prozedur, ob der Prim&auml;rschl&uuml;sselwert leer ist.<\/p>\n<p>Als Erstes setzen wir den Timer auf 50 Millisekunden &#8211; das sollte reichen:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Form_Undo(Cancel<span style=\"color:blue;\"> As Integer<\/span>)\r\n     Me.TimerInterval = 50\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Die dann auszuf&uuml;hrende Prozedur <b>Form_Timer <\/b>definieren wir wie folgt:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Form_Timer()\r\n     Me.TimerInterval = 0\r\n     <span style=\"color:blue;\">If <\/span>IsNull(Me!KategorieID)<span style=\"color:blue;\"> Then<\/span>\r\n         Me!sfmKategorienProdukte.Enabled = <span style=\"color:blue;\">False<\/span>\r\n     <span style=\"color:blue;\">Else<\/span>\r\n         Me!sfmKategorienProdukte.Enabled = <span style=\"color:blue;\">True<\/span>\r\n     <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Als Erstes stellen wir die Eigenschaft <b>TimerInterval <\/b>auf <b>0 <\/b>ein, damit die Prozedur <b>Form_Timer <\/b>nicht direkt nochmal aufgerufen wird.<\/p>\n<p>Danach pr&uuml;fen wir, ob <b>KategorieID <\/b>leer ist. Ist das der Fall, haben wir es wohl mit dem Verwerfen eines frisch angelegten Datensatzes zu tun und m&uuml;ssen das Unterformular-Steuerelement wieder deaktivieren. Das tun wir hier. Anderenfalls aktivieren wir es. <\/p>\n<h2>Deaktivierung des Unterformulars optisch hervorheben<\/h2>\n<p>Dadurch, dass wir nur das Unterformular-Steuerelement deaktivieren, erhalten wir kein besonderes visuelles Feedback &uuml;ber die Deaktivierung. Wir erkennen dies nur am deaktivierten Bezeichnungsfeld. Um dem Benutzer vergebliche Versuche zu ersparen, das Unterformular zu verwenden, k&ouml;nnten wir die Sperrung noch ein wenig offensichtlicher machen. Das ist allerdings nicht ganz trivial, zumindest wenn das Unterformular in der Datenblattansicht angezeigt wird. Wir k&ouml;nnen dann zwar auch die Spalten der Datenblattansicht deaktivieren, aber dies wirkt sich nicht auf die Darstellung aus.<\/p>\n<p>Wir k&ouml;nnen jedoch den Text des Bezeichnungsfeldes des Unterformular-Steuerelements anpassen, das wir zun&auml;chst mit <b>lblUnterformular <\/b>bezeichnen. Au&szlig;erdem machen wir es so breit, dass auch l&auml;ngere Texte angezeigt werden k&ouml;nnen.<\/p>\n<p>An allen Stellen im bisher vorgestellten Code, wo wir das Unterformular-Steuerelement deaktivieren, f&uuml;gen wir nun wie in Listing 1 die Zuweisung des Textes <b>Produkte (Eingabe erst nach Angabe oder Auswahl einer Kategorie m&ouml;glich): <\/b>ein. An allen Stellen, wo das Unterformular aktiviert wird, stellen wir es auf den einfachen Text <b>Produkte: <\/b>ein. Damit erhalten wir immer einen passenden Text, an dem sich der Benutzer orientieren kann (siehe Bild 14).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_06\/pic_1463_014.png\" alt=\"Anzeige eines Textes, wenn das Unterformular gesperrt ist\" width=\"524,559\" height=\"289,8632\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 14: Anzeige eines Textes, wenn das Unterformular gesperrt ist<\/span><\/b><\/p>\n<h2>Zusammenfassung und Ausblick<\/h2>\n<p>Mit den hier vorgestellten Techniken kann man sich den &Auml;rger ersparen, der durch Unterformular-Eintr&auml;ge ohne Bezug zu einem Hauptformular-Datensatz entsteht. Eine Erweiterung ist n&ouml;tig, wenn die Daten im Hauptformular noch validiert werden sollen, bevor der Benutzer den Datensatz speichern kann &#8211; was automatisch passiert, wenn er zum Unterformular wechselt. Dies wollen wir verhindern, indem wir das Verwenden des Unterformulars ebenfalls erst freigeben, wenn der Datensatz im Hauptformular validiert ist. Dies beschreiben wir in einem weiteren Beitrag namens <b>Unterformular erst nach Validierung freigeben <\/b>(<b>www.access-im-unternehmen.de\/1464<\/b>).<\/p>\n<h2>Downloads zu diesem Beitrag<\/h2>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>DateneingabeInHauptUndUnterformular.accdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/7CDEA0EA-0DCB-4B7D-A446-C56CA89EFF03\/aiu_1463.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Wenn man Daten in die Tabellen einer 1:n-Beziehung eingeben m&ouml;chte, nutzt man in der Regel ein Haupt- und ein Unterformular. Das Hauptformular nimmt die Daten der Mastertabelle auf, das Unterformular die Daten der Detailtabelle. Wenn man nun keine weiteren Vorsichtsma&szlig;nahmen trifft, kann der Benutzer Daten in das Unterformular eingeben, ohne dass das Hauptformular einen Datensatz anzeigt. Damit erzeugt er Datens&auml;tze in der Detailtabelle, die mit keinem Datensatz der Mastertabelle verkn&uuml;pft sind. Das ist aus mehreren Gr&uuml;nden schlecht &#8211; diese schauen wir uns an und zeigen, wie wir das Problem beheben k&ouml;nnen.<\/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":[662023,66062023,44000023],"tags":[],"class_list":["post-55001463","post","type-post","status-publish","format-standard","hentry","category-662023","category-66062023","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>Dateneingabe in Haupt- und Unterformular - 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\/Dateneingabe_in_Haupt_und_Unterformular\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Dateneingabe in Haupt- und Unterformular\" \/>\n<meta property=\"og:description\" content=\"Wenn man Daten in die Tabellen einer 1:n-Beziehung eingeben m&ouml;chte, nutzt man in der Regel ein Haupt- und ein Unterformular. Das Hauptformular nimmt die Daten der Mastertabelle auf, das Unterformular die Daten der Detailtabelle. Wenn man nun keine weiteren Vorsichtsma&szlig;nahmen trifft, kann der Benutzer Daten in das Unterformular eingeben, ohne dass das Hauptformular einen Datensatz anzeigt. Damit erzeugt er Datens&auml;tze in der Detailtabelle, die mit keinem Datensatz der Mastertabelle verkn&uuml;pft sind. Das ist aus mehreren Gr&uuml;nden schlecht - diese schauen wir uns an und zeigen, wie wir das Problem beheben k&ouml;nnen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Dateneingabe_in_Haupt_und_Unterformular\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2023-11-07T11:45:14+00:00\" \/>\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=\"13\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dateneingabe_in_Haupt_und_Unterformular\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dateneingabe_in_Haupt_und_Unterformular\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Dateneingabe in Haupt- und Unterformular\",\"datePublished\":\"2023-11-07T11:45:14+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dateneingabe_in_Haupt_und_Unterformular\\\/\"},\"wordCount\":2514,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dateneingabe_in_Haupt_und_Unterformular\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg02.met.vgwort.de\\\/na\\\/49dae6cf448744a1a01205733cc6158e\",\"articleSection\":[\"2023\",\"6\\\/2023\",\"Mit Formularen arbeiten\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Dateneingabe_in_Haupt_und_Unterformular\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dateneingabe_in_Haupt_und_Unterformular\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dateneingabe_in_Haupt_und_Unterformular\\\/\",\"name\":\"Dateneingabe in Haupt- und Unterformular - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dateneingabe_in_Haupt_und_Unterformular\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dateneingabe_in_Haupt_und_Unterformular\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg02.met.vgwort.de\\\/na\\\/49dae6cf448744a1a01205733cc6158e\",\"datePublished\":\"2023-11-07T11:45:14+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dateneingabe_in_Haupt_und_Unterformular\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Dateneingabe_in_Haupt_und_Unterformular\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dateneingabe_in_Haupt_und_Unterformular\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg02.met.vgwort.de\\\/na\\\/49dae6cf448744a1a01205733cc6158e\",\"contentUrl\":\"http:\\\/\\\/vg02.met.vgwort.de\\\/na\\\/49dae6cf448744a1a01205733cc6158e\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Dateneingabe_in_Haupt_und_Unterformular\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Dateneingabe in Haupt- und Unterformular\"}]},{\"@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":"Dateneingabe in Haupt- und Unterformular - 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\/Dateneingabe_in_Haupt_und_Unterformular\/","og_locale":"de_DE","og_type":"article","og_title":"Dateneingabe in Haupt- und Unterformular","og_description":"Wenn man Daten in die Tabellen einer 1:n-Beziehung eingeben m&ouml;chte, nutzt man in der Regel ein Haupt- und ein Unterformular. Das Hauptformular nimmt die Daten der Mastertabelle auf, das Unterformular die Daten der Detailtabelle. Wenn man nun keine weiteren Vorsichtsma&szlig;nahmen trifft, kann der Benutzer Daten in das Unterformular eingeben, ohne dass das Hauptformular einen Datensatz anzeigt. Damit erzeugt er Datens&auml;tze in der Detailtabelle, die mit keinem Datensatz der Mastertabelle verkn&uuml;pft sind. Das ist aus mehreren Gr&uuml;nden schlecht - diese schauen wir uns an und zeigen, wie wir das Problem beheben k&ouml;nnen.","og_url":"https:\/\/access-im-unternehmen.de\/Dateneingabe_in_Haupt_und_Unterformular\/","og_site_name":"Access im Unternehmen","article_published_time":"2023-11-07T11:45:14+00:00","author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"13\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Dateneingabe_in_Haupt_und_Unterformular\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Dateneingabe_in_Haupt_und_Unterformular\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Dateneingabe in Haupt- und Unterformular","datePublished":"2023-11-07T11:45:14+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Dateneingabe_in_Haupt_und_Unterformular\/"},"wordCount":2514,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Dateneingabe_in_Haupt_und_Unterformular\/#primaryimage"},"thumbnailUrl":"http:\/\/vg02.met.vgwort.de\/na\/49dae6cf448744a1a01205733cc6158e","articleSection":["2023","6\/2023","Mit Formularen arbeiten"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Dateneingabe_in_Haupt_und_Unterformular\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Dateneingabe_in_Haupt_und_Unterformular\/","url":"https:\/\/access-im-unternehmen.de\/Dateneingabe_in_Haupt_und_Unterformular\/","name":"Dateneingabe in Haupt- und Unterformular - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Dateneingabe_in_Haupt_und_Unterformular\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Dateneingabe_in_Haupt_und_Unterformular\/#primaryimage"},"thumbnailUrl":"http:\/\/vg02.met.vgwort.de\/na\/49dae6cf448744a1a01205733cc6158e","datePublished":"2023-11-07T11:45:14+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Dateneingabe_in_Haupt_und_Unterformular\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Dateneingabe_in_Haupt_und_Unterformular\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Dateneingabe_in_Haupt_und_Unterformular\/#primaryimage","url":"http:\/\/vg02.met.vgwort.de\/na\/49dae6cf448744a1a01205733cc6158e","contentUrl":"http:\/\/vg02.met.vgwort.de\/na\/49dae6cf448744a1a01205733cc6158e"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Dateneingabe_in_Haupt_und_Unterformular\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Dateneingabe in Haupt- und Unterformular"}]},{"@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\/55001463","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=55001463"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001463\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55001463"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55001463"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55001463"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}