{"id":55001489,"date":"2024-04-01T00:00:00","date_gmt":"2024-02-29T18:42:07","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=1489"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Formulare_Datensatz_wird_nicht_gespeichert","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Formulare_Datensatz_wird_nicht_gespeichert\/","title":{"rendered":"Formulare: Datensatz wird nicht gespeichert"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg02.met.vgwort.de\/na\/0cd2f4906e5247a6a575de419fdc456f\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Es gibt seit vielen Jahren einen Bug in Access-Formularen, der m&ouml;glicherweise Entwickler und Benutzer in den Wahnsinn treibt. Dabei geht es darum, dass neue oder ge&auml;nderte Datens&auml;tze beim Schlie&szlig;en des Formulars nicht automatisch gespeichert werden. Stattdessen findet man neue Datens&auml;tze einfach nicht in der entsprechenden Tabelle vor und bei vermeintlich ge&auml;nderten Datens&auml;tzen wurde die &Auml;nderung nicht &uuml;bernommen. Dies geschieht, wenn man das Formular auf eine bestimmte Art schlie&szlig;t und Restriktionen in der zugrunde liegenden Tabelle daf&uuml;r sorgen, dass der Datensatz nicht gespeichert werden kann. Wird zum Beispiel ein Pflichtfeld nicht gef&uuml;llt und das Formular geschlossen, verwirft Access den neuen Datensatz einfach, anstatt eine entsprechende Meldung zu liefern. Dieser Beitrag dokumentiert das Fehlverhalten und zeigt, welche M&ouml;glichkeiten wir zum Umgehen dieses Problems haben.<\/b><\/p>\n<h2>Tabelle mit Restriktionen<\/h2>\n<p>Voraussetzung f&uuml;r das beschriebene Verhalten ist, dass das Formular eine Tabelle anzeigt, f&uuml;r die es eine Restriktion gibt, die beim Speichern nicht erf&uuml;llt wurde. Schauen wir uns zum Beispiel die Tabelle <b>tblMitglieder <\/b>an, bei der wir f&uuml;r die beiden Felder <b>Vorname <\/b>und <b>Nachname <\/b>die Eigenschaft <b>Eingabe erforderlich <\/b>auf den Wert <b>Ja <\/b>eingestellt haben (siehe Bild 1).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2024_02\/pic_1489_001.png\" alt=\"Tabelle mit Restriktion f&uuml;r das Feld Vorname\" width=\"499,5589\" height=\"368,8913\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Tabelle mit Restriktion f&uuml;r das Feld Vorname<\/span><\/b><\/p>\n<p>Schon in der Datenblattansicht f&uuml;hrt der Versuch, den Datensatz zu speichern, ohne einen Wert in das Feld Vorname einzutragen, zu einer Fehlermeldung (siehe Bild 2). Der Datensatz kann nicht gespeichert werden, ohne dass dieses Feld gef&uuml;llt wird.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2024_02\/pic_1489_002.png\" alt=\"Meldung beim Verletzen der Restriktion\" width=\"499,5589\" height=\"278,2241\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Meldung beim Verletzen der Restriktion<\/span><\/b><\/p>\n<h2>Tabelle mit Restriktionen im Formular<\/h2>\n<p>Schauen wir uns nun das Formular <b>frmMitgliederDetails <\/b>an, das die Daten der Tabelle <b>tblMitglieder <\/b>anzeigt.<\/p>\n<p>Legen wir hier einen neuen Datensatz an, ohne das Feld <b>Vorname <\/b>auszuf&uuml;llen, und versuchen, das Formular &uuml;ber die <b>Schlie&szlig;en<\/b>-Schaltfl&auml;che zu schlie&szlig;en, erscheint die gleiche Meldung, die wir bereits aus der Datenblattansicht der Tabelle kennen (siehe Bild 3).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2024_02\/pic_1489_003.png\" alt=\"Meldung auch im Formular beim Schlie&szlig;en mit der Taste X\" width=\"424,5589\" height=\"341,4537\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Meldung auch im Formular beim Schlie&szlig;en mit der Taste X<\/span><\/b><\/p>\n<p>Anschlie&szlig;end zeigt Access noch eine weitere Meldung an, die uns die M&ouml;glichkeit bietet, das Formular ohne Speichern der &Auml;nderung zu schlie&szlig;en oder die Eingabe fortzusetzen (siehe Bild 4).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2024_02\/pic_1489_006.png\" alt=\"Folgemeldung nach dem Hinweis auf die Verletzung der Restriktion\" width=\"599,559\" height=\"147,3832\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Folgemeldung nach dem Hinweis auf die Verletzung der Restriktion<\/span><\/b><\/p>\n<h2>Problem beim Schlie&szlig;en mit DoCmd.Close<\/h2>\n<p>Was also ist das Problem? Dieses tritt auf, wenn wir eine Schaltfl&auml;che wie <b>cmdOK <\/b>dazu nutzen, das Formular mit der folgenden Prozedur zu schlie&szlig;en:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>cmdOK_Click()\r\n     DoCmd.Close acForm, Me.Name\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Das Formular wird geschlossen, ohne das eine Fehlermeldung wegen der Verletzung der Restriktion angezeigt wird &#8211; allerdings finden wir anschlie&szlig;end auch keinen neuen Datensatz in der zugrunde liegenden Tabelle. Das Problem wird also durch die Kombination aus <b>DoCmd.Close <\/b>und der Verletzung einer Restriktion ausgel&ouml;st.<\/p>\n<p>Auch wenn wir die Methode <b>DoCmd.Close <\/b>von au&szlig;en aufrufen, wird das Formular ohne Meldung und ohne Anzeige einer Meldung geschlossen &#8211; und auch hier wird der Datensatz einfach verworfen:<\/p>\n<pre>DoCmd.Close acForm, \"frmMitgliederDetails\"<\/pre>\n<p>Immerhin finden wir mittlerweile einen entsprechenden Hinweis auf der Seite zum <b>DoCmd.Close<\/b>-Befehl von Microsoft (siehe Bild 5).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2024_02\/pic_1489_004.png\" alt=\"Hinweistext in der Microsoft-Dokumentation\" width=\"649,559\" height=\"169,1065\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 5: Hinweistext in der Microsoft-Dokumentation<\/span><\/b><\/p>\n<p>Hier wird auch ein Workaround vorgeschlagen. Man soll die Methode <b>RunCommand <\/b>des <b>Application<\/b>-Objekts mit dem Parameter <b>acCmdSaveRecord <\/b>aufrufen, um den Datensatz zu speichern und so den Fehler zu provozieren. Erst danach soll man das Formular mit <b>DoCmd.Close <\/b>schlie&szlig;en:<\/p>\n<pre>RunCommand acCmdSaveRecord\r\nDoCmd.Close acForm, Me.Name<\/pre>\n<p>Dies l&ouml;st tats&auml;chlich einen Laufzeitfehler aus. Mit einem Klick auf die <b>Debuggen<\/b>-Schaltfl&auml;chen sehen wir, dass die Anweisung <b>RunCommand acCmdSaveRecord <\/b>diesen ausgel&ouml;st hat (siehe Bild 6).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2024_02\/pic_1489_005.png\" alt=\"Laufzeitfehler beim Speichern des Datensatzes\" width=\"649,559\" height=\"420,0092\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 6: Laufzeitfehler beim Speichern des Datensatzes<\/span><\/b><\/p>\n<p>Das ist nat&uuml;rlich keine L&ouml;sung f&uuml;r eine professionelle Anwendung.<\/p>\n<h2>Eigene Fehlermeldung anzeigen<\/h2>\n<p>Also fangen wir den Fehler ab, der gegebenenfalls beim Speichern des Datensatzes mit <b>RunCommand acCmdSaveRecord <\/b>ausgel&ouml;st wird, und erweitern die Prozedur mit unserer eigenen Fehlerbehandlung:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>cmdOK_Click()\r\n     <span style=\"color:blue;\">Dim <\/span>lngError<span style=\"color:blue;\"> As Long<\/span>\r\n     On Error Resume <span style=\"color:blue;\">Next<\/span>\r\n     RunCommand acCmdSaveRecord\r\n     lngError = Err.Number\r\n     Select Case lngError\r\n         <span style=\"color:blue;\">Case <\/span>3314\r\n             <span style=\"color:blue;\">MsgBox<\/span> Err.Description, vbExclamation + _\r\n                 vbOKOnly, \"Fehlende Eingabe\"\r\n         <span style=\"color:blue;\">Case <\/span>0\r\n     <span style=\"color:blue;\">End Select<\/span>\r\n     <span style=\"color:blue;\">On Error GoTo<\/span> 0\r\n     <span style=\"color:blue;\">If <\/span>lngError = 0<span style=\"color:blue;\"> Then<\/span>\r\n         DoCmd.Close acForm, Me.Name\r\n     <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Damit erhalten wir nun eine Meldung wie in Bild 7. Noch sch&ouml;ner w&auml;re es allerdings, wenn wir nach dem Best&auml;tigen der Meldung durch den Benutzer noch den Fokus in das betroffene Feld setzen k&ouml;nnten. Dazu m&uuml;ssen wir die Fehlermeldung parsen, um das Feld auszulesen. Vorher erweitern wir allerdings die Prozedur <b>cmdOK_Click<\/b> noch um ein paar Zeilen (siehe Listing 1).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2024_02\/pic_1489_007.png\" alt=\"Unsere eigene Fehlermeldung\" width=\"424,5589\" height=\"437,2323\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 7: Unsere eigene Fehlermeldung<\/span><\/b><\/p>\n<p>Hier versuchen wir nun, bei deaktivierter, eingebauter Fehlerbehandlung den Datensatz zu speichern. Dabei speichern wir die Fehlernummer und die Fehlermeldung in den Variablen <b>lngErrorNumber <\/b>und <b>strErrorDescription<\/b>.<\/p>\n<p>Nach dem erneuten Aktivieren der eingebauten Fehlerbehandlung pr&uuml;fen wir, welche Fehlernummer aufgetaucht ist. Ist es die Nummer <b>3314<\/b>, die ausgel&ouml;st wird, wenn ein Pflichtfeld nicht gef&uuml;llt wurde, zeigen wir als Erstes eine entsprechende Fehlermeldung an. <\/p>\n<p>Dann wollen wir herausfinden, welches Feld den Fehler verursacht hat. Die Fehlermeldung hat immer folgendes Format:<\/p>\n<pre>Sie m&uuml;ssen einen Wert in das Feld ''Tabellenname.Feldname'' eingeben.<\/pre>\n<p>Hier wollen wir nun den Feldnamen extrahieren. Das erledigen wir mit der folgenden Funktion:<\/p>\n<pre><span style=\"color:blue;\">Private Function <\/span>GetFieldFromErrorDescription( _\r\n         strDescription<span style=\"color:blue;\"> As String<\/span>)<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strField<span style=\"color:blue;\"> As String<\/span>\r\n     strField = <span style=\"color:blue;\">Mid<\/span>(strDescription, _\r\n         <span style=\"color:blue;\">InStr<\/span>(1, strDescription, \"''\") + 1)\r\n     strField = <span style=\"color:blue;\">Left<\/span>(strField, <span style=\"color:blue;\">InStr<\/span>(1, strField, \"''\") - 1)\r\n     strField = <span style=\"color:blue;\">Mid<\/span>(strField, <span style=\"color:blue;\">InStr<\/span>(1, strField, \".\") + 1)\r\n     GetFieldFromErrorDescription = strField\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p>Die Funktion liest als Erstes den Teil der Meldung in die Variable <b>strField <\/b>ein, die sich rechts vom ersten Hochkomma befindet, im Beispiel landet also <b>Tabellenname.Feldname&#8220; eingeben. <\/b>in der Variablen. Dann lesen wir hiervon den Teil bis zum n&auml;chsten Hochkomma ein, sodass <b>Tabellenname.Feldname<\/b> verbleibt. Hier trennen wir nun noch den Teil bis zum Punkt ab und erhalten zum Beispiel <b>Feldname<\/b>.<\/p>\n<p>Damit gehen wir dann in eine zweite Funktion, die uns das Steuerelement liefern soll, das an dieses Feld gebunden ist. In vielen F&auml;llen haben gebundene Steuerelemente den gleichen Namen wie das Feld, an das sie gebunden sind. Das Steuerelement kann aber auch umbenannt worden sein, also m&uuml;ssen wir auf Nummer sicher gehen. Das erledigen wir mit einer weiteren Funktion, der wir einen Verweis auf das Formular und den Feldnamen als Parameter &uuml;bergeben:<\/p>\n<pre><span style=\"color:blue;\">Private Function <\/span>GetBoundControlForField(frm<span style=\"color:blue;\"> As <\/span>Form, _\r\n         strField<span style=\"color:blue;\"> As String<\/span>)<span style=\"color:blue;\"> As <\/span>Control\r\n     <span style=\"color:blue;\">Dim <\/span>ctl<span style=\"color:blue;\"> As <\/span>Control\r\n     <span style=\"color:blue;\">Dim <\/span>strControlSource<span style=\"color:blue;\"> As String<\/span>\r\n     For Each ctl In frm.Controls\r\n         On Error Resume <span style=\"color:blue;\">Next<\/span>\r\n         strControlSource = ctl.ControlSource\r\n         <span style=\"color:blue;\">On Error GoTo<\/span> 0\r\n         <span style=\"color:blue;\">If <\/span>strControlSource = strField<span style=\"color:blue;\"> Then<\/span>\r\n             <span style=\"color:blue;\">Set<\/span> GetBoundControlForField = ctl\r\n             <span style=\"color:blue;\">Exit Function<\/span>\r\n         <span style=\"color:blue;\">End If<\/span>\r\n     <span style=\"color:blue;\">Next<\/span> ctl\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p>Hier durchlaufen wir alle Steuerelemente in einer <b>For Each<\/b>-Schleife und lesen bei ausgeschalteter, eingebauter Fehlerbehandlung den Wert der Eigenschaft <b>ControlSource <\/b>in die Variable <b>strControlSource <\/b>ein. Die Fehlerbehandlung m&uuml;ssen wir deshalb ausschalten, weil nicht alle Steuerelemente diese Eigenschaft haben. Greifen wir dennoch darauf zu, l&ouml;sen wir einen Fehler aus.<\/p>\n<p>Nachdem wir <b>ControlSource <\/b>eingelesen haben, also das Feld, an welches das Steuerelement gebunden ist, vergleichen wir es mit dem mit <b>strField <\/b>gelieferten Feld. Stimmen <b>strControlSource <\/b>und <b>strField <\/b>&uuml;berein, haben wir das an dieses Feld gebundene Steuerelement gefunden und geben dieses als Funktionswert zur&uuml;ck, bevor wir die Funktion mit <b>Exit Function <\/b>verlassen.<\/p>\n<p>Damit k&ouml;nnen wir nun nach Ausgabe der Fehlermeldung den Fokus auf das betroffene Steuerelement legen, damit der Benutzer die Eingabe korrigieren kann.<\/p>\n<h2>Fehler bei nicht erf&uuml;llten G&uuml;ltigkeitsregeln<\/h2>\n<p>Es gibt noch einen weiteren Fehlertyp, bei dem das Speichern des Datensatzes verworfen wird, wenn wir das Formular einfach mit <b>DoCmd.Close <\/b>schlie&szlig;en. Dabei handelt es sich um nicht erf&uuml;llte G&uuml;ltigkeitsregeln auf Tabellenebene. Legen wir diese f&uuml;r das Feld <b>PLZ <\/b>unserer Tabelle auf den folgenden Ausdruck fest:<\/p>\n<pre>L&auml;nge([PLZ])&gt;=4 Und L&auml;nge([PLZ])&lt;=5<\/pre>\n<p>Die G&uuml;ltigkeitsmeldung lautet:<\/p>\n<pre>Die L&auml;nge der PLZ muss zwischen vier und f&uuml;nf Zeichen liegen.<\/pre>\n<p>Wird das Feld gef&uuml;llt und es enth&auml;lt zu viele oder zu wenige Zeichen, l&ouml;st dies den Fehler <b>3316 <\/b>aus. Diesen behandeln wir mit der Fehlermeldung im <b>Case Else<\/b>-Teil der <b>Select Case<\/b>-Bedingung.<\/p>\n<h2>Zusammenfassung und Ausblick<\/h2>\n<p>Gefahr erkannt, Gefahr gebannt. Wenn man dieses Verhalten von Access kennt, kann man dadurch entstehenden Problemen vorbeugen. Dieser Beitrag zeigt, wie das gelingt und wie wir auch noch eine ergonomische L&ouml;sung liefern, bei welcher der Fokus auf das Feld verschoben wird, das den Fehler verursacht.<\/p>\n<p>Das k&ouml;nnten wir auch bei den G&uuml;ltigkeitsmeldungen noch machen, wenn wir dort das betroffene Feld wie bei der Meldung f&uuml;r den Fehler <b>3314 <\/b>in Hochkommata angeben und den Fehler <b>3316 <\/b>zum entsprechenden <b>Case<\/b>-Zweig hinzuf&uuml;gen (siehe Beispieldatenbank).<\/p>\n<h2>Downloads zu diesem Beitrag<\/h2>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>FormulareDatensatzWirdNichtGespeichert.accdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/C193200D-AF5D-4837-B171-9BAEE47683B5\/aiu_1489.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Es gibt seit vielen Jahren einen Bug in Access-Formularen, der m&ouml;glicherweise Entwickler und Benutzer in den Wahnsinn treibt. Dabei geht es darum, dass neue oder ge&auml;nderte Datens&auml;tze beim Schlie&szlig;en des Formulars nicht automatisch gespeichert werden. Stattdessen findet man neue Datens&auml;tze einfach nicht in der entsprechenden Tabelle vor und bei vermeintlich ge&auml;nderten Datens&auml;tzen wurde die &Auml;nderung nicht &uuml;bernommen. Dies geschieht, wenn man das Formular auf eine bestimmte Art schlie&szlig;t und Restriktionen in der zugrunde liegenden Tabelle daf&uuml;r sorgen, dass der Datensatz nicht gespeichert werden kann. Wird zum Beispiel ein Pflichtfeld nicht gef&uuml;llt und das Formular geschlossen, verwirft Access den neuen Datensatz einfach, anstatt eine entsprechende Meldung zu liefern. Dieser Beitrag dokumentiert das Fehlverhalten und zeigt, welche M&ouml;glichkeiten wir zum Umgehen dieses Problems haben.<\/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":[66022024,662024,44000023],"tags":[],"class_list":["post-55001489","post","type-post","status-publish","format-standard","hentry","category-66022024","category-662024","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>Formulare: Datensatz wird nicht gespeichert - 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\/formulare_datensatz_wird_nicht_gespeichert\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Formulare: Datensatz wird nicht gespeichert\" \/>\n<meta property=\"og:description\" content=\"Es gibt seit vielen Jahren einen Bug in Access-Formularen, der m&ouml;glicherweise Entwickler und Benutzer in den Wahnsinn treibt. Dabei geht es darum, dass neue oder ge&auml;nderte Datens&auml;tze beim Schlie&szlig;en des Formulars nicht automatisch gespeichert werden. Stattdessen findet man neue Datens&auml;tze einfach nicht in der entsprechenden Tabelle vor und bei vermeintlich ge&auml;nderten Datens&auml;tzen wurde die &Auml;nderung nicht &uuml;bernommen. Dies geschieht, wenn man das Formular auf eine bestimmte Art schlie&szlig;t und Restriktionen in der zugrunde liegenden Tabelle daf&uuml;r sorgen, dass der Datensatz nicht gespeichert werden kann. Wird zum Beispiel ein Pflichtfeld nicht gef&uuml;llt und das Formular geschlossen, verwirft Access den neuen Datensatz einfach, anstatt eine entsprechende Meldung zu liefern. Dieser Beitrag dokumentiert das Fehlverhalten und zeigt, welche M&ouml;glichkeiten wir zum Umgehen dieses Problems haben.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/formulare_datensatz_wird_nicht_gespeichert\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2024-02-29T18:42:07+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg02.met.vgwort.de\/na\/0cd2f4906e5247a6a575de419fdc456f\" \/>\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=\"9\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/formulare_datensatz_wird_nicht_gespeichert\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/formulare_datensatz_wird_nicht_gespeichert\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Formulare: Datensatz wird nicht gespeichert\",\"datePublished\":\"2024-02-29T18:42:07+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/formulare_datensatz_wird_nicht_gespeichert\\\/\"},\"wordCount\":1303,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/formulare_datensatz_wird_nicht_gespeichert\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg02.met.vgwort.de\\\/na\\\/0cd2f4906e5247a6a575de419fdc456f\",\"articleSection\":[\"2\\\/2024\",\"2024\",\"Mit Formularen arbeiten\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/formulare_datensatz_wird_nicht_gespeichert\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/formulare_datensatz_wird_nicht_gespeichert\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/formulare_datensatz_wird_nicht_gespeichert\\\/\",\"name\":\"Formulare: Datensatz wird nicht gespeichert - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/formulare_datensatz_wird_nicht_gespeichert\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/formulare_datensatz_wird_nicht_gespeichert\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg02.met.vgwort.de\\\/na\\\/0cd2f4906e5247a6a575de419fdc456f\",\"datePublished\":\"2024-02-29T18:42:07+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/formulare_datensatz_wird_nicht_gespeichert\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/formulare_datensatz_wird_nicht_gespeichert\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/formulare_datensatz_wird_nicht_gespeichert\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg02.met.vgwort.de\\\/na\\\/0cd2f4906e5247a6a575de419fdc456f\",\"contentUrl\":\"http:\\\/\\\/vg02.met.vgwort.de\\\/na\\\/0cd2f4906e5247a6a575de419fdc456f\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/formulare_datensatz_wird_nicht_gespeichert\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Formulare: Datensatz wird nicht gespeichert\"}]},{\"@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":"Formulare: Datensatz wird nicht gespeichert - 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\/formulare_datensatz_wird_nicht_gespeichert\/","og_locale":"de_DE","og_type":"article","og_title":"Formulare: Datensatz wird nicht gespeichert","og_description":"Es gibt seit vielen Jahren einen Bug in Access-Formularen, der m&ouml;glicherweise Entwickler und Benutzer in den Wahnsinn treibt. Dabei geht es darum, dass neue oder ge&auml;nderte Datens&auml;tze beim Schlie&szlig;en des Formulars nicht automatisch gespeichert werden. Stattdessen findet man neue Datens&auml;tze einfach nicht in der entsprechenden Tabelle vor und bei vermeintlich ge&auml;nderten Datens&auml;tzen wurde die &Auml;nderung nicht &uuml;bernommen. Dies geschieht, wenn man das Formular auf eine bestimmte Art schlie&szlig;t und Restriktionen in der zugrunde liegenden Tabelle daf&uuml;r sorgen, dass der Datensatz nicht gespeichert werden kann. Wird zum Beispiel ein Pflichtfeld nicht gef&uuml;llt und das Formular geschlossen, verwirft Access den neuen Datensatz einfach, anstatt eine entsprechende Meldung zu liefern. Dieser Beitrag dokumentiert das Fehlverhalten und zeigt, welche M&ouml;glichkeiten wir zum Umgehen dieses Problems haben.","og_url":"https:\/\/access-im-unternehmen.de\/formulare_datensatz_wird_nicht_gespeichert\/","og_site_name":"Access im Unternehmen","article_published_time":"2024-02-29T18:42:07+00:00","og_image":[{"url":"http:\/\/vg02.met.vgwort.de\/na\/0cd2f4906e5247a6a575de419fdc456f","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"9\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/formulare_datensatz_wird_nicht_gespeichert\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/formulare_datensatz_wird_nicht_gespeichert\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Formulare: Datensatz wird nicht gespeichert","datePublished":"2024-02-29T18:42:07+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/formulare_datensatz_wird_nicht_gespeichert\/"},"wordCount":1303,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/formulare_datensatz_wird_nicht_gespeichert\/#primaryimage"},"thumbnailUrl":"http:\/\/vg02.met.vgwort.de\/na\/0cd2f4906e5247a6a575de419fdc456f","articleSection":["2\/2024","2024","Mit Formularen arbeiten"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/formulare_datensatz_wird_nicht_gespeichert\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/formulare_datensatz_wird_nicht_gespeichert\/","url":"https:\/\/access-im-unternehmen.de\/formulare_datensatz_wird_nicht_gespeichert\/","name":"Formulare: Datensatz wird nicht gespeichert - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/formulare_datensatz_wird_nicht_gespeichert\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/formulare_datensatz_wird_nicht_gespeichert\/#primaryimage"},"thumbnailUrl":"http:\/\/vg02.met.vgwort.de\/na\/0cd2f4906e5247a6a575de419fdc456f","datePublished":"2024-02-29T18:42:07+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/formulare_datensatz_wird_nicht_gespeichert\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/formulare_datensatz_wird_nicht_gespeichert\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/formulare_datensatz_wird_nicht_gespeichert\/#primaryimage","url":"http:\/\/vg02.met.vgwort.de\/na\/0cd2f4906e5247a6a575de419fdc456f","contentUrl":"http:\/\/vg02.met.vgwort.de\/na\/0cd2f4906e5247a6a575de419fdc456f"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/formulare_datensatz_wird_nicht_gespeichert\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Formulare: Datensatz wird nicht gespeichert"}]},{"@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\/55001489","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=55001489"}],"version-history":[{"count":2,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001489\/revisions"}],"predecessor-version":[{"id":88075253,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001489\/revisions\/88075253"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55001489"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55001489"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55001489"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}