Ein abgelehntes Speichern erscheint nicht in der Zusammenfassung des Validators
Die Datenquelle lehnt einen Datensatz ab – durch eine Gültigkeitsregel der Tabelle oder durch einen Datendienst, der
ihn über seinen ODBC-Treiber zurückweist –, und der Datensatz bleibt ungespeichert, aber die Zusammenfassung des
WklValidator bleibt leer (ErrorSummary ist leer, ErrorCount ist 0). Stattdessen erreicht eine Fehlernummer wie
3155 oder 3316 den VBA-Code.
Umgebung
WKL Forms Object Library ab 1.31, HandleDataErrors = True. Microsoft 365 Access, 32 Bit; andere Versionen werden nicht
unterstützt.
Ursache
Der Validator erhält einen solchen Fehler über das Fehlerereignis des Formulars (Form_Error). Access löst dieses
Ereignis nur bei einem Speichern aus, das es von sich aus während einer Benutzeraktion vornimmt: Der Benutzer wechselt
zu einem anderen Datensatz, schließt das Formular oder klickt aus einem Bearbeitungsformular in einen anderen Teil
des Fensters. Ein Speichern, das VBA-Code anstößt, meldet den Fehler diesem Code als Laufzeitfehler, und Access löst
kein Fehlerereignis aus:
Me.Dirty = FalseoderRunCommand acCmdSaveRecord;- Verschieben des Fokus per Code, zum Beispiel
area!grdMain.SetFocusaus einem angedockten Bearbeitungsformular: Das Speichern, das Access bei dieser Gelegenheit vornimmt, gehört zu dem Code, der den Fokus verschoben hat.
Das gilt für beide Arten der Ablehnung: eine Gültigkeitsregel der Tabelle (Fehler 3316) und einen Datendienst, der den Datensatz über seinen ODBC-Treiber mit HTTP 422 zurückweist (Fehler 3155). In beiden Fällen bleibt der Datensatz ungespeichert und geändert, der Fehler erreicht den Code, und der Validator erhält kein Fehlerereignis; seine Zusammenfassung bleibt deshalb leer.
Lösung
Fangen Sie den Fehler in dem Code ab, der speichert oder den Fokus verschiebt, und übergeben Sie seinen Text an den Validator:
Private Sub cmdSpeichern_Click() On Error GoTo Abgelehnt Me.Dirty = False Exit Sub Abgelehnt: Me!Validator1.Object.SetError "", Err.Description End SubBei einem ODBC-Fehler ist
Err.Descriptionder allgemeine Text von Access („ODBC-Aufruf fehlgeschlagen“); die Gründe des Treibers stehen inDBEngine.Errors.- Ein abgelehntes Speichern, das
Form_Errornie sieht, wurde von Code angestoßen (Me.Dirty = False,DoCmd.RunCommand acCmdSaveRecord): Behandeln Sie den Fehler dort, wo der Code speichert.