{"id":55001442,"date":"2023-08-01T00:00:00","date_gmt":"2023-07-31T14:23:15","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=1442"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Daten_in_ungebundenen_Formularen_bearbeiten","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Daten_in_ungebundenen_Formularen_bearbeiten\/","title":{"rendered":"Daten in ungebundenen Formularen bearbeiten"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg08.met.vgwort.de\/na\/f5551d8f732846219aca244c687434c1\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Der &uuml;bliche Weg, um Daten aus Tabellen in Access-Formularen anzuzeigen, ist die Angabe einer Tabelle oder Abfrage als Datenquelle und das Binden der Steuerelemente an die Felder dieser Quelle. Es gibt jedoch Anwendungsf&auml;lle, in denen diese Vorgehensweise nicht das gew&uuml;nschte Ergebnis liefert. Dann kann man einen alternativen Weg gehen, auch wenn man damit viel Vorteile aufgibt und eine Menge zus&auml;tzlicher Aufwand entsteht. In diesem Beitrag erl&auml;utern wir, wie man die Daten aus Tabellen oder Abfragen auch ohne direkte Bindung an eine Tabelle oder Abfrage in einem Formular anzeigen, bearbeiten und wieder speichern kann und wie sogar das Anlegen neuer Datens&auml;tze m&ouml;glich ist.<\/b><\/p>\n<h2>Anwendungsf&auml;lle f&uuml;r ungebundene Formulare<\/h2>\n<p>Access bietet mit der Bindung von Formularen und Steuerelementen an Tabellen oder Abfragen samt Feldern eine sehr einfache M&ouml;glichkeit, Daten anzuzeigen, zu bearbeiten und diese wieder zu speichern.<\/p>\n<p>Man kann allerdings auch den gew&uuml;nschten Datensatz per VBA &ouml;ffnen und die Daten auslesen und in die Steuerelemente eines Formulars schreiben. Wenn der Benutzer die gew&uuml;nschten &Auml;nderungen durchgef&uuml;hrt hat, lassen sich diese Daten per VBA sogar wieder zur&uuml;ck in die Tabelle schreiben. Damit ist allerdings ein stark erh&ouml;hter Programmieraufwand verbunden. Au&szlig;erdem kann man damit nur jeweils einen Datensatz in einem Formular anzeigen. Die Datenblattansicht oder die Endlosansicht k&ouml;nnen wir so nicht mit Daten f&uuml;llen. Die einzige M&ouml;glichkeit, mehrere Datens&auml;tze anzuzeigen, w&auml;re ein Listenfeld, dem wir die Daten als Wertliste zuweisen.<\/p>\n<p>Also fragt man sich: Aus welchem Grund sollte man sich diese Arbeit machen, wenn Access doch alle notwendigen Funktionen durch die Datenbindung anbietet? Uns fallen die folgenden Szenarien ein:<\/p>\n<ul>\n<li>Datensicherheit: Beim Zugriff auf gesch&uuml;tzte Backenddatenbanken liegt das Kennwort unverschl&uuml;sselt beispielsweise in der Eigenschaft <b>Datensatzquelle <\/b>vor. Bei ungebundenen Formularen k&ouml;nnen wir das Kennwort im Code verstecken.<\/li>\n<li>Kontrolle: Gebundene Formulare und Steuerelemente &uuml;bernehmen viele Aufgaben automatisch, aber das kann auch ein Nachteil sein. Wenn es keine andere M&ouml;glichkeit gibt, zum Beispiel die eingebaute Pr&uuml;fung von G&uuml;ltigkeitsregeln oder Restriktionen zu umgehen, das aber notwendig ist, hilft ein ungebundenes Formular.<\/li>\n<li>Datensatzsperrungen: Im Mehrbenutzerbetrieb k&ouml;nnen Datensatzsperrungen oder gleichzeitiges Bearbeiten zu Verz&ouml;gerungen oder Datenverlust f&uuml;hren. Bei ungebundenen Formularen treten Sperrungen maximal beim Lesen oder Schreiben auf, nicht w&auml;hrend der gesamten Bearbeitung.<\/li>\n<\/ul>\n<p>In den folgenden Abschnitten erl&auml;utern wir diese Gr&uuml;nde etwas ausf&uuml;hrlicher.<\/p>\n<h2>Ungebundene Formulare f&uuml;r mehr Datensicherheit<\/h2>\n<p>Ein Grund f&uuml;r den Einsatz von ungebundenen Formularen ist die Datensicherheit. Angenommen, wir arbeiten mit einem Frontend und einem Backend, wobei die Daten im Backend durch ein Kennwort gesch&uuml;tzt sind. Dann gibt es keine wirklich sichere M&ouml;glichkeit, per Datenbindung auf die Daten im Backend zuzugreifen, ohne dass das Kennwort abgegriffen werden kann. Dieses wird n&auml;mlich in der Verbindungszeichenfolge gespeichert &#8211; und das unverschl&uuml;sselt.<\/p>\n<h2>Mehr eigene Kontrolle durch ungebundene Formulare<\/h2>\n<p>In der Regel profitiert man davon, gebundene Formulare zu nutzen, denn damit werden gleich bei der Dateneingabe verschiedene Regeln wie G&uuml;ltigkeitsregeln, Restriktionen durch Verkn&uuml;pfungen oder Datentypen ber&uuml;cksichtigt. Manchmal ist das aber vielleicht nicht gew&uuml;nscht.<\/p>\n<p>Bei ungebundenen Formularen werden die im Datenmodell definierten Regeln gar nicht ber&uuml;cksichtigt &#8211; dies geschieht erst beim Speichern eines ge&auml;nderten oder neuen Datensatzes.<\/p>\n<h2>Datensatzsperrungen und Mehrbenutzerbetrieb<\/h2>\n<p>Wollen zwei Benutzer auf den gleichen Datensatz zugreifen, kann das je nach festgelegtem Mechanismus f&uuml;r Datensatzsperrungen entweder gar nicht funktionieren oder zu Konflikten f&uuml;hren. Wenn man dies verhindern m&ouml;chte und es okay ist, wenn die &Auml;nderungen des zuletzt auf den Datensatz zugreifenden Benutzers &uuml;bernommen werden sollen, egal, ob zwischenzeitlich andere &Auml;nderungen vorgenommen wurden, kann der Einsatz eines ungebundenen Formulars sinnvoll sein. Dieses sperrt den Datensatz je nach Einstellungen maximal beim Zur&uuml;ckschreiben eines ge&auml;nderten Datensatzes.<\/p>\n<h2>Ungebundenes Formular mit Daten f&uuml;llen<\/h2>\n<p>Auch wenn es auf den ersten Blick merkw&uuml;rdig aussieht: Der schnellste Weg zu einem Formular, das die Daten eines Datensatzes anzeigt, ohne an diesen gebunden zu sein, f&uuml;hrt &uuml;ber das Erstellen eines herk&ouml;mmlichen gebundenen Formulars.<\/p>\n<p>Der Grund ist einfach: Nicht nur erleichtert die Datenbindung unter Access das Anzeigen, Bearbeiten und Speichern von Daten, sondern Access ist auch optimal darauf vorbereitet, gebundene Formulare zu erstellen. Aber das wissen Sie ja bereits.<\/p>\n<p>Dennoch k&ouml;nnen Sie eine der beiden folgenden Alternativen nutzen:<\/p>\n<ul>\n<li>Sie legen ein Formular an, legen eine Tabelle oder Abfrage als Datensatzquelle fest, ziehen die gew&uuml;nschten Felder aus der Feldliste in den Formularentwurf und leeren dann die Datensatzquelle und die Eigenschaft Steuerelementinhalt der hinzugef&uuml;gten Steuerelemente wieder. Dann liegen bereits alle Steuerelemente mit korrekt beschriftetem Bezeichnungsfeld vor und haben au&szlig;erdem einen Namen, der dem Feld entspricht, dessen Inhalt sie anzeigen sollen.<\/li>\n<li>Oder Sie legen ein Formular an und f&uuml;gen f&uuml;r jedes Feld der Tabelle oder Abfrage ein Steuerelement hinzu. F&uuml;r diese passen Sie dann zuerst die Beschriftungsfelder an und dann die Namen der Steuerelemente, damit wir diese sp&auml;ter f&uuml;r das Schreiben und Lesen der enthaltenen Daten referenzieren k&ouml;nnen.<\/li>\n<\/ul>\n<p>Wir denken, dass die erste Methode schneller funktioniert und wir damit au&szlig;erdem die Steuerelemente sinnvoll anordnen k&ouml;nnen.<\/p>\n<h2>Beispieltabelle f&uuml;r ein ungebundenes Formular<\/h2>\n<p>Als Beispieltabelle verwenden wir eine sehr einfach gehaltene Kundentabelle namens <b>tblKunden<\/b>, die lediglich das Prim&auml;rschl&uuml;sselfeld <b>KundeID <\/b>sowie die Textfelder <b>Vorname<\/b>, <b>Nachname<\/b>, <b>Anrede<\/b>, <b>Strasse<\/b>, <b>PLZ<\/b>, <b>Ort <\/b>und <b>Land <\/b>enth&auml;lt. Diese sieht mit einigen Beispieldatens&auml;tzen wie in Bild 1 aus.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_04\/pic_1442_001.png\" alt=\"Tabelle mit Beispieldaten\" width=\"649,559\" height=\"269,0179\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Tabelle mit Beispieldaten<\/span><\/b><\/p>\n<h2>Schritt 1: Gebundenes Formular erstellen<\/h2>\n<p>Damit erstellen wir nun ein neues gebundenes Formular. Dazu gehen wir wie folgt vor:<\/p>\n<ul>\n<li>Legen Sie ein neues Formular an.<\/li>\n<li>W&auml;hlen Sie f&uuml;r die Eigenschaft <b>Datensatzquelle <\/b>die Tabelle <b>tblKunden <\/b>aus.<\/li>\n<li>Ziehen Sie alle Felder aus der Feldliste in den Detailbereich des Formularentwurfs.<\/li>\n<li>Speichern Sie das Formular unter dem Namen <b>frmKundenUngebunden<\/b> und schlie&szlig;en Sie es wieder.<\/li>\n<\/ul>\n<p>Das Formular sieht nun wie in Bild 2 aus.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_04\/pic_1442_002.png\" alt=\"Das gebundene Formular\" width=\"599,559\" height=\"344,8625\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Das gebundene Formular<\/span><\/b><\/p>\n<h2>Schritt 2: Formularbindung aufheben<\/h2>\n<p>Nun erledigen wir die folgenden Schritte, um die Bindung von Formular und Steuerelementen aufzuheben:<\/p>\n<ul>\n<li>Leeren Sie die Eigenschaft <b>Datensatzquelle <\/b>des Formulars.<\/li>\n<li>Leeren Sie die Eigenschaft <b>Steuerelementinhalt <\/b>aller gebundenen Steuerelemente.<\/li>\n<\/ul>\n<p>Letzteres geht am schnellsten, indem Sie alle gebundenen Steuerelemente markieren und dann die Eigenschaft Steuerelementinhalt bearbeiten. Diese wird nun zun&auml;chst leer angezeigt, weil sie f&uuml;r die verschiedenen markierten Steuerelemente unterschiedliche Werte enth&auml;lt (siehe Bild 3). Wie aber sollen wir eine leere Eigenschaft leeren? Dazu geben wir ein beliebiges Zeichen ein und entfernen diese wieder. Anschlie&szlig;end ist die Eigenschaft wirklich leer, wie das Anklicken der einzelnen Steuerelemente zeigt.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_04\/pic_1442_003.png\" alt=\"Die Eigenschaft Steuerelementinhalt wird leer angezeigt, weil die markierten Steuerelemente unterschiedliche Werte f&uuml;r diese Eigenschaft aufweisen.\" width=\"599,559\" height=\"275,252\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Die Eigenschaft Steuerelementinhalt wird leer angezeigt, weil die markierten Steuerelemente unterschiedliche Werte f&uuml;r diese Eigenschaft aufweisen.<\/span><\/b><\/p>\n<p>Wechseln wir nun zur Formularansicht, sehen wir ein Formular mit leeren Steuerelementen, die wir nach Bedarf f&uuml;llen k&ouml;nnen.<\/p>\n<h2>Unn&ouml;tige Elemente entfernen<\/h2>\n<p>In einem ungebundenen Formular ben&ouml;tigen wir die Elemente f&uuml;r die Navigation in den Datens&auml;tzen nicht.<\/p>\n<p>Daher stellen wir die Eigenschaften <b>Navigationsschaltfl&auml;chen <\/b>und <b>Datensatzmarkierer <\/b>auf den Wert <b>Nein <\/b>ein.<\/p>\n<h2>Ersten Datensatz der Tabelle oder Abfrage anzeigen<\/h2>\n<p>Nun wollen wir die Steuerelemente mit den Daten eines Datensatzes f&uuml;llen. Nur welchen verwenden wir? Wir verwenden zun&auml;chst den ersten Datensatz. Sp&auml;ter schauen wir uns an, wie wir das Formular f&uuml;r die Anzeige eines speziellen Datensatzes &ouml;ffnen k&ouml;nnen.<\/p>\n<p>Um das Formular mit den Daten eines Datensatzes zu versehen, ben&ouml;tigen wir eines der Ereignisse, die direkt beim &Ouml;ffnen des Formulars ausgel&ouml;st werden. In diesem Fall nutzen wir direkt das Ereignis <b>Beim &Ouml;ffnen<\/b>. <\/p>\n<p>Nachdem wir dieses angelegt haben, erg&auml;nzen wir die leere Prozedur um die folgenden Zeilen:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Form_Open(Cancel<span style=\"color:blue;\"> As Integer<\/span>)\r\n     <span style=\"color:blue;\">Dim <\/span>db<span style=\"color:blue;\"> As <\/span>DAO.Database\r\n     <span style=\"color:blue;\">Dim <\/span>rst<span style=\"color:blue;\"> As <\/span>DAO.Recordset\r\n     <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n     <span style=\"color:blue;\">Set<\/span> rst = db.OpenRecordset(\"SELECT TOP 1 * \" _\r\n         & \"FROM tblKunden\", dbOpenDynaset)\r\n     Me!KundeID = rst!KundeID\r\n     Me!Vorname = rst!Vorname\r\n     Me!Nachname = rst!Nachname\r\n     Me!Anrede = rst!Anrede\r\n     Me!Strasse = rst!Strasse\r\n     Me!PLZ = rst!PLZ\r\n     Me!Ort = rst!Ort\r\n     Me!Land = rst!Land\r\n     rst.Close\r\n     <span style=\"color:blue;\">Set<\/span> rst = Nothing\r\n     <span style=\"color:blue;\">Set<\/span> db = Nothing\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>[<\/p>\n<p>Diese Prozedur erstellt ein <b>Database<\/b>&#8211; und ein <b>Recordset<\/b>-Objekt und liest lediglich den ersten Datensatz der Tabelle <b>tblKunden <\/b>in das Recordset ein (<b>TOP 1<\/b>).<\/p>\n<p>Dann schreibt sie die Werte der einzelnen Felder der Tabelle in die jeweiligen Textfelder.<\/p>\n<p>Anschlie&szlig;end schlie&szlig;t sie das Recordset und leert die Variablen <b>rst <\/b>und <b>db<\/b>.<\/p>\n<p>&Ouml;ffnen wir das Formular nun in der Formularansicht, zeigt es wie in Bild 4 den gew&uuml;nschten Datensatz an. Wir k&ouml;nnen die Daten nun &auml;ndern, allerdings werden die &Auml;nderungen nicht in die zugrunde liegende Tabelle &uuml;bernommen.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_04\/pic_1442_004.png\" alt=\"Daten im ungebundenen Formular\" width=\"524,559\" height=\"286,2198\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Daten im ungebundenen Formular<\/span><\/b><\/p>\n<p>Bevor wir dies programmieren, wollen wir nun zun&auml;chst daf&uuml;r sorgen, dass wir das Formular mit einem bestimmten Datensatz &ouml;ffnen k&ouml;nnen.<\/p>\n<h2>Formular mit gew&uuml;nschtem Datensatz &ouml;ffnen<\/h2>\n<p>Wenn Sie ein gebundenes Formular &ouml;ffnen und mit diesem direkt einen bestimmten Datensatz anzeigen wollen, haben Sie verschiedene M&ouml;glichkeiten. Eine davon ist, eine Bedingung mit dem Parameter <b>WhereCondition <\/b>zu &uuml;bergeben. So gern wir diese weiter nutzen w&uuml;rden: der &uuml;bergebene Wert l&auml;sst sich f&uuml;r ungebundene Formular nicht auslesen.<\/p>\n<p>Also gehen wir direkt zur n&auml;chsten M&ouml;glichkeit, einen Wert zu &uuml;bergeben. Dazu nutzen wir den <b>OpenArgs<\/b>-Parameter der <b>DoCmd.OpenForm<\/b>-Methode. Damit &uuml;bergeben wir den Wert des Prim&auml;rschl&uuml;sselfeldes des Datensatzes, den wir im ungebundenen Formular anzeigen wollen, hier den Wert <b>2<\/b>:<\/p>\n<pre>DoCmd.OpenForm \"frmKundenUngebunden\", OpenArgs:=\"2\"<\/pre>\n<p>Den Parameter werten wir in einer Erweiterung der <b>Form_Open<\/b>-Methode wie folgt aus:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Form_Open(Cancel<span style=\"color:blue;\"> As Integer<\/span>)\r\n     <span style=\"color:blue;\">Dim <\/span>db<span style=\"color:blue;\"> As <\/span>DAO.Database\r\n     <span style=\"color:blue;\">Dim <\/span>rst<span style=\"color:blue;\"> As <\/span>DAO.Recordset\r\n     <span style=\"color:blue;\">Dim <\/span>lngKundeID<span style=\"color:blue;\"> As Long<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n     lngKundeID = Nz(Me.OpenArgs, 0)\r\n     <span style=\"color:blue;\">If <\/span>lngKundeID = 0<span style=\"color:blue;\"> Then<\/span>\r\n         <span style=\"color:blue;\">Set<\/span> rst = db.OpenRecordset(\"SELECT TOP 1 * \" _\r\n             & \"FROM tblKunden\", dbOpenDynaset)\r\n     <span style=\"color:blue;\">Else<\/span>\r\n         <span style=\"color:blue;\">Set<\/span> rst = db.OpenRecordset(\"SELECT TOP 1 * \" _\r\n             & \"FROM tblKunden WHERE KundeID = \" _\r\n             & lngKundeID, dbOpenDynaset)\r\n     <span style=\"color:blue;\">End If<\/span>\r\n     ...\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Wir weisen der Variablen <b>lngKundeID <\/b>den Wert der Eigenschaft <b>OpenArgs <\/b>zu. Diese enth&auml;lt den &uuml;bergebenen Wert oder, wenn kein Wert &uuml;bergeben wurde, den Wert <b>Null<\/b>. <b>lngKundeID <\/b>hat dann also entweder den Prim&auml;rschl&uuml;sselwert des anzuzeigenden Datensatzes oder den Wert <b>0<\/b>.<\/p>\n<p>Im ersteren Fall zeigen wir mit dem Formular einfach den ersten Datensatz des Recordsets an, im letzteren den Datensatz mit dem entsprechenden Prim&auml;rschl&uuml;sselwert.<\/p>\n<h2>Neuen, leeren Datensatz anzeigen<\/h2>\n<p>Einfach den ersten Datensatz anzuzeigen, wenn keine ID f&uuml;r den anzuzeigenden Datensatz &uuml;bergeben wurde, macht keinen Sinn. Also entscheiden wir, dass das Formular in diesem Fall leer angezeigt werden soll, also wie ein Formular mit einem neuen, leeren Datensatz.<\/p>\n<p>Oder kurz gesagt: In diesem Fall lassen wir einfach alle Steuerelemente leer. Dazu bauen wir die Prozedur erneut um, indem wir die Option <b>lngKundeID = 0 <\/b>entfernen und nur bei Vorhandensein eines Prim&auml;rschl&uuml;sselwertes &uuml;berhaupt Werte in die Steuerelemente eintragen:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Form_Open(Cancel<span style=\"color:blue;\"> As Integer<\/span>)\r\n     <span style=\"color:blue;\">Dim <\/span>db<span style=\"color:blue;\"> As <\/span>DAO.Database\r\n     <span style=\"color:blue;\">Dim <\/span>rst<span style=\"color:blue;\"> As <\/span>DAO.Recordset\r\n     <span style=\"color:blue;\">Dim <\/span>lngKundeID<span style=\"color:blue;\"> As Long<\/span>\r\n     lngKundeID = Nz(Me.OpenArgs, 0)\r\n     <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Not<\/span> lngKundeID = 0<span style=\"color:blue;\"> Then<\/span>\r\n         <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n         <span style=\"color:blue;\">Set<\/span> rst = db.OpenRecordset(\"SELECT TOP 1 * \" _\r\n             & \"FROM tblKunden WHERE KundeID = \" _\r\n             & lngKundeID, dbOpenDynaset)\r\n         Me!KundeID = rst!KundeID\r\n         ...\r\n         rst.Close\r\n         <span style=\"color:blue;\">Set<\/span> rst = Nothing\r\n         <span style=\"color:blue;\">Set<\/span> db = Nothing\r\n     <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<h2>Deaktivieren des Steuerelements mit dem Prim&auml;rschl&uuml;sselwert<\/h2>\n<p>Wenn Sie sich entscheiden, wie im vorliegenden Beispiel den Prim&auml;rschl&uuml;sselwert des Datensatzes im Formular anzuzeigen, sollten Sie das betroffene Steuerelement deaktivieren, damit der Benutzer den Wert nicht &auml;ndern kann.<\/p>\n<p>Das ist schlie&szlig;lich bei gebundenen Formularen auch nicht m&ouml;glich, wenn das Feld mit der Autowertfunktion ausgestattet ist. Um das zu erreichen, stellen wir die Eigenschaften <b>Aktiviert <\/b>auf <b>Nein <\/b>und <b>Gesperrt <\/b>auf <b>Ja <\/b>ein. Damit wird das Steuerelement wie die &uuml;brigen Textfelder angezeigt, kann aber nicht bearbeitet werden. <\/p>\n<p>Um dem Benutzer zu verdeutlichen, dass der Inhalt dieses Steuerelements nicht ver&auml;ndert werden kann, stellen wir seine Eigenschaft <b>Rahmenart <\/b>noch auf <b>Transparent <\/b>ein.<\/p>\n<h2>Speichern des Datensatzes<\/h2>\n<p>Mit den bisherigen Vorgaben haben wir die Messlatte f&uuml;r die Prozedur zum Speichern des Datensatzes direkt recht hoch angelegt. Diese muss nun n&auml;mlich unterscheiden, ob es sich bei dem angezeigten Datensatz um einen neuen oder einen vorhandenen Datensatz handelt. Und im letzteren Fall w&auml;re es auch noch interessant, ob dieser &uuml;berhaupt ge&auml;ndert wurde und dementsprechend gespeichert werden soll.<\/p>\n<p>Ob es sich um einen neuen oder einen vorhandenen Datensatz handelt, k&ouml;nnen wir dem Steuerelement <b>KundeID <\/b>entnehmen. Wenn wir dieses jedoch nicht anzeigen, ben&ouml;tigen wir einen anderen Marker. In diesem Fall w&uuml;rden wir die Deklaration der Variablen <b>lngKundeID <\/b>aus der Prozedur <b>Form_Open <\/b>herausziehen und diese in den allgemeinen Teil des Klassenmoduls verschieben (siehe Bild 5).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_04\/pic_1442_005.png\" alt=\"Auslagern der Variablen lngKundeID\" width=\"424,5589\" height=\"178,0408\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 5: Auslagern der Variablen lngKundeID<\/span><\/b><\/p>\n<p>Damit k&ouml;nnen wir nach dem Zuweisen des Wertes in <b>Form_Open <\/b>auch in weiteren Ereignisprozeduren noch darauf zugreifen.<\/p>\n<p>Damit kommen wir zu der Frage: Wann wollen wir den neuen oder ge&auml;nderten Datensatz &uuml;berhaupt speichern? Wenn der Benutzer das Formular schlie&szlig;t? Oder wenn er auf eine bestimmte Schaltfl&auml;che wie beispielsweise <b>OK <\/b>klickt? Letzteres w&auml;re umso sinnvoller, als dass wir dann noch eine weitere Schaltfl&auml;che mit dem Text <b>Abbrechen <\/b>hinzuf&uuml;gen k&ouml;nnten, die dem Benutzer die M&ouml;glichkeit bietet, &Auml;nderungen an einem vorhanden oder neuen Datensatz zu verwerfen.<\/p>\n<p>Also f&uuml;gen wir die beiden Schaltfl&auml;chen namens <b>cmdOK <\/b>und <b>cmdAbbrechen <\/b>wie in Bild 6 hinzu.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_04\/pic_1442_006.png\" alt=\"Schaltfl&auml;chen zum Speichern oder Verwerfen von &Auml;nderungen\" width=\"424,5589\" height=\"315,6089\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 6: Schaltfl&auml;chen zum Speichern oder Verwerfen von &Auml;nderungen<\/span><\/b><\/p>\n<h2>Verwerfen von &Auml;nderungen<\/h2>\n<p>Wir k&uuml;mmern uns zuerst um das Verwerfen von &Auml;nderungen an den Daten im Formular. Im Gegensatz zu einem gebundenen Formular, in dem wir &Auml;nderungen mit der <b>Undo<\/b>-Methode verwerfen, brauchen wir hier nur das Formular zu schlie&szlig;en. Schlie&szlig;lich sind die Steuerelemente nicht gebunden, sodass auch keine &Auml;nderungen auf die zugrunde liegende Tabelle &uuml;bertragen werden. Der Code dieser Prozedur lautet daher:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>cmdAbbrechen_Click()\r\n     DoCmd.Close acForm, Me.Name\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<h2>Speichern von &Auml;nderungen<\/h2>\n<p>Das Speichern von &Auml;nderungen ist nur notwendig, wenn der Benutzer &uuml;berhaupt &Auml;nderungen vorgenommen hat. Daher sollten wir zuerst pr&uuml;fen, ob dies der Fall ist. Wir k&ouml;nnen uns hier leider nicht auf die Eigenschaften <b>Value <\/b>und <b>OldValue <\/b>eines Steuerelements berufen, die bei gebundenen Formularen zur Verf&uuml;gung stehen. Stattdessen m&uuml;ssen wir die Werte beim &Ouml;ffnen des Formulars in irgendeiner Form speichern. Es gibt verschiedene Varianten. Wir k&ouml;nnten beispielsweise eine <b>String<\/b>-Variable nutzen, der wir die Inhalte aller Felder durch das Pipe-Zeichen getrennt hinzuf&uuml;gen, also etwa so:<\/p>\n<pre>Andr&eacute;|Minhorst|Herr|Borkhofer Str. 17|47137|Duisburg|Deutschland<\/pre>\n<p>Beim Anklicken der <b>OK<\/b>-Schaltfl&auml;che w&uuml;rden wir dann die aktuellen Inhalte in einer weiteren Variablen zusammenfassen und die beiden vergleichen. Gibt es einen Unterschied, liegen &Auml;nderungen vor.<\/p>\n<p>Etwas eleganter ist die folgende Idee: Wir speichern den Wert eines jeden Steuerelements beim &Ouml;ffnen an einer beliebigen Stelle und l&ouml;sen beim &Auml;ndern des Wertes, beispielsweise durch das Ereignis <b>Nach Aktualisierung<\/b>, eine Ereignisprozedur aus, welche den gespeicherten und den aktuellen Wert vergleicht. Liegen Unterschiede vor, aktivieren wir die zuvor nicht aktivierte Schaltfl&auml;che <b>cmdOK<\/b>. Macht der Benutzer die &Auml;nderungen r&uuml;ckg&auml;ngig, deaktivieren wir <b>cmdOK <\/b>wieder.<\/p>\n<p>Um nicht f&uuml;r jedes Steuerelement eine Variable definieren zu m&uuml;ssen, speichern wir die Werte in der <b>Tag<\/b>-Eigenschaft der Steuerelemente (im Eigenschaftenblatt unter <b>Marke <\/b>zu finden). Dazu f&uuml;gen wir der <b>Form_Open<\/b>-Ereignisprozedur die folgenden Zeilen hinzu:<\/p>\n<pre>...\r\nMe!Vorname.Tag = rst!Vorname\r\nMe!Nachname.Tag = rst!Nachname\r\nMe!Anrede.Tag = rst!Anrede\r\nMe!Strasse.Tag = rst!Strasse\r\nMe!PLZ.Tag = rst!PLZ\r\nMe!Ort.Tag = rst!Ort\r\nMe!Land.Tag = rst!Land\r\n...<\/pre>\n<p>F&uuml;r die Ereignisprozedur <b>Nach Aktualisierung <\/b>des Textfeldes mit der <b>Anrede <\/b>w&uuml;rden wir die folgende Prozedur hinterlegen:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Anrede_AfterUpdate()\r\n     <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Not<\/span> Me!Anrede.Tag = Me!Anrede<span style=\"color:blue;\"> Then<\/span>\r\n         Me!cmdOK.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>Wenn wir die Eigenschaft <b>Aktiviert <\/b>der Schaltfl&auml;che <b>cmdOK <\/b>nun auf <b>Nein <\/b>einstellen und nach dem &Ouml;ffnen des Formulars f&uuml;r einen vorhandenen Datensatz die Anrede &auml;ndern, w&uuml;rde dies nach dem Best&auml;tigen des neuen Wertes die Schaltfl&auml;che <b>cmdOK <\/b>aktivieren.<\/p>\n<p>Eine solche Prozedur k&ouml;nnen wir f&uuml;r alle &uuml;brigen Steuerelemente ebenfalls anlegen.<\/p>\n<p>Was aber, wenn der Benutzer den Werte eines der Steuerelemente wieder auf den vorherigen Wert &auml;ndert? Dann k&ouml;nnen wir die Schaltfl&auml;che <b>cmdOK <\/b>nicht einfach wieder deaktivieren, denn es kann sein, dass er bereits den Wert eines anderen Steuerelements ge&auml;ndert hat.<\/p>\n<p>F&uuml;r diesen Fall m&uuml;ssen wir also eine Pr&uuml;fung aller Steuerelemente vornehmen. Dann k&ouml;nnen wir allerdings auch gleich eine Pr&uuml;fung aller Steuerelemente vornehmen, was f&uuml;r das Feld <b>Anrede <\/b>wie folgt aussieht:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Anrede_AfterUpdate()\r\n     If Me!Anrede.Tag = Me!Anrede _\r\n             And Me!Vorname.Tag = Me!Vorname _\r\n             And Me!Nachname.Tag = Me!Nachname _\r\n             And Me!Strasse.Tag = Me!Strasse _\r\n             And Me!PLZ.Tag = Me!PLZ _\r\n             And Me!Ort.Tag = Me!Ort _\r\n             And Me!Land.Tag = Me!Land Then\r\n         Me!cmdOK.Enabled = <span style=\"color:blue;\">False<\/span>\r\n     <span style=\"color:blue;\">Else<\/span>\r\n         Me!cmdOK.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>Die gleiche <b>If&#8230;Then<\/b>-Bedingung m&uuml;ssen wir dann f&uuml;r die <b>AfterUpdate<\/b>-Prozedur aller Steuerelemente hinterlegen. Aber da wir keinen Code doppelt schreiben wollen, legen wir eine neue Prozedur daf&uuml;r an.<\/p>\n<p>Und in dieser ersetzen wir die <b>If&#8230;Then<\/b>-Bedingung durch eine direkte Zuweisung der Bedingung an die Eigenschaft <b>Enabled <\/b>der <b>OK<\/b>-Schaltfl&auml;che:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>EnableOKButton()\r\n     Me!cmdOK.Enabled = <span style=\"color:blue;\">Not<\/span> (Me!Anrede.Tag = Me!Anrede _\r\n         And Me!Vorname.Tag = Me!Vorname _\r\n         And Me!Nachname.Tag = Me!Nachname _\r\n         And Me!Strasse.Tag = Me!Strasse _\r\n         And Me!PLZ.Tag = Me!PLZ _\r\n         And Me!Ort.Tag = Me!Ort _\r\n         And Me!Land.Tag = Me!Land)\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Wichtig ist die Klammer um die mit <b>And <\/b>verkn&uuml;pften Bedingungen.<\/p>\n<p>Der Aufruf sieht beispielsweise f&uuml;r das Textfeld <b>Anrede <\/b>wie folgt aus:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Anrede_AfterUpdate()\r\n     EnableOKButton\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<h2>Speichern eines neuen oder ge&auml;nderten Datensatzes<\/h2>\n<p>Nun schauen wir uns die Prozedur an, die durch das Anklicken der Schaltfl&auml;che <b>cmdOK <\/b>ausgel&ouml;st wird. Diese erzeugt als Erstes ein Recordset auf Basis der Tabelle <b>tblKunden<\/b>, wobei dieses genau den Datensatz mit dem Wert aus <b>lngKundeID <\/b>im Prim&auml;rschl&uuml;sselfeld erh&auml;lt. Bei einem vorhandenen Datensatz wird dieser geladen, bei einem neuen ist <b>lngKundeID <\/b>gleich <b>0 <\/b>und dementsprechend wird ein leeres Recordset ermittelt:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>cmdOK_Click()\r\n     <span style=\"color:blue;\">Dim <\/span>db<span style=\"color:blue;\"> As <\/span>DAO.Database\r\n     <span style=\"color:blue;\">Dim <\/span>rst<span style=\"color:blue;\"> As <\/span>DAO.Recordset\r\n     <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n     <span style=\"color:blue;\">Set<\/span> rst = db.OpenRecordset(\"SELECT * FROM tblKunden \" _\r\n         & \"WHERE KundeID = \" & lngKundeID, dbOpenDynaset)<\/pre>\n<p>Erst dann pr&uuml;ft die Prozedur, ob es sich um einen neuen Datensatz handelt (<b>lngKundeID = 0<\/b>) oder um einen vorhandenen. Im ersten Fall legt es mit der <b>AddNew<\/b>-Methode einen neuen Datensatz im noch leeren Recordset an, im zweiten wird der enthaltene Datensatz in den Bearbeitungszustand versetzt:<\/p>\n<pre>     <span style=\"color:blue;\">If <\/span>lngKundeID = 0<span style=\"color:blue;\"> Then<\/span>\r\n         rst.Add<span style=\"color:blue;\">New<\/span>\r\n     <span style=\"color:blue;\">Else<\/span>\r\n         rst.Edit\r\n     <span style=\"color:blue;\">End If<\/span><\/pre>\n<p>Danach schreibt die Prozedur die aktuellen Werte der Textfelder in die Felder des Recordsets und speichert dieses anschlie&szlig;end:<\/p>\n<pre>     rst!Vorname = Me!Vorname\r\n     rst!Nachname = Me!Nachname\r\n     rst!Anrede = Me!Anrede\r\n     rst!Strasse = Me!Strasse\r\n     rst!PLZ = Me!PLZ\r\n     rst!Ort = Me!Ort\r\n     rst!Land = Me!Land\r\n     rst.Update\r\n     rst.Close\r\n     <span style=\"color:blue;\">Set<\/span> rst = Nothing\r\n     <span style=\"color:blue;\">Set<\/span> db = Nothing<\/pre>\n<p>Schlie&szlig;lich wird das Formular geschlossen:<\/p>\n<pre>     DoCmd.Close acForm, Me.Name\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Auf diese Weise k&ouml;nnen wir mit dem Formular vorhandene Datens&auml;tze bearbeiten und neue anlegen.<\/p>\n<h2>Zusammenfassung und Ausblick<\/h2>\n<p>Die aktuelle Fassung eines ungebundenen Formulars erm&ouml;glicht das Bearbeiten vorhandener Datens&auml;tze sowie das Erstellen neuer Datens&auml;tze. Allein hierf&uuml;r mussten wir bereits eine Reihe Prozeduren und Anweisungen schreiben.<\/p>\n<p>Dabei fehlen noch einige Funktionen gebundener Formular, die wir hier noch nicht ber&uuml;cksichtigt haben. Darunter geh&ouml;ren die folgenden:<\/p>\n<p>Es erfolgt keine Pr&uuml;fung, ob die eingegebenen Daten g&uuml;ltig sind. Dies w&uuml;rde in einen gebundenen Formular bereits beim Verlassen des jeweiligen Steuerelements geschehen. Auch untersucht diese Version nicht, ob Werte vorhanden sein m&uuml;ssen oder ob der Datentyp dem Typ des jeweiligen Feldes entspricht.<\/p>\n<p>Wir k&ouml;nnen beliebige Daten in die Steuerelemente eingeben, aber erst beim Speichern durch die <b>Update<\/b>-Methode des Recordsets in der Prozedur <b>cmdOK_Click <\/b>werden eventuelle Probleme gemeldet.<\/p>\n<p>Dadurch, das wir hier nur Textfelder verwenden, die alle auch leer bleiben d&uuml;rfen, tritt an dieser Stelle kein Problem auf. Wie es aussehen k&ouml;nnte, wenn dies der Fall ist, zeigen wir an einem Beispiel. Wir stellen in der Tabelle <b>tblKunden <\/b>f&uuml;r das Feld <b>Anrede <\/b>die Eigenschaft <b>Eingabe erforderlich <\/b>auf <b>Ja <\/b>ein. Versuchen wir nun, einen neuen Datensatz anzulegen, bei dem dieses Feld nicht gef&uuml;llt wird, erhalten wir die Meldung aus Bild 7.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_04\/pic_1442_007.png\" alt=\"Fehler bei fehlendem Wert in einem Pflichtfeld\" width=\"574,559\" height=\"292,8286\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 7: Fehler bei fehlendem Wert in einem Pflichtfeld<\/span><\/b><\/p>\n<p>Damit dies nicht geschieht, m&uuml;ssen wir noch Validierungsfunktionen unterbringen &#8211; auf Feldebene und auf Datensatzebene. Auch eventuell f&uuml;r die Felder der Tabelle oder f&uuml;r die Tabelle selbst festgelegte G&uuml;ltigkeitsregeln m&uuml;ssen wir ber&uuml;cksichtigen.<\/p>\n<p>Au&szlig;erdem haben wir in diesem Beispiel ausschlie&szlig;lich mit Textfeld-Steuerelementen gearbeitet. Wenn wir beispielsweise die Anreden als Kombinationsfeld auf Basis einer Tabelle namens <b>tblAnreden <\/b>abbilden wollten, m&uuml;ssten wir weiteren Aufwand betreiben. Und f&uuml;r ein Mindestma&szlig; an Nutzbarkeit m&uuml;ssen wir auch noch &Uuml;bersichten der Daten von Tabellen oder Abfragen schaffen, um daraus zu bearbeitende Datens&auml;tze ausw&auml;hlen zu k&ouml;nnen. Wie all dies gelingt, schauen wir uns in weiteren Beitr&auml;gen an.<\/p>\n<h2>Downloads zu diesem Beitrag<\/h2>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>DatenInUngebundenenFormularen.accdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/A5ACA6FA-6C43-4895-94F8-39AB3D03170B\/aiu_1442.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Der &uuml;bliche Weg, um Daten aus Tabellen in Access-Formularen anzuzeigen, ist die Angabe einer Tabelle oder Abfrage als Datenquelle und das Binden der Steuerelemente an die Felder dieser Quelle. Es gibt jedoch Anwendungsf&auml;lle, in denen diese Vorgehensweise nicht das gew&uuml;nschte Ergebnis liefert. Dann kann man einen alternativen Weg gehen, auch wenn man damit viel Vorteile aufgibt und eine Menge zus&auml;tzlicher Aufwand entsteht. In diesem Beitrag erl&auml;utern wir, wie man die Daten aus Tabellen oder Abfragen auch ohne direkte Bindung an eine Tabelle oder Abfrage in einem Formular anzeigen, bearbeiten und wieder speichern kann und wie sogar das Anlegen neuer Datens&auml;tze m&ouml;glich ist.<\/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,66042023,44000023],"tags":[],"class_list":["post-55001442","post","type-post","status-publish","format-standard","hentry","category-662023","category-66042023","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>Daten in ungebundenen Formularen bearbeiten - 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_in_ungebundenen_Formularen_bearbeiten\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Daten in ungebundenen Formularen bearbeiten\" \/>\n<meta property=\"og:description\" content=\"Der &uuml;bliche Weg, um Daten aus Tabellen in Access-Formularen anzuzeigen, ist die Angabe einer Tabelle oder Abfrage als Datenquelle und das Binden der Steuerelemente an die Felder dieser Quelle. Es gibt jedoch Anwendungsf&auml;lle, in denen diese Vorgehensweise nicht das gew&uuml;nschte Ergebnis liefert. Dann kann man einen alternativen Weg gehen, auch wenn man damit viel Vorteile aufgibt und eine Menge zus&auml;tzlicher Aufwand entsteht. In diesem Beitrag erl&auml;utern wir, wie man die Daten aus Tabellen oder Abfragen auch ohne direkte Bindung an eine Tabelle oder Abfrage in einem Formular anzeigen, bearbeiten und wieder speichern kann und wie sogar das Anlegen neuer Datens&auml;tze m&ouml;glich ist.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Daten_in_ungebundenen_Formularen_bearbeiten\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2023-07-31T14:23:15+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=\"19\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_in_ungebundenen_Formularen_bearbeiten\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Daten_in_ungebundenen_Formularen_bearbeiten\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Daten in ungebundenen Formularen bearbeiten\",\"datePublished\":\"2023-07-31T14:23:15+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Daten_in_ungebundenen_Formularen_bearbeiten\\\/\"},\"wordCount\":3268,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Daten_in_ungebundenen_Formularen_bearbeiten\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg08.met.vgwort.de\\\/na\\\/f5551d8f732846219aca244c687434c1\",\"articleSection\":[\"2023\",\"4\\\/2023\",\"Mit Formularen arbeiten\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Daten_in_ungebundenen_Formularen_bearbeiten\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Daten_in_ungebundenen_Formularen_bearbeiten\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Daten_in_ungebundenen_Formularen_bearbeiten\\\/\",\"name\":\"Daten in ungebundenen Formularen bearbeiten - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Daten_in_ungebundenen_Formularen_bearbeiten\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Daten_in_ungebundenen_Formularen_bearbeiten\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg08.met.vgwort.de\\\/na\\\/f5551d8f732846219aca244c687434c1\",\"datePublished\":\"2023-07-31T14:23:15+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Daten_in_ungebundenen_Formularen_bearbeiten\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Daten_in_ungebundenen_Formularen_bearbeiten\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Daten_in_ungebundenen_Formularen_bearbeiten\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg08.met.vgwort.de\\\/na\\\/f5551d8f732846219aca244c687434c1\",\"contentUrl\":\"http:\\\/\\\/vg08.met.vgwort.de\\\/na\\\/f5551d8f732846219aca244c687434c1\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Daten_in_ungebundenen_Formularen_bearbeiten\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Daten in ungebundenen Formularen bearbeiten\"}]},{\"@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 in ungebundenen Formularen bearbeiten - 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_in_ungebundenen_Formularen_bearbeiten\/","og_locale":"de_DE","og_type":"article","og_title":"Daten in ungebundenen Formularen bearbeiten","og_description":"Der &uuml;bliche Weg, um Daten aus Tabellen in Access-Formularen anzuzeigen, ist die Angabe einer Tabelle oder Abfrage als Datenquelle und das Binden der Steuerelemente an die Felder dieser Quelle. Es gibt jedoch Anwendungsf&auml;lle, in denen diese Vorgehensweise nicht das gew&uuml;nschte Ergebnis liefert. Dann kann man einen alternativen Weg gehen, auch wenn man damit viel Vorteile aufgibt und eine Menge zus&auml;tzlicher Aufwand entsteht. In diesem Beitrag erl&auml;utern wir, wie man die Daten aus Tabellen oder Abfragen auch ohne direkte Bindung an eine Tabelle oder Abfrage in einem Formular anzeigen, bearbeiten und wieder speichern kann und wie sogar das Anlegen neuer Datens&auml;tze m&ouml;glich ist.","og_url":"https:\/\/access-im-unternehmen.de\/Daten_in_ungebundenen_Formularen_bearbeiten\/","og_site_name":"Access im Unternehmen","article_published_time":"2023-07-31T14:23:15+00:00","author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"19\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Daten_in_ungebundenen_Formularen_bearbeiten\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Daten_in_ungebundenen_Formularen_bearbeiten\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Daten in ungebundenen Formularen bearbeiten","datePublished":"2023-07-31T14:23:15+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Daten_in_ungebundenen_Formularen_bearbeiten\/"},"wordCount":3268,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Daten_in_ungebundenen_Formularen_bearbeiten\/#primaryimage"},"thumbnailUrl":"http:\/\/vg08.met.vgwort.de\/na\/f5551d8f732846219aca244c687434c1","articleSection":["2023","4\/2023","Mit Formularen arbeiten"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Daten_in_ungebundenen_Formularen_bearbeiten\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Daten_in_ungebundenen_Formularen_bearbeiten\/","url":"https:\/\/access-im-unternehmen.de\/Daten_in_ungebundenen_Formularen_bearbeiten\/","name":"Daten in ungebundenen Formularen bearbeiten - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Daten_in_ungebundenen_Formularen_bearbeiten\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Daten_in_ungebundenen_Formularen_bearbeiten\/#primaryimage"},"thumbnailUrl":"http:\/\/vg08.met.vgwort.de\/na\/f5551d8f732846219aca244c687434c1","datePublished":"2023-07-31T14:23:15+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Daten_in_ungebundenen_Formularen_bearbeiten\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Daten_in_ungebundenen_Formularen_bearbeiten\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Daten_in_ungebundenen_Formularen_bearbeiten\/#primaryimage","url":"http:\/\/vg08.met.vgwort.de\/na\/f5551d8f732846219aca244c687434c1","contentUrl":"http:\/\/vg08.met.vgwort.de\/na\/f5551d8f732846219aca244c687434c1"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Daten_in_ungebundenen_Formularen_bearbeiten\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Daten in ungebundenen Formularen bearbeiten"}]},{"@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\/55001442","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=55001442"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001442\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55001442"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55001442"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55001442"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}