{"id":55000805,"date":"2011-12-01T00:00:00","date_gmt":"2020-05-22T21:58:58","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=805"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Daten_zusammenfuehren_per_Formular","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Daten_zusammenfuehren_per_Formular\/","title":{"rendered":"Daten zusammenf&uuml;hren per Formular"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg07.met.vgwort.de\/na\/297f8b9ccdec48859c35fd488965cc28\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Wenn Sie mit Duplikaten arbeiten oder Daten aus mehreren Datenbanken zusammenf&uuml;hren m&ouml;chten, kann ein Formular zum Abgleich &auml;hnlicher Datens&auml;tze hilfreich sein. Dieses sollte die relevanten Felder beider Datens&auml;tze nebeneinanderstellen und dem Benutzer die M&ouml;glichkeit bieten, die Daten des einen, des anderen oder auch beider Datens&auml;tze in einen Datensatz zu &uuml;berf&uuml;hren. Dieser Beitrag zeigt, wie Sie ein solches Formular erstellen und damit Datens&auml;tze abgleichen.<\/b><\/p>\n<p>Das gew&uuml;nschte Formular soll wie in Bild 1 aussehen und jeweils die Feldnamen, die Werte der Zieltabelle und die Werte der Quelltabelle anzeigen. Der Benutzer soll alle Felder der Quelltabelle, alle Felder der Zieltabelle oder auch eine Mischung der Daten aus beiden Datens&auml;tzen ausw&auml;hlen k&ouml;nnen. Dies ist bereits die erste H&uuml;rde: Wie stellt man dies dar beziehungsweise welche Steuerelemente verwenden wir daf&uuml;r<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2011_06\/DatenZusammenfuehrenPerFormular-web-images\/pic001.png\" alt=\"pic001.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 1: Das Formular zum Abgleichen von Datens&auml;tzen<\/span><\/b><\/p>\n<p>Die naheliegendste L&ouml;sung w&auml;re wohl gewesen, eine Reihe von Textfeldern nebeneinander zu platzieren und diese je nach Datenherkunft zu f&uuml;llen. Diesmal haben wir uns jedoch f&uuml;r das Listenfeld entschieden &#8211; allein, weil es durch die m&ouml;gliche Mehrfachmarkierung bereits eine wichtige Funktion mitbringt. Genau genommen sind es drei Listenfelder, die im Formular <b>frmAbgleichDetails<\/b> ihren Dienst tun. Das erste enth&auml;lt die Feldnamen, das zweite die Daten der Zieltabelle und das dritte die Daten der Quelltabelle. Ganz oben befindet sich noch ein Eintrag, mit dem der Benutzer per Mausklick alle Felder einer Spalte ausw&auml;hlen k&ouml;nnen soll.<\/p>\n<p>Bevor wir auf die technischen Feinheiten dieser L&ouml;sung eingehen, schauen wir uns an, wie Sie das Formular einsetzen k&ouml;nnen. Der Aufruf erfordert n&auml;mlich eine Reihe von Informationen, die Sie dem Formular &uuml;ber das &Ouml;ffnungsargument <b>OpenArgs<\/b> &uuml;bergeben. Der Aufruf sieht beispielsweise wie folgt aus:<\/p>\n<pre>DoCmd.OpenForm \"frmAbgleichDetails\", _\r\nOpenArgs:=\"LieferantID|LieferantID|1|77|tblLieferanten|tblLieferanten1|LieferantID;\r\nFirma;Kontaktperson;Position;Strasse;Ort;Region;PLZ;\r\nLand;Telefon;Telefax;Homepage\", WindowMode:=acDialog<\/pre>\n<p>Wenn wir uns den Wert f&uuml;r <b>OpenArgs <\/b>allein ansehen, sieht das Ganze schon &uuml;bersichtlicher aus:<\/p>\n<pre>LieferantID|LieferantID|1|77|tblLieferanten|tblLieferanten1|LieferantID;Firma;\r\nKontaktperson;Position;Strasse;Ort;Region;PLZ;Land;Telefon;Telefax;Homepage<\/pre>\n<p>Dort gibt es zun&auml;chst eine ganze Reihe von Informationen, die durch das Pipe-Zeichen voneinander getrennt werden. Dabei handelt es sich um die folgenden:<\/p>\n<ul>\n<li class=\"aufz-hlung\">Prim&auml;rschl&uuml;sselfeld der Zieltabelle<\/li>\n<li class=\"aufz-hlung\">Prim&auml;rschl&uuml;sselfeld der Quelltabelle<\/li>\n<li class=\"aufz-hlung\">Wert des Prim&auml;rschl&uuml;sselfeldes des Zieldatensatzes<\/li>\n<li class=\"aufz-hlung\">Wert des Prim&auml;rschl&uuml;sselfeldes des Quelldatensatzes<\/li>\n<li class=\"aufz-hlung\">Name der Zieltabelle<\/li>\n<li class=\"aufz-hlung\">Name der Quelltabelle<\/li>\n<li class=\"aufz-hlung\">Semikolon-separierte Liste der Felder, die angezeigt werden sollen<\/li>\n<\/ul>\n<p>Erst wenn Sie f&uuml;r diese sieben Parameter sinnvolle Werte &uuml;bergeben, zeigt das Formular die Daten zum Abgleich an.<\/p>\n<p>Im vorliegenden Fall soll es den Datensatz mit dem Prim&auml;rschl&uuml;sselwert <b>1 <\/b>der Zieltabelle <b>tblLieferanten <\/b>und den Datensatz mit dem Prim&auml;rschl&uuml;sselwert <b>77 <\/b>der (in einer anderen Datenbank befindlichen und verkn&uuml;pften) Quelltabelle <b>tblLieferanten1 <\/b>anzeigen, und davon die Felder <b>LieferantID<\/b>, <b>Firma<\/b>, <b>Kontaktperson<\/b>, <b>Position<\/b>, <b>Strasse<\/b>, <b>Ort<\/b>, <b>Region<\/b>, <b>PLZ<\/b>, <b>Land<\/b>, <b>Telefon<\/b>, <b>Telefax <\/b>und <b>Homepage<\/b>.<\/p>\n<p>Nach diesem Aufruf erscheint das Formular und zeigt den gew&uuml;nschten Datensatz an. Sie k&ouml;nnen nun die Feldinhalte ausw&auml;hlen und das Formular mit einem Klick auf die Schaltfl&auml;che <b>OK <\/b>schlie&szlig;en. Das Formular &uuml;bernimmt nur die Darstellung und Markierung der gew&uuml;nschten Daten, den Code zum Auslesen der gew&auml;hlten Daten m&uuml;ssen Sie wie die Anweisung zum &Ouml;ffnen des Formulars selbst bereitstellen.<\/p>\n<p>In einem einfachen Beispiel sieht das wie in <span class=\"verweis-ohneumbruch\"><a href=\"#anker-27-anchor\">Listing 1<\/a><\/span> aus. Hier werden die beiden zu vergleichenden Datensatzgruppen ge&ouml;ffnet und per <b>Recordset<\/b>-Variable referenziert. Die Prozedur durchl&auml;uft die Datens&auml;tze der Quelltabelle und pr&uuml;ft, ob es in der Zieltabelle bereits einen Datensatz mit dem gleichen Wert im Feld <b>Firma <\/b>gibt. Falls nicht, wird der Datensatz zur Zieltabelle hinzugef&uuml;gt, falls doch, tritt unser Formular f&uuml;r den Datenabgleich auf den Plan.<\/p>\n<p class=\"listingueberschrift\">Listing 1: Abgleich zweier Datens&auml;tze mit Untersuchung im Formular durchf&uuml;hren<\/p>\n<pre>Public Sub DatenZusammenfuehren_Lieferanten_MitAbgleich()\r\n    Dim db As DAO.Database\r\n    Dim rstQuelle As DAO.Recordset, rstZiel As DAO.Recordset\r\n    Dim lngZielID As Long\r\n    Set db = CurrentDb\r\n    Set rstQuelle = db.OpenRecordset(\"SELECT * FROM tblLieferanten1\", dbOpenDynaset)\r\n    Set rstZiel = db.OpenRecordset(\"SELECT * FROM tblLieferanten\", dbOpenDynaset)\r\n    db.Execute \"DELETE FROM tblPKAltUndNeu\", dbFailOnError\r\n    Do While Not rstQuelle.EOF\r\n     lngZielID = Nz(DLookup(\"LieferantID\", \"tblLieferanten\", \"Firma = ''\" _\r\n            &amp; Replace(rstQuelle!Firma, \"''\", \"''''\") &amp; \"''\"))\r\n        If lngZielID = 0 Then\r\n            rstZiel.AddNew\r\n            rstZiel!Firma = rstQuelle!Firma\r\n            ''... weitere Felder\r\n            lngZielID = rstZiel!LieferantID\r\n            rstZiel.Update\r\n        Else\r\n            DoCmd.Close acForm, \"frmAbgleichDetails\"\r\n            DoCmd.OpenForm \"frmAbgleichDetails\", OpenArgs:=\"LieferantID|LieferantID|\" &amp; lngZielID _\r\n                &amp; \"|\" &amp; rstQuelle!LieferantID &amp; \"|tblLieferanten|tblLieferanten1|LieferantID;\" _\r\n                &amp; \"Firma;Kontaktperson;Position;Strasse;Ort;Region;PLZ;Land;Telefon;Telefax;\" _\r\n                &amp; \"Homepage\", windowMode:=acDialog\r\n            If mdlTools_Abgleich.IstFormularGeoeffnet(\"frmAbgleichDetails\") Then\r\n                rstZiel.FindFirst \"LieferantID = \" &amp; lngZielID\r\n                rstZiel.Edit\r\n                rstZiel!Firma = Forms!frmAbgleichDetails.Wert(\"Firma\")\r\n                rstZiel!Kontaktperson = Forms!frmAbgleichDetails.Wert(\"Kontaktperson\")\r\n                ''... weitere Felder\r\n                lngZielID = Forms!frmAbgleichDetails.Wert(\"LieferantID\")\r\n                rstZiel.Update\r\n                DoCmd.Close acForm, \"frmAbgleichDetails\"\r\n            End If\r\n        End If\r\n        rstQuelle.MoveNext\r\n    Loop\r\n    Set db = Nothing\r\nEnd Sub<\/pre>\n<p>In diesem Fall wird dieses mit einigen variablen Parametern ge&ouml;ffnet, namentlich den Prim&auml;rschl&uuml;sselfeldern der beiden zu vergleichenden Datens&auml;tze, die ja mit jedem Satz zu vergleichender Datens&auml;tze wechseln. Der Prim&auml;rschl&uuml;sselwert des Zieldatensatzes wurde dazu bereits vorher in der Variablen <b>lngZielID <\/b>gespeichert, der Quelldatensatzwert wird direkt aus dem Datensatz eingelesen.<\/p>\n<p>Nun &ouml;ffnet sich das Formular und der Benutzer legt fest, welches Feld mit welchem Wert der beiden Datens&auml;tze gef&uuml;llt werden soll. Danach klickt er auf <b>OK <\/b>und sorgt daf&uuml;r, dass das Formular unsichtbar wird und somit den Fokus verliert.<\/p>\n<p>Da es als modaler Dialog ge&ouml;ffnet wurde, l&auml;uft die aufrufende Prozedur erst jetzt weiter. Nach einer Pr&uuml;fung, ob das Formular <b>frmAbgleichDetails <\/b>noch ge&ouml;ffnet ist, werden die Daten entsprechend den Angaben im Formular in den Zieldatensatz geschrieben. Das unsichtbare, aber noch nicht geschlossene Formular bietet eine Funktion namens <b>Wert <\/b>an, die den Namen eines Feldes erwartet und den ausgew&auml;hlten Wert zur&uuml;ckliefert.<\/p>\n<p>Die Prozedur sucht den Zieldatensatz aus der Datensatzgruppe heraus und schreibt die im Formular ausgew&auml;hlten Werte in die jeweiligen Felder des Datensatzes.<\/p>\n<p>Nach dem Aktualisieren des Datensatzes wird das Formular nun endg&uuml;ltig geschlossen und der n&auml;chste Datensatz der Quelltabelle wird untersucht. Wenn alle Datens&auml;tze durchlaufen wurden, ist der Vorgang abgeschlossen. <\/p>\n<p><!--30percent--><\/p>\n<p><b>Aufbau des Formulars<\/b><\/p>\n<p>Schauen wir uns nun an, was daf&uuml;r sorgt, dass Sie mit dem Formular so komfortabel die Werte f&uuml;r den Zieldatensatz ausw&auml;hlen k&ouml;nnen. Die erste bemerkenswerte Tatsache ist, dass es dort scheinbar drei Listenfelder gibt, durch die Sie mit einer einzigen Bildlaufleiste scrollen k&ouml;nnen. Wie funktioniert das Nun, es ist ganz einfach: Die drei Listenfelder befinden sich in einem Unterformular, das die Bildlaufleiste bereitstellt.<\/p>\n<p>Damit immer alle Felder der beiden Tabellen in die Listenfelder passen, haben wir diese ausreichend hoch dimensioniert &#8211; und bei Bedarf k&ouml;nnen Sie die Gr&ouml;&szlig;e auch noch selbst anpassen.<\/p>\n<p>Bild 2 zeigt das Unterformular mit den drei Listenfeldern <b>lstFelder<\/b>, <b>lstZieltabelle <\/b>und <b>lstQuelltabelle<\/b>.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2011_06\/DatenZusammenfuehrenPerFormular-web-images\/pic003.png\" alt=\"pic003.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 3: Aufbau des gesamten Formulars mit Unterformular und Listenfeldern<\/span><\/b><\/p>\n<p>Die beiden rechten Listenfelder sollen die Mehrfachauswahl erm&ouml;glichen, daher stellen Sie die Eigenschaft <b>Mehrfachauswahl <\/b>auf <b>Einzeln <\/b>ein.<\/p>\n<p>Das linke Listenfeld soll nur die Zeilenbeschriftungen mit den Feldnamen stellen. Daher stellen wir seine Eigenschaft <b>Rahmenart<\/b> auf <b>Transparent <\/b>ein.<\/p>\n<p>Alle drei Listenfelder beziehen ihre Daten sp&auml;ter aus Wertlisten, die beim &Ouml;ffnen des Formulars zusammengestellt werden. Stellen Sie daher die Eigenschaft <b>Herkunftsart <\/b>der drei Listenfelder jeweils auf den Wert <b>Wertliste <\/b>ein.<\/p>\n<p>Bild 3 stellt dar, wie das Unterformular mit den drei Listenfeldern in das Hauptformular integriert wird. Neben dem Unterformular finden Sie dort einige Beschriftungsfelder sowie Schaltfl&auml;chen. Deren Bedeutung betrachten wir sp&auml;ter.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2011_06\/DatenZusammenfuehrenPerFormular-web-images\/pic002.png\" alt=\"pic002.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 2: Unterformular mit den Listenfeldern zur Anzeige der abzugleichenden Daten<\/span><\/b><\/p>\n<p class=\"zwischen-berschrift-oberer-spaltenrand\">Listenfelder f&uuml;llen<\/p>\n<p>Die erste Aufgabe ist das F&uuml;llen der Listenfelder auf Basis der mit dem &Ouml;ffnungsargument &uuml;bergebenen Informationen. Diese Aufgabe &uuml;bernimmt die Prozedur, die beim Laden des Formulars ausgel&ouml;st wird. Bevor wir uns diese ansehen, noch ein Hinweis zum Zugriff auf die beiden Listenfelder mit den Daten der abzugleichenden Datens&auml;tze: Da zwischen den beiden Listenfeldern und auch zwischen Hauptformular und Listenfeldern eine Menge Kommunikation n&ouml;tig ist, haben wir der Einfachheit halber zwei Objektvariablen in das Klassenmodul des Hauptformulars gelegt, welche die beiden Listenfelder referenzieren. Die notwendigen Objektvariablen werden so deklariert:<\/p>\n<pre>Dim WithEvents lstZieltabelle As Listbox\r\nDim WithEvents lstQuelltabelle As Listbox<\/pre>\n<p>Das Schl&uuml;sselwort <b>WithEvents <\/b>sorgt daf&uuml;r, dass wir auch die Ereignisprozeduren der mit diesen Variablen referenzierten Steuerelemente im Klassenmodul des Hauptformulars behandeln k&ouml;nnen.<\/p>\n<p>Die Prozedur <b>Form_Load <\/b>aus <span class=\"verweis-ohneumbruch\"><a href=\"#anker-30-anchor\">Listing 2<\/a><\/span> deklariert zun&auml;chst eine Variablen. Danach weist sie den beiden Objektvariablen <b>lstZieltabelle <\/b>und <b>lstQuelltabelle <\/b>die entsprechenden Steuerelemente des Unterformulars zu. Au&szlig;erdem legt sie fest, dass das Ereignis <b>Nach Aktualisierung <\/b>dieser beiden Steuerelemente im aktuellen Klassenmodul ber&uuml;cksichtigt werden soll. Zu den betroffenen Ereignisprozeduren kommen wir weiter unten.<\/p>\n<p class=\"listingueberschrift\">Listing 2: Anzeigen der abzugleichenden Daten im Formular frmAbgleichDetails<\/p>\n<pre>Private Sub Form_Load()\r\n    Dim db As DAO.Database\r\n    Dim rstQuelle As DAO.Recordset, rstZiel As DAO.Recordset\r\n    Dim strQuelltabelle As String, strZieltabelle As String\r\n    Dim strPKQuelle As String, strPKZiel As String\r\n    Dim varIDQuelle As Variant, varIDZiel As Variant\r\n    Dim strOpenArgs As String\r\n    Dim strFelder As String\r\n    Dim strWerteQuelle As String, strWerteZiel As String\r\n    Dim i As Integer\r\n    Set db = CurrentDb\r\n    Set lstZieltabelle = Me!sfm.Form!lstZieltabelle\r\n    lstZieltabelle.AfterUpdate = \"[Event Procedure]\"\r\n    Set lstQuelltabelle = Me!sfm.Form!lstQuelltabelle\r\n    lstQuelltabelle.AfterUpdate = \"[Event Procedure]\"\r\n    strOpenArgs = Me.OpenArgs\r\n    strPKZiel = Split(strOpenArgs, \"|\")(0)\r\n    strPKQuelle = Split(strOpenArgs, \"|\")(1)\r\n    varIDZiel = Split(strOpenArgs, \"|\")(2)\r\n    varIDQuelle = Split(strOpenArgs, \"|\")(3)\r\n    strZieltabelle = Split(strOpenArgs, \"|\")(4)\r\n    strQuelltabelle = Split(strOpenArgs, \"|\")(5)\r\n    strFelder = Split(strOpenArgs, \"|\")(6)\r\n    Set rstQuelle = db.OpenRecordset(\"SELECT \" &amp; Replace(strFelder, \";\", \",\") &amp; \" FROM \" _\r\n    &amp; strQuelltabelle &amp; \" WHERE \" &amp; strPKQuelle &amp; \" = \" &amp; varIDQuelle, dbOpenDynaset)\r\n    Set rstZiel = db.OpenRecordset(\"SELECT \" &amp; Replace(strFelder, \";\", \",\") &amp; \" FROM \" _\r\n    &amp; strZieltabelle &amp; \" WHERE \" &amp; strPKZiel &amp; \" = \" &amp; varIDZiel, dbOpenDynaset)\r\n    For i = LBound(Split(strFelder, \";\")) To UBound(Split(strFelder, \";\"))\r\n        strWerteQuelle = strWerteQuelle &amp; \";\" &amp; rstQuelle(Split(strFelder, \";\")(i))\r\n        strWerteZiel = strWerteZiel &amp; \";\" &amp; rstZiel(Split(strFelder, \";\")(i))\r\n    Next i\r\n    Me!sfm.Form!lstFelder.RowSource = \";\" &amp; strFelder\r\n    strWerteQuelle = \"[Alle ausw&auml;hlen]\" &amp; strWerteQuelle\r\n    strWerteZiel = \"[Alle ausw&auml;hlen]\" &amp; strWerteZiel\r\n    lstQuelltabelle.RowSource = strWerteQuelle\r\n    lstZieltabelle.RowSource = strWerteZiel\r\n    bolZielAlle = True\r\n    bolQuelleAlle = False\r\n    For i = 0 To lstZieltabelle.ListCount\r\n        lstZieltabelle.Selected(i) = True\r\n    Next i\r\nEnd Sub<\/pre>\n<p>Danach werden die einzelnen Bestandteile des &Ouml;ffnungsarguments in verschiedene Variablen eingelesen. Der Zugriff auf die durch das Pipe-Zeichen getrennten Werte erfolgt &uuml;ber die Split-Funktion, die ein Array der durch das angegebene Zeichen getrennten Zeichenketten erzeugt. Durch Angabe des Indexes erhalten Sie Zugriff auf das entsprechende Element des Arrays.<\/p>\n<p>Mit diesen Informationen erzeugt die Prozedur zwei Datensatzgruppen, die jeweils einen Datensatz enthalten: den Quell- und den Zieldatensatz.<\/p>\n<p>In einer <b>For&#8230;Next<\/b>-Schleife durchl&auml;uft die Prozedur dann alle im letzten Teil des &Ouml;ffnungsarguments angegebenen Feldnamen. Dies erfolgt wiederum durch Zwischenlagern der durch Semikola getrennten Liste in einem Array und anschlie&szlig;endes Abrufen der einzelnen Elemente durch Angabe des Indexes.<\/p>\n<p>Innerhalb der Schleife wird eine ebenfalls durch Semikola getrennte Liste der Feldwerte der beiden Datens&auml;tze erzeugt.<\/p>\n<p>Damit haben wir nun alle Informationen, die zum F&uuml;llen der Listenfelder ben&ouml;tigt werden: Die Liste der Felder, die der Werte der Quelltabelle und die Werte der Zieltabelle.<\/p>\n<p>Alle drei Wertlisten werden in den folgenden Anweisungen an die Eigenschaft <b>Datensatzherkunft <\/b>der Listenfelder &uuml;bergeben. Dem Listenfeld zur Anzeige der Felder stellen wir dabei ein leeres Feld voran, die beiden &uuml;brigen werden um einen Eintrag mit dem Wert <b>[Alle ausw&auml;hlen] <\/b>erg&auml;nzt.<\/p>\n<p>Beim &Ouml;ffnen des Formulars sollen zun&auml;chst alle Eintr&auml;ge der Zieltabelle markiert sein, weshalb in einer weiteren <b>For&#8230;Next<\/b>-Schleife alle Elemente des entsprechenden Listenfeldes selektiert werden.<\/p>\n<p>Damit die nachfolgend aufgerufenen Prozeduren diesen Zustand einfach abfragen k&ouml;nnen, wird die Variable <b>bolZielAlle <\/b>auf den Wert <b>True <\/b>und <b>bolQuelleAlle <\/b>auf <b>False <\/b>eingestellt.<\/p>\n<p>Diese beiden Variablen werden im Kopf des Klassenmoduls des Formulars wie folgt deklariert:<\/p>\n<pre>Dim bolQuelleAlle As Boolean\r\nDim bolZielAlle As Boolean<\/pre>\n<p><b>Werte aus Quelle und Ziel zusammenstellen<\/b><\/p>\n<p>Wenn der Benutzer auf einen Eintrag der Quelltabelle klickt, der zuvor noch nicht markiert war, soll dieser markiert werden. Im gleichen Zuge soll der entsprechende Eintrag der Liste der Zieltabelle automatisch abgew&auml;hlt werden. Gleiches gilt f&uuml;r den umgekehrten Fall: Wenn der Benutzer einen der Werte der Zieltabelle anklickt, soll dieser markiert und der entsprechende Wert der Quelltabelle abgew&auml;hlt werden.<\/p>\n<p>Auch ein Klick auf ein markiertes Feld soll den Wechsel des aktuell markierten Eintrags bewirken. Bleibt noch die Funktion der ganz oben befindlichen Eintr&auml;ge mit der Bezeichnung <b>[Alle ausw&auml;hlen]<\/b>: Diese sorgen bei Mausklick daf&uuml;r, dass alle jeweils darunter befindlichen Eintr&auml;ge markiert werden.<\/p>\n<p>Klickt der Benutzer auf einen beliebigen Eintrag mit einem Feldwert, sollen die Eintr&auml;ge <b>[Alle ausw&auml;hlen] <\/b>deaktiviert werden.<\/p>\n<p>Den Teil der Quelldaten erledigt die Prozedur aus <span class=\"verweis-ohneumbruch\"><a href=\"#anker-34-anchor\">Listing 3<\/a><\/span>. Die dortige Prozedur wird immer nach dem &auml;ndern des Listenfeldes <b>lstQuelltabelle <\/b>ausgel&ouml;st. Die Prozedur pr&uuml;ft zun&auml;chst, ob die Variable <b>bolQuelleAlle <\/b>den Wert <b>True <\/b>aufweist.<\/p>\n<p class=\"listingueberschrift\">Listing 3: &auml;ndern der Auswahl der Listenfelder ausgehend von den Feldern der Quelltabelle<\/p>\n<pre>Private Sub lstQuelltabelle_AfterUpdate()\r\n    Dim i As Integer\r\n    If bolQuelleAlle = True Then\r\n        For i = 1 To Me!lstQuelltabelle.ListCount\r\n            lstZieltabelle.Selected(i) = Not lstQuelltabelle.Selected(i)\r\n        Next i\r\n        lstZieltabelle.Selected(0) = False\r\n        lstQuelltabelle.Selected(0) = False\r\n        bolQuelleAlle = False\r\n    Else\r\n        If lstQuelltabelle.Selected(0) = False Then\r\n            lstZieltabelle.Selected(0) = False\r\n            For i = 1 To lstQuelltabelle.ListCount\r\n                lstZieltabelle.Selected(i) = Not lstQuelltabelle.Selected(i)\r\n            Next i\r\n        Else\r\n            bolQuelleAlle = True\r\n            bolZielAlle = False\r\n            lstZieltabelle.Selected(0) = False\r\n            For i = 1 To lstQuelltabelle.ListCount\r\n                lstQuelltabelle.Selected(i) = True\r\n                lstZieltabelle.Selected(i) = False\r\n            Next i\r\n        End If\r\n    End If\r\nEnd Sub<\/pre>\n<p>Das ist der Fall, wenn der Benutzer kurz zuvor auf den Eintrag <b>[Alle ausw&auml;hlen] <\/b>auf der Seite des Quelldatensatzes geklickt hat.<\/p>\n<p>Ist dies der Fall, aktiviert beziehungsweise deaktiviert die Prozedur alle Feldwerte, und zwar ausgehend von der Quelle. Das hei&szlig;t, dass in einer Schleife alle Eintr&auml;ge der Quelle durchlaufen werden. Dabei markiert die Prozedur alle Eintr&auml;ge der Zielseite, die auf der Quellseite nicht markiert sind, und w&auml;hlt diejenigen ab, die auf der Quellseite markiert sind.<\/p>\n<p>Au&szlig;erdem deaktiviert sie die <b>[Alle ausw&auml;hlen]<\/b>-Eintr&auml;ge beider Seiten. Dies kann ohne Pr&uuml;fung geschehen, denn wenn <b>bolQuelleAlle <\/b>vorher den Wert <b>True <\/b>hatte, waren auch alle Werte der Quellseite markiert &#8211; und sind es nach einem Klick auf einen der Eintr&auml;ge nun nicht mehr.<\/p>\n<p>Hatte <b>bolQuelleAlle <\/b>den Wert <b>False<\/b>, folgt eine weitere Pr&uuml;fung: Wenn der erste Eintrag der Quellseite, also die Zeile <b>[Alle ausw&auml;hlen] <\/b>nicht markiert ist, hat der Benutzer auf jeden Fall auf einen der &uuml;brigen Eintr&auml;ge geklickt.<\/p>\n<p>Dann braucht nur der <b>[Alle ausw&auml;hlen]<\/b>-Eintrag der Zielseite deaktiviert zu werden, die &uuml;brigen Eintr&auml;ge auf der Zielseite werden einfach in Abh&auml;ngigkeit von der Markierung auf der Quellseite aus- oder abgew&auml;hlt.<\/p>\n<p>Wenn <b>bolQuelleAlle <\/b>den Wert <b>False <\/b>hatte und nun der erste Eintrag der Quellseite markiert ist, hat der Benutzer auf diesen Eintrag geklickt und m&ouml;chte somit alle Eintr&auml;ge dieser Seite markieren.<\/p>\n<p>In einer weiteren <b>For&#8230;Next<\/b>-Schleife werden dann alle Eintr&auml;ge der Zielseite deaktiviert und alle Eintr&auml;ge der Quellseite aktiviert. Der Code f&uuml;r die Zielseite sieht genau so aus &#8211; lediglich die Steuerelemente und die Variablen sind vertauscht.<\/p>\n<p><b>Auslesen der aktuellen Werte der Listenfelder<\/b><\/p>\n<p>Nun fehlt noch eine Funktion, mit welcher der aufrufende Code nach dem Unsichtbarmachen des Formulars die aktuell ausgew&auml;hlten Werte auslesen kann.<\/p>\n<p>Diese Funktion hei&szlig;t schlicht <b>Wert <\/b>und wird als &ouml;ffentliche <b>Function<\/b>-Prozedur deklariert. Sie erwartet den Namen des zu pr&uuml;fenden Feldes als Eingangsparameter und liefert den aktuell ausgew&auml;hlten Wert zur&uuml;ck &#8211; also entweder den im Ziel- oder Quelllistenfeld befindlichen Eintrag in der Zeile mit dem angegebenen Feldnamen.<\/p>\n<p class=\"listingueberschrift\">Listing 4: Diese Funktion liefert den Wert f&uuml;r eine bestimmte Zeile zur&uuml;ck.<\/p>\n<pre>Public Function Wert(strFeld As String) As Variant\r\n    Dim i As Integer\r\n    Dim strWert As String\r\n    For i = 0 To Me!sfm.Form!lstFelder.ListCount - 1\r\n        If strFeld = Me!sfm.Form!lstFelder.ItemData(i) Then\r\n            If lstZieltabelle.Selected(i) Then\r\n                strWert = lstZieltabelle.ItemData(i)\r\n                Exit For\r\n            Else\r\n                strWert = Nz(lstQuelltabelle.ItemData(i), \"\")\r\n                Exit For\r\n            End If\r\n        End If\r\n    Next i\r\n    Wert = strWert\r\nEnd Function<\/pre>\n<p>Die Funktion durchl&auml;uft in einer <b>For&#8230;Next<\/b>-Schleife alle Eintr&auml;ge der Listenfelder, wobei die Schleife von 0 bis zur Anzahl der Listeneintr&auml;ge minus eins l&auml;uft.<\/p>\n<p>Innerhalb dieser Schleife pr&uuml;ft die Prozedur, ob der mit dem Eingangsparameter <b>strFeld <\/b>&uuml;bergebene Wert dem im linken Listenfeld angezeigten Wert entspricht. Wenn die Schleife in der richtigen Zeile gelandet ist, pr&uuml;ft die Prozedur, ob der Wert der Spalte mit den Werten der Zieltabelle markiert ist.<\/p>\n<p>Falls ja, wird dieser Wert an die aufrufende Prozedur zur&uuml;ckgegeben, falls nein, liefert die Funktion den entsprechenden Wert des Listenfeldes mit den Daten der Quelltabelle zur&uuml;ck.<\/p>\n<p>Fehlen nur noch die beiden Schaltfl&auml;chen. Die <b>OK<\/b>-Schaltfl&auml;che geht davon aus, dass der Benutzer die Daten nach seinen W&uuml;nschen ausgew&auml;hlt hat, und blendet das Formular aus, damit die aufrufende Prozedur wie oben beschrieben weiterlaufen und die ben&ouml;tigten Daten auslesen kann:<\/p>\n<pre>Private Sub cmdOK_Click()\r\n    Me!chkNeu = False\r\n    Me.Visible = False\r\nEnd Sub<\/pre>\n<p>Die Schaltfl&auml;che mit der Beschriftung <b>&Uuml;berspringen <\/b>legt fest, dass die Daten der Zieltabelle beibehalten werden. Das Formular wird dann einfach geschlossen.<\/p>\n<p>Die aufrufende Instanz bemerkt dann, dass das Formular nicht mehr ge&ouml;ffnet ist, und schlie&szlig;t daraus, dass die Daten der Zieltabelle beibehalten werden sollen:<\/p>\n<pre>Private Sub cmdUeberspringen_Click()\r\n    DoCmd.Close acForm, Me.Name\r\nEnd Sub<\/pre>\n<p><b>Zusammenfassung und Ausblick<\/b><\/p>\n<p>Diese L&ouml;sung l&auml;sst sich auf jeden Fall f&uuml;r den Abgleich von Daten beim Importieren von Daten aus anderen Datenbanken nutzen. Aber auch das Abgleichen von Duplikaten ist m&ouml;glich.<\/p>\n<p>Sie m&uuml;ssen dann nur einen entsprechenden Algorithmus bereitstellen, der die passenden Werte der betroffenen Datens&auml;tze mit dem &Ouml;ffnungsargument an das Formular <b>frmAbgleichDetails <\/b>&uuml;bergibt. Die beiden Datens&auml;tze k&ouml;nnen dabei auch aus ein und derselben Tabelle stammen.<\/p>\n<p>Lediglich die Behandlung nach dem Zusammenstellen des &#8222;richtigen&#8220; Datensatzes d&uuml;rfte etwas anders aussehen: Dort w&uuml;rden Sie vermutlich den als Duplikat enttarnten Datensatz l&ouml;schen und gegebenenfalls vorhandene Fremdschl&uuml;sselfelder, die auf den Prim&auml;rschl&uuml;ssel des gel&ouml;schten Datensatzes gezeigt haben, auf den nun g&uuml;ltigen Datensatz umbiegen.<\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>Formularabgleich.mdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/{057CA36E-40F7-4788-BB89-CF69A346B157}\/aiu_805.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Wenn Sie mit Duplikaten arbeiten oder Daten aus mehreren Datenbanken zusammenf&uuml;hren m&ouml;chten, kann ein Formular zum Abgleich &auml;hnlicher Datens&auml;tze hilfreich sein. Dieses sollte die relevanten Felder beider Datens&auml;tze nebeneinander stellen und dem Benutzer die M&ouml;glichkeit bieten, die  Daten des einen, des anderen oder auch beider Datens&auml;tze in einen Datensatz zu &uuml;berf&uuml;hren. Dieser Beitrag zeigt, wie Sie ein solches Formular erstellen und damit Datens&auml;tze abgleichen.<\/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":[662011,66062011,44000023],"tags":[],"class_list":["post-55000805","post","type-post","status-publish","format-standard","hentry","category-662011","category-66062011","category-Mit_Formularen_arbeiten"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.9 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Daten zusammenf&uuml;hren per Formular - 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\/Daten_zusammenfuehren_per_Formular\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Daten zusammenf&uuml;hren per Formular\" \/>\n<meta property=\"og:description\" content=\"Wenn Sie mit Duplikaten arbeiten oder Daten aus mehreren Datenbanken zusammenf&uuml;hren m&ouml;chten, kann ein Formular zum Abgleich &auml;hnlicher Datens&auml;tze hilfreich sein. Dieses sollte die relevanten Felder beider Datens&auml;tze nebeneinander stellen und dem Benutzer die M&ouml;glichkeit bieten, die Daten des einen, des anderen oder auch beider Datens&auml;tze in einen Datensatz zu &uuml;berf&uuml;hren. Dieser Beitrag zeigt, wie Sie ein solches Formular erstellen und damit Datens&auml;tze abgleichen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Daten_zusammenfuehren_per_Formular\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-22T21:58:58+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg07.met.vgwort.de\/na\/297f8b9ccdec48859c35fd488965cc28\" \/>\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=\"16\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Daten_zusammenfuehren_per_Formular\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Daten_zusammenfuehren_per_Formular\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Daten zusammenf&uuml;hren per Formular\",\"datePublished\":\"2020-05-22T21:58:58+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Daten_zusammenfuehren_per_Formular\\\/\"},\"wordCount\":2574,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Daten_zusammenfuehren_per_Formular\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/297f8b9ccdec48859c35fd488965cc28\",\"articleSection\":[\"2011\",\"6\\\/2011\",\"Mit Formularen arbeiten\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Daten_zusammenfuehren_per_Formular\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Daten_zusammenfuehren_per_Formular\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Daten_zusammenfuehren_per_Formular\\\/\",\"name\":\"Daten zusammenf&uuml;hren per Formular - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Daten_zusammenfuehren_per_Formular\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Daten_zusammenfuehren_per_Formular\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/297f8b9ccdec48859c35fd488965cc28\",\"datePublished\":\"2020-05-22T21:58:58+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Daten_zusammenfuehren_per_Formular\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Daten_zusammenfuehren_per_Formular\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Daten_zusammenfuehren_per_Formular\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/297f8b9ccdec48859c35fd488965cc28\",\"contentUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/297f8b9ccdec48859c35fd488965cc28\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Daten_zusammenfuehren_per_Formular\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Daten zusammenf&uuml;hren per Formular\"}]},{\"@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":"Daten zusammenf&uuml;hren per Formular - 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\/Daten_zusammenfuehren_per_Formular\/","og_locale":"de_DE","og_type":"article","og_title":"Daten zusammenf&uuml;hren per Formular","og_description":"Wenn Sie mit Duplikaten arbeiten oder Daten aus mehreren Datenbanken zusammenf&uuml;hren m&ouml;chten, kann ein Formular zum Abgleich &auml;hnlicher Datens&auml;tze hilfreich sein. Dieses sollte die relevanten Felder beider Datens&auml;tze nebeneinander stellen und dem Benutzer die M&ouml;glichkeit bieten, die Daten des einen, des anderen oder auch beider Datens&auml;tze in einen Datensatz zu &uuml;berf&uuml;hren. Dieser Beitrag zeigt, wie Sie ein solches Formular erstellen und damit Datens&auml;tze abgleichen.","og_url":"https:\/\/access-im-unternehmen.de\/Daten_zusammenfuehren_per_Formular\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-05-22T21:58:58+00:00","og_image":[{"url":"http:\/\/vg07.met.vgwort.de\/na\/297f8b9ccdec48859c35fd488965cc28","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"16\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Daten_zusammenfuehren_per_Formular\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Daten_zusammenfuehren_per_Formular\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Daten zusammenf&uuml;hren per Formular","datePublished":"2020-05-22T21:58:58+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Daten_zusammenfuehren_per_Formular\/"},"wordCount":2574,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Daten_zusammenfuehren_per_Formular\/#primaryimage"},"thumbnailUrl":"http:\/\/vg07.met.vgwort.de\/na\/297f8b9ccdec48859c35fd488965cc28","articleSection":["2011","6\/2011","Mit Formularen arbeiten"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Daten_zusammenfuehren_per_Formular\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Daten_zusammenfuehren_per_Formular\/","url":"https:\/\/access-im-unternehmen.de\/Daten_zusammenfuehren_per_Formular\/","name":"Daten zusammenf&uuml;hren per Formular - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Daten_zusammenfuehren_per_Formular\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Daten_zusammenfuehren_per_Formular\/#primaryimage"},"thumbnailUrl":"http:\/\/vg07.met.vgwort.de\/na\/297f8b9ccdec48859c35fd488965cc28","datePublished":"2020-05-22T21:58:58+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Daten_zusammenfuehren_per_Formular\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Daten_zusammenfuehren_per_Formular\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Daten_zusammenfuehren_per_Formular\/#primaryimage","url":"http:\/\/vg07.met.vgwort.de\/na\/297f8b9ccdec48859c35fd488965cc28","contentUrl":"http:\/\/vg07.met.vgwort.de\/na\/297f8b9ccdec48859c35fd488965cc28"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Daten_zusammenfuehren_per_Formular\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Daten zusammenf&uuml;hren per Formular"}]},{"@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\/55000805","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=55000805"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000805\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55000805"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55000805"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55000805"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}