Es gibt seit vielen Jahren einen Bug in Access-Formularen, der möglicherweise Entwickler und Benutzer in den Wahnsinn treibt. Dabei geht es darum, dass neue oder geänderte Datensätze beim Schließen des Formulars nicht automatisch gespeichert werden. Stattdessen findet man neue Datensätze einfach nicht in der entsprechenden Tabelle vor und bei vermeintlich geänderten Datensätzen wurde die Änderung nicht übernommen. Dies geschieht, wenn man das Formular auf eine bestimmte Art schließt und Restriktionen in der zugrunde liegenden Tabelle dafür sorgen, dass der Datensatz nicht gespeichert werden kann. Wird zum Beispiel ein Pflichtfeld nicht gefü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öglichkeiten wir zum Umgehen dieses Problems haben.
Tabelle mit Restriktionen
Voraussetzung für das beschriebene Verhalten ist, dass das Formular eine Tabelle anzeigt, für die es eine Restriktion gibt, die beim Speichern nicht erfüllt wurde. Schauen wir uns zum Beispiel die Tabelle tblMitglieder an, bei der wir für die beiden Felder Vorname und Nachname die Eigenschaft Eingabe erforderlich auf den Wert Ja eingestellt haben (siehe Bild 1).

Bild 1: Tabelle mit Restriktion für das Feld Vorname
Schon in der Datenblattansicht fü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üllt wird.

Bild 2: Meldung beim Verletzen der Restriktion
Tabelle mit Restriktionen im Formular
Schauen wir uns nun das Formular frmMitgliederDetails an, das die Daten der Tabelle tblMitglieder anzeigt.
Legen wir hier einen neuen Datensatz an, ohne das Feld Vorname auszufüllen, und versuchen, das Formular über die Schließen-Schaltfläche zu schließen, erscheint die gleiche Meldung, die wir bereits aus der Datenblattansicht der Tabelle kennen (siehe Bild 3).

Bild 3: Meldung auch im Formular beim Schließen mit der Taste X
Anschließend zeigt Access noch eine weitere Meldung an, die uns die Möglichkeit bietet, das Formular ohne Speichern der Änderung zu schließen oder die Eingabe fortzusetzen (siehe Bild 4).

Bild 4: Folgemeldung nach dem Hinweis auf die Verletzung der Restriktion
Problem beim Schließen mit DoCmd.Close
Was also ist das Problem? Dieses tritt auf, wenn wir eine Schaltfläche wie cmdOK dazu nutzen, das Formular mit der folgenden Prozedur zu schließen:
Private Sub cmdOK_Click() DoCmd.Close acForm, Me.Name End Sub
Das Formular wird geschlossen, ohne das eine Fehlermeldung wegen der Verletzung der Restriktion angezeigt wird – allerdings finden wir anschließend auch keinen neuen Datensatz in der zugrunde liegenden Tabelle. Das Problem wird also durch die Kombination aus DoCmd.Close und der Verletzung einer Restriktion ausgelöst.
Auch wenn wir die Methode DoCmd.Close von außen aufrufen, wird das Formular ohne Meldung und ohne Anzeige einer Meldung geschlossen – und auch hier wird der Datensatz einfach verworfen:
DoCmd.Close acForm, "frmMitgliederDetails"
Immerhin finden wir mittlerweile einen entsprechenden Hinweis auf der Seite zum DoCmd.Close-Befehl von Microsoft (siehe Bild 5).

Bild 5: Hinweistext in der Microsoft-Dokumentation
Hier wird auch ein Workaround vorgeschlagen. Man soll die Methode RunCommand des Application-Objekts mit dem Parameter acCmdSaveRecord aufrufen, um den Datensatz zu speichern und so den Fehler zu provozieren. Erst danach soll man das Formular mit DoCmd.Close schließen:
RunCommand acCmdSaveRecord DoCmd.Close acForm, Me.Name
Dies löst tatsächlich einen Laufzeitfehler aus. Mit einem Klick auf die Debuggen-Schaltflächen sehen wir, dass die Anweisung RunCommand acCmdSaveRecord diesen ausgelöst hat (siehe Bild 6).

Nur für Abonnenten
Ab hier wird’s wirklich spannend – der Rest ist exklusiv für Abonnenten.
Mit dem Abo von Access im Unternehmen bekommst du den kompletten Artikel – inklusive vollständigem Code, Beispieldatenbank und Schritt-für-Schritt-Erklärung.
So sparst du dir stundenlanges Herumprobieren, vermeidest teure Fehler in deiner Access-Anwendung und kannst Lösungen direkt in deinem Unternehmen einsetzen, statt nur darüber zu lesen.
Teste Access im Unternehmen jetzt 4 Wochen lang kostenlos: Voller Zugriff auf alle Artikel, Downloads und Beispieldatenbanken. Kein Risiko – wenn es für dich nicht passt, kündigst du einfach innerhalb der ersten vier Wochen.
Bereits Abonnent? Hier einloggen
Kostenlos & unverbindlich
Oder hast Du eine konkrete Frage zu Deiner eigenen Access-Anwendung?
Vielleicht stellt Deine Anwendung Dich vor eine Herausforderung, zu der Du bisher keine Lösung findest. Schlechte Performance, kein ausreichender Zugriffsschutz, Du bist unsicher über Dein Datenmodell oder Dein Code liefert unerklärliche Fehler?
In unserem kostenlosen Access-Audit schaut sich André Minhorst persönlich gemeinsam mit Dir Deine Lösung per Zoom an – und zeigt Dir, wo Datenmodell, VBA-Code, Ergonomie und Sicherheit Optimierungspotenzial bieten.
Jetzt kostenloses Access-Audit anfordern →