{"id":55000606,"date":"2008-06-01T00:00:00","date_gmt":"2021-02-11T21:21:08","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=606"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Unterformulare_im_Gleichschritt","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Unterformulare_im_Gleichschritt\/","title":{"rendered":"Unterformulare im Gleichschritt"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg07.met.vgwort.de\/na\/517beaecc47546b6a6c91b88981709ab\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Access ist bekannt daf&uuml;r, dass man Daten schnell in gew&uuml;nschter Weise zur Bearbeitung in Formularen anzeigen kann &#8211; zumindest f&uuml;r &uuml;bliche Szenarien. Entwickler sch&auml;tzen Access aber auch deshalb, weil sich auch au&szlig;ergew&ouml;hnliche Anforderungen damit realisieren lassen. In diesem Beitrag geht es um die Synchronisierung zweier Unterformulare.<\/b><\/p>\n<p>Die Anforderung f&uuml;r diesen Beitrag stammt aus einem anderen Beitrag, n&auml;mlich <b>Mehrsprachige Anwendungen <\/b>(Shortlink 611). Dort sollen Benutzer in einem Formular verschiedene &Uuml;bersetzungen der Beschriftungen von Steuerelementen eintragen, um die Anwendung mehrsprachig zu machen.<\/p>\n<p>Die Daten stammen aus einer einzigen Tabelle, die unter anderem die ID der Sprache und des Textes sowie die verschiedenen &Uuml;bersetzungen beinhaltet. Wie immer unter Access gibt es verschiedene Ans&auml;tze, um den Originaltext und dessen &Uuml;bersetzung so anzuzeigen, dass der Benutzer diese m&ouml;glichst komfortabel editieren kann. So k&ouml;nnte man etwa die Originaltexte in einem Listenfeld anzeigen, aus dem der Benutzer den Text ausw&auml;hlt, den er &uuml;bersetzen m&ouml;chte, und diesen Text in einem Textfeld zur Bearbeitung bereitstellen. Diese L&ouml;sung programmiert ein durchschnittlich begabter Access-Programmierer wohl in maximal einer halben Stunde.<\/p>\n<p>Manchmal juckt dem Entwickler aber das Fell und er w&auml;hlt einen Weg, der auf den ersten Blick nicht viel aufwendiger erscheint, aber erheblich ergonomischer wirkt. Dabei soll auf der linken Seite des Formulars ein Unterformular in der Datenblattansicht die Originaltexte und ein weiteres auf der rechten Seite die &Uuml;bersetzungen in der jeweils ausgew&auml;hlten Sprache anzeigen.<\/p>\n<p>Das ist gegen&uuml;ber dem ersten Ansatz sicher ergonomischer, weil der Benutzer nicht f&uuml;r jede neue &Uuml;bersetzung erst den Originaltext markieren muss, um den zu &uuml;bersetzenden Text angezeigt zu bekommen. Stattdessen sieht er links eine Reihe Originaltexte und rechts die &Uuml;bersetzungen, wobei er die &Uuml;bersetzungen einfach von oben nach unten oder auch willk&uuml;rlich abarbeiten kann. So weit, so gut: Zwei Unterformulare in einem Formular anzulegen, die jeweils andere Daten der gleichen Tabelle anzeigen (je einmal f&uuml;r jede Sprache), stellt keine echte Herausforderung dar. Daf&uuml;r brauchen Sie sogar nur ein einziges Formular, das Sie zweimal als Unterformular in ein Hauptformular integrieren.<\/p>\n<p>Unpraktisch ist nur, dass man irgendwann alle aktuell angezeigten Texte &uuml;bersetzt hat und die bis dahin nicht sichtbaren Texte nach oben scrollen muss &#8211; und das immer gleichzeitig f&uuml;r zwei Unterformulare, damit die entsprechenden Texte auch nebeneinanderliegen. Hier setzt die L&ouml;sung dieses Beitrags an: Sie zeigt, wie Sie die beiden Unterformulare synchron scrollen, egal, ob dies mit der Tastatur, dem Mausrad oder mit den Bildlaufleisten geschieht.<\/p>\n<p><b>Versuchsaufbau<\/b><\/p>\n<p>Als Grundlage dient eine Beispieltabelle namens <b>tblBeispiele <\/b>mit den zwei Feldern <b>BeispielID <\/b>und <b>Beispiel<\/b>. Ein Hauptformular namens <b>frmHauptformular <\/b>besitzt nur zwei Unterformularsteuerelemente <b>sfm1 <\/b>und <b>sfm2<\/b>, die jeweils das Unterformular <b>sfmUnterformular <\/b>enthalten (siehe Bild 1).<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2008_02\/SynchroneUnterformulare-web-images\/pic001_opt.jpeg\" alt=\"pic001.tif\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 1: Hauptformular mit zwei synchronisierten Unterformularen<\/span><\/b><\/p>\n<p>Dieses Unterformular statten Sie mit der Tabelle <b>tblBeispiele <\/b>als Datenherkunft aus, wobei es beide Felder dieser Tabelle in der Datenblattansicht anzeigen soll (zur Vereinfachung sollen links und rechts jeweils die gleichen Datens&auml;tze ein und derselben Tabelle angezeigt werden).<\/p>\n<p>Das Unterformular ziehen Sie einfach zweimal vom Datenbankfenster in das im Entwurf ge&ouml;ffnete Hauptformular und nennen dann das erste Unterformularsteuerelement <b>sfm1<\/b> und das zweite <b>sfm2<\/b>. Achtung, es gibt einen Unterschied zwischen Unterformularsteuerelement und dem darin enthaltenen Formular! Selbstverst&auml;ndlich m&uuml;ssen die Unterformularsteuerelemente verschiedene Namen haben, k&ouml;nnen aber das gleiche Unterformular enthalten (nachzupr&uuml;fen in der Eigenschaft <b>Herkunftsobjekt <\/b>auf der Registerseite <b>Daten <\/b>der Steuerelementeigenschaften).<\/p>\n<p><b>Gegenseitige Abh&auml;ngigkeit<\/b><\/p>\n<p>Die besondere W&uuml;rze dieses Beispiels ist die Verwendung des gleichen Formulars in beiden Unterformularsteuerelementen. Mal ganz ohne den zugeh&ouml;rigen Code zu beschreiben soll ja bereits beim Wechseln des Datensatzes Folgendes passieren: Unterformular 1 wechselt vom untersten Datensatz zum n&auml;chsten Datensatz, der ja gleichzeitig der erste nicht mehr sichtbare Datensatz ist. In diesem Fall soll das Gleiche in Unterformular 2 geschehen &#8211; die Datens&auml;tze sollen um eine Position nach oben verschoben werden. Dazu sind verschiedene Aktionen notwendig, die unter anderem das <b>Beim Anzeigen<\/b>-Ereignis von Formular 2 ausl&ouml;sen. Auch das Scrollen von Formular 1 kann prinzipiell (au&szlig;er per Timer) nur durch das <b>Beim Anzeigen<\/b>-Ereignis abgefangen werden. Wenn man nun nicht pr&uuml;ft, ob das <b>Beim Anzeigen<\/b>-Ereignis nicht gerade durch das Scrollen des anderen Formulars ausgel&ouml;st wurde, und ein endloses, wechselseitiges Aufrufen vermeiden m&ouml;chte, muss man dies abfangen.<\/p>\n<p>Wenn nun das erste Unterformular dem zweiten auf irgendeine Weise mitteilen m&ouml;chte, dass es gerade durch einen Scrollvorgang einen Datensatzwechsel ausgel&ouml;st hat, muss das erste Unterformular ja erstmal wissen, dass es &uuml;berhaupt das erste Unterformular ist &#8211; immerhin unterscheiden sich die beiden Unterformulare ja nur dadurch, dass das erste in einem Unterformularsteuerelement etwa namens <b>sfm1 <\/b>und das zweite in einem anderen namens <b>sfm2 <\/b>untergebracht ist. Dummerweise kann man aber nicht durch einen Verweis wie <b>Me.Parent <\/b>auf das Unterformularsteuerelement zugreifen, in dem ein Unterformular steckt, sondern erh&auml;lt mit <b>Me.Parent <\/b>direkt einen Verweis auf das Formular, in dem sich das Unterformular befindet.<\/p>\n<p><!--30percent--><\/p>\n<p><b>Selbstidentifikation<\/b><\/p>\n<p>Will ein Unterformular nun erfahren, ob es das erste oder zweite Unterformular ist, ben&ouml;tigt es eine kleine Hilfsfunktion:<\/p>\n<pre>Private Function GetMe() As String\r\n    Dim ctl As Control\r\n    For Each ctl In Parent.Controls\r\n        If ctl.ControlType = acSubform Then\r\n            If ctl.Form.hWnd = Me.hWnd Then\r\n                GetMe = ctl.Name\r\n                Exit For\r\n            End If\r\n        End If\r\n    Next ctl\r\nEnd Function<\/pre>\n<p>Diese durchl&auml;uft alle Steuerelemente des &uuml;bergeordneten Formulars und pr&uuml;ft zun&auml;chst, ob es sich dabei um ein Unterformularsteuerelement handelt. Falls ja, zieht es die Eigenschaft <b>hWnd <\/b>heran, um zu ermitteln, ob es selbst oder ein anderes Unterformular in diesem Unterformular steckt. <b>hWnd <\/b>liefert ein eindeutiges Fenster-Handle beispielsweise f&uuml;r Formulare. <b>GetMe <\/b>liefert schlie&szlig;lich den Namen des Unterformularsteuerelements zur&uuml;ck, in dem sich das Unterformular befindet. <\/p>\n<p>Eine zweite Funktion namens <b>GetYou<\/b> sieht &auml;hnlich aus, liefert aber den Namen des ersten Unterformularsteuerelements, das nicht dem Unterformularsteuerelement entspricht, in dem das aufrufende Unterformular steckt:<\/p>\n<pre>Private Function GetYou() As String\r\n    Dim ctl As Control\r\n    For Each ctl In Parent.Controls\r\n        If ctl.ControlType = acSubform Then\r\n            If ctl.Form.Name = Me.Name And _\r\n            ctl.Form.hWnd &lt;&gt; Me.hWnd Then\r\n            GetYou = ctl.Name\r\n            Exit For\r\n        End If\r\n    End If\r\nNext ctl\r\nEnd Function<\/pre>\n<p>Diese beiden Funktionen arbeiten nicht wie erwartet, wenn das Hauptformular mehr als die zwei betroffenen Unterformulare enth&auml;lt. In diesem Fall m&uuml;ssten Sie noch eine weitere Pr&uuml;fung etwa des Namens der Unterformularsteuerelemente hinzuf&uuml;gen.<\/p>\n<p>Scrollen mit Cursor-, Tab- und Eingabetaste<\/p>\n<p>Die Navigation in den Datens&auml;tzen ist durch verschiedene Tasten m&ouml;glich. Das Abfragen der entsprechenden Tastenanschl&auml;ge ist nicht notwendig, da ein &auml;ndern der Position ohnehin nur beim Wechseln des Datensatzes erfolgt, den Sie mit dem Ereignis <b>Beim Anzeigen <\/b>des Unterformulars abfangen k&ouml;nnen. Listing 1 zeigt den Code, den das Unterformular enthalten muss, damit es beim Wechseln des Datensatzes und damit verbundener Scroll-Vorg&auml;nge ein Mitscrollen des jeweils anderen Unterformulars bewirkt.<\/p>\n<p class=\"kastentabelleheader\">Listing 1: Die Ereignisprozedur, die beim Anzeigen eines Datensatzes und somit bei jedem Datensatzwechsel ausgel&ouml;st wird, sorgt f&uuml;r das gegenseitige Aktualisieren der Scrollposition der Unterformulare.<\/p>\n<pre>Private Sub Form_Current()\r\n    On Error Resume Next\r\n    If Not (Me.SelTop = Me.Parent(GetYou).Form.SelTop) Then\r\n        If Me.Parent.strActiveForm = GetYou Then\r\n            Exit Sub\r\n        Else\r\n            With Me.Parent(GetYou).Form\r\n            .Painting = False\r\n            .SelTop = .Recordset.RecordCount\r\n            .SelTop = Me.SelTop - Me.CurrentSectionTop \/ intHeight + 1\r\n            .SelTop = Me.SelTop\r\n            .Painting = True\r\n            End With\r\n        End If\r\n    End If\r\n    End Sub<\/pre>\n<p><b>Unterformular vor Hauptformular<\/b><\/p>\n<p>Diese Routine ber&uuml;cksichtigt den Umstand, dass Access beim &Ouml;ffnen eines Hauptformulars mit Unterformular(en) zun&auml;chst die Unterformulare, und dann das Hauptformular &ouml;ffnet und somit auch die entsprechenden Ereignisse wie <b>Beim Laden<\/b>, <b>Beim &Ouml;ffnen <\/b>oder <b>Beim Anzeigen <\/b>in der entsprechenden Reihenfolge aufruft.<\/p>\n<p>Das Abrufen des Unterformularsteuerelements eines der Unterformulare k&ouml;nnte daher zu fr&uuml;h kommen, also bevor das Hauptformular und damit das Unterformularsteuerelement &uuml;berhaupt geladen ist. Deshalb best&uuml;cken Sie die Ereignisprozedur aus Listing 1, die direkt nach dem &Ouml;ffnen der Unterformulare und dann bei jedem Datensatzwechsel ausgel&ouml;st wird, mit einer <b>On Error Resume Next<\/b>-Anweisung: eventuelle Zugriffe auf noch nicht bereite Steuerelemente l&ouml;sen dann keinen Fehler aus.<\/p>\n<p>Die Routine aus Listing 1 macht Folgendes: Sie pr&uuml;ft zun&auml;chst, ob beide Formulare aktuell den gleichen Datensatz als ersten im sichtbaren Bereich anzeigen. Falls ja, geht es weiter: Die Routine pr&uuml;ft eine Eigenschaft des Hauptformulars namens <b>strActiveForm <\/b>daraufhin, ob sie den Namen des anderen Unterformulars enth&auml;lt. Dies ist die Absicherung, um das abwechselnde Ausl&ouml;sen der <b>Form_Current<\/b>-Prozedur zu verhindern. Diese Eigenschaft wird im Hauptformular so deklariert:<\/p>\n<pre>Public strActiveForm As String<\/pre>\n<p>Damit sie jeweils den aktuellen Wert enth&auml;lt, erfolgt die Zuweisung im Ereignis <b>Beim Hingehen<\/b> des jeweiligen Unterformularsteuerelements:<\/p>\n<pre>Private Sub sfm1_Enter()\r\nstrActiveForm = &quot;sfm1&quot;\r\nstrActiveForm1 = &quot;sfm1&quot;\r\nEnd Sub\r\nPrivate Sub sfm2_Enter()\r\nstrActiveForm = &quot;sfm2&quot;\r\nstrActiveForm1 = &quot;sfm2&quot;\r\nEnd Sub<\/pre>\n<p>Ist das andere Unterformular das aktive Unterformular, wurde <b>Form_Current <\/b>dieses Formulars durch das Anpassen vom anderen Formular aus ausgel&ouml;st. In dem Fall bricht die Routine ab.<\/p>\n<p>Anderenfalls erfolgt der Aufruf von <b>Form_Current <\/b>durch ein aktives Verschieben des Datensatzzeigers im aktuellen Unterformular. Dann deaktiviert die Routine zun&auml;chst die grafische Aktualisierung des anderen Unterformulars, um m&ouml;gliches Flackern zu unterdr&uuml;cken, verschiebt den Fokus auf den letzten, dann auf den zuoberst angezeigten und schlie&szlig;lich auf den aktuellen Datensatz. Nach dem Setzen von <b>Painting <\/b>auf <b>True <\/b>und damit der Aktivierung der Formularaktualisierung steht das andere Formular nicht nur auf dem gleichen Datensatz wie dieses Unterformular, sondern zeigt auch noch die Datens&auml;tze auf der gleichen H&ouml;he an.<\/p>\n<p><b>Verschieben durch den Scrollbalken<\/b><\/p>\n<p>Etwas aufwendiger, aber nur, was den Codeumfang angeht, ist das Tracken der Position des Scrollbalkens und das dadurch notwendige Synchronisieren der Unterformulare.<\/p>\n<p>Die wichtigste Information ist, dass es kein Ereignis gibt, das durch &auml;ndern der Position der Bildlaufleiste ausgel&ouml;st wird. Das hei&szlig;t, dass man dessen Position regelm&auml;&szlig;ig abfragen muss, was in einer durch das <b>Bei Zeitgeber<\/b>-Ereignis ausgel&ouml;sten Routine geschieht. Damit dies regelm&auml;&szlig;ig passiert, stellt man die Eigenschaft <b>Zeitgeberintervall <\/b>auf einen passenden Wert ein. Je kleiner der Wert, desto z&uuml;giger passt sich das jeweils andere Unterformular an das aktuelle Unterformular an &#8211; allerdings kostet dies nat&uuml;rlich auch Performance. Eine Abfrage alle 1\/40-Sekunde reichte in Tests aus, was einem Wert von 25<b> <\/b>f&uuml;r die Eigenschaft <b>Zeitgeberintervall <\/b>entspricht.<\/p>\n<p>Nun k&ouml;nnte man sich viel Arbeit machen und per API nicht nur die Position der Bildlaufleiste in einem Unterformular abfragen, sondern auch noch die Position der Bildlaufleiste des anderen Unterformulars per API synchronisieren.<\/p>\n<p>Das w&auml;re aber &uuml;bertrieben, denn alle notwendigen Zeilen zum Synchronisieren der Anzeige der beiden Unterformulare haben wir ja schon zusammen. Also reicht es aus, zu pr&uuml;fen, wann der Benutzer die Bildlaufleiste eines der Unterformulare benutzt, und anschlie&szlig;end die Unterformulare zu synchronisieren. Dazu speichert man einfach jeweils die aktuelle Position in einer Variablen zwischen und vergleicht diese beim n&auml;chsten Aufruf der <b>Timer<\/b>-Ereignisprozedur mit dem Wert f&uuml;r die aktuelle Position (s. Listing 2).<\/p>\n<p class=\"kastentabelleheader\">Listing 2: Auch beim Scrollen mit der Bildlaufleiste sollen die beiden Unterformulare synchronisiert werden, was diese durch das Bei Zeitgeber-Ereignis ausgel&ouml;ste Routine erledigt.<\/p>\n<pre>Private Sub Form_Timer()\r\n    Dim intHeightForm As Integer\r\n    intpos = fGetScrollBarPos(Me)\r\n    If Not intpos = intposalt Then\r\n        If Me.Parent.strActiveForm1 = GetYou Then\r\n            Exit Sub\r\n        Else\r\n            With Me.Parent(GetYou).Form\r\n            .Painting = False\r\n            intHeightForm = Me.Parent(GetYou).Height\r\n            Me.Parent(GetYou).Height = 0\r\n            .SelTop = intpos - 1\r\n            Me.Parent(GetYou).Height = intHeightForm\r\n            .Painting = True\r\n            End With\r\n        End If\r\n    End If\r\n    intposalt = intpos\r\n    End Sub<\/pre>\n<p>Die notwendige API-Funktion hei&szlig;t <b>GetScrollInfo<\/b>. Wie in vielen F&auml;llen kann man auch diese API-Funktion nicht ohne Weiteres nutzen, um sich etwa eine einzige Information zur&uuml;ckgeben zu lassen. Also verwendet man eine Wrapper-Funktion, die noch einige weitere API-Funktionen hinzuzieht, um beispielsweise herauszufinden, ob der Benutzer auch wirklich auf die Bildlaufleiste und nicht etwa auf ein anderes Steuerelement geklickt hat, und l&auml;sst sich von dieser den gesuchten Wert zur&uuml;ckgeben. Die gesamte hierzu ben&ouml;tigte Funktionalit&auml;t steckt im Standardmodul <b>mdlScrollbar<\/b>, der enthaltene Code ist einem Beispiel von Stephen Lebans entnommen (<b>http:\/\/www.lebans.com\/setgetsb.htm<\/b>) und f&uuml;r dieses Beispiel angepasst worden &#8211; so funktioniert der Originalcode etwa nicht mehr mit neueren Access-Versionen, weil die Bildlaufleisten nun einen anderen Fenstertitel als fr&uuml;her tragen.<\/p>\n<p>Der Code der Ereignisprozedur <b>Form_Timer <\/b>enth&auml;lt wider Erwarten im Inneren nicht genau die gleichen Codezeilen wie die Prozedur, die durch das <b>Beim Anzeigen<\/b>-Ereignis des Unterformulars ausgel&ouml;st wird.<\/p>\n<p>Der Grund ist, dass man mit der Tastatur nur bis zum letzten Datensatz navigieren kann, den das Unterformular dann auch so weit wie m&ouml;glich unten anzeigt. Mit dem Scrollbalken kommt man aber weiter runter &#8211; n&auml;mlich so weit, dass das Unterformular nur noch einen neuen, leeren Datensatz anzeigt (siehe Bild 2).<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2008_02\/SynchroneUnterformulare-web-images\/pic002_opt.jpeg\" alt=\"pic002.tif\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 2: Um diese Konstellation nachzubilden, bedarf es besonderer Tricks.<\/span><\/b><\/p>\n<p>Um dies programmatisch in einem Formular nachzubilden, gibt es nur eine M&ouml;glichkeit: Man positioniert den Datensatzzeiger auf dem zuoberst anzuzeigenden Datensatz, verkleinert das Unterformular und vergr&ouml;&szlig;ert es wieder auf die urspr&uuml;ngliche Gr&ouml;&szlig;e. Dies erledigen die Zeilen in der Routine <b>Form_Timer<\/b>.<\/p>\n<table>\n<tbody>\n<tr>\n<td>\n<p class=\"kastentabelleheader\">Im Soforteinsatz<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>Wenn Sie die L&ouml;sung dieses Beitrags in eigenen Anwendungen einsetzen m&ouml;chten, importieren Sie am besten die drei Formulare sowie das Modul <b>mdlScrollbar<\/b> und passen es an Ihre Bed&uuml;rfnisse an &#8211; zum Beispiel durch das Einstellen der Datenherkunft des Unterformulars auf die gew&uuml;nschte Tabelle.<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>SynchroneUnterformulare.mdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/96EF7F9F-E4B5-492B-9C9E-5F9B2B110B25\/aiu_606.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Access ist bekannt daf&uuml;r, dass man Daten schnell in gew&uuml;nschter Weise zur Bearbeitung in Formularen anzeigen kann &#8211; zumindest f&uuml;r &uuml;bliche Szenarien. Entwickler sch&auml;tzen Access aber auch deshalb, weil sich auch au&szlig;ergew&ouml;hnliche Anforderungen damit realisieren lassen. In diesem Beitrag geht es um die Synchronisierung zweier Unterformulare.<\/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":[662008,66032008,44000023],"tags":[],"class_list":["post-55000606","post","type-post","status-publish","format-standard","hentry","category-662008","category-66032008","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>Unterformulare im Gleichschritt - 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\/Unterformulare_im_Gleichschritt\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Unterformulare im Gleichschritt\" \/>\n<meta property=\"og:description\" content=\"Access ist bekannt daf&uuml;r, dass man Daten schnell in gew&uuml;nschter Weise zur Bearbeitung in Formularen anzeigen kann - zumindest f&uuml;r &uuml;bliche Szenarien. Entwickler sch&auml;tzen Access aber auch deshalb, weil sich auch au&szlig;ergew&ouml;hnliche Anforderungen damit realisieren lassen. In diesem Beitrag geht es um die Synchronisierung zweier Unterformulare.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Unterformulare_im_Gleichschritt\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2021-02-11T21:21:08+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg07.met.vgwort.de\/na\/517beaecc47546b6a6c91b88981709ab\" \/>\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=\"12\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Unterformulare_im_Gleichschritt\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Unterformulare_im_Gleichschritt\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Unterformulare im Gleichschritt\",\"datePublished\":\"2021-02-11T21:21:08+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Unterformulare_im_Gleichschritt\\\/\"},\"wordCount\":2103,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Unterformulare_im_Gleichschritt\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/517beaecc47546b6a6c91b88981709ab\",\"articleSection\":[\"2008\",\"3\\\/2008\",\"Mit Formularen arbeiten\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Unterformulare_im_Gleichschritt\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Unterformulare_im_Gleichschritt\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Unterformulare_im_Gleichschritt\\\/\",\"name\":\"Unterformulare im Gleichschritt - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Unterformulare_im_Gleichschritt\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Unterformulare_im_Gleichschritt\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/517beaecc47546b6a6c91b88981709ab\",\"datePublished\":\"2021-02-11T21:21:08+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Unterformulare_im_Gleichschritt\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Unterformulare_im_Gleichschritt\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Unterformulare_im_Gleichschritt\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/517beaecc47546b6a6c91b88981709ab\",\"contentUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/517beaecc47546b6a6c91b88981709ab\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Unterformulare_im_Gleichschritt\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Unterformulare im Gleichschritt\"}]},{\"@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":"Unterformulare im Gleichschritt - 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\/Unterformulare_im_Gleichschritt\/","og_locale":"de_DE","og_type":"article","og_title":"Unterformulare im Gleichschritt","og_description":"Access ist bekannt daf&uuml;r, dass man Daten schnell in gew&uuml;nschter Weise zur Bearbeitung in Formularen anzeigen kann - zumindest f&uuml;r &uuml;bliche Szenarien. Entwickler sch&auml;tzen Access aber auch deshalb, weil sich auch au&szlig;ergew&ouml;hnliche Anforderungen damit realisieren lassen. In diesem Beitrag geht es um die Synchronisierung zweier Unterformulare.","og_url":"https:\/\/access-im-unternehmen.de\/Unterformulare_im_Gleichschritt\/","og_site_name":"Access im Unternehmen","article_published_time":"2021-02-11T21:21:08+00:00","og_image":[{"url":"http:\/\/vg07.met.vgwort.de\/na\/517beaecc47546b6a6c91b88981709ab","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"12\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Unterformulare_im_Gleichschritt\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Unterformulare_im_Gleichschritt\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Unterformulare im Gleichschritt","datePublished":"2021-02-11T21:21:08+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Unterformulare_im_Gleichschritt\/"},"wordCount":2103,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Unterformulare_im_Gleichschritt\/#primaryimage"},"thumbnailUrl":"http:\/\/vg07.met.vgwort.de\/na\/517beaecc47546b6a6c91b88981709ab","articleSection":["2008","3\/2008","Mit Formularen arbeiten"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Unterformulare_im_Gleichschritt\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Unterformulare_im_Gleichschritt\/","url":"https:\/\/access-im-unternehmen.de\/Unterformulare_im_Gleichschritt\/","name":"Unterformulare im Gleichschritt - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Unterformulare_im_Gleichschritt\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Unterformulare_im_Gleichschritt\/#primaryimage"},"thumbnailUrl":"http:\/\/vg07.met.vgwort.de\/na\/517beaecc47546b6a6c91b88981709ab","datePublished":"2021-02-11T21:21:08+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Unterformulare_im_Gleichschritt\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Unterformulare_im_Gleichschritt\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Unterformulare_im_Gleichschritt\/#primaryimage","url":"http:\/\/vg07.met.vgwort.de\/na\/517beaecc47546b6a6c91b88981709ab","contentUrl":"http:\/\/vg07.met.vgwort.de\/na\/517beaecc47546b6a6c91b88981709ab"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Unterformulare_im_Gleichschritt\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Unterformulare im Gleichschritt"}]},{"@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\/55000606","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=55000606"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000606\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55000606"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55000606"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55000606"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}