Ich hatte eine Anfrage, den Wert in einem Feld von Benutzer auf den vorherigen Wert zurückgegeben, wenn es Datenvalidierungskriterien nicht besteht .MS-Access VBA: Wie Feld-Wert auf alten Wert zurückzusetzen, wenn Form_Error-Ereignis ausgelöst wird
Wo kann ich dies im BeforeUpdate
Ereignis einfangen Ich verwende eine globale Variable, um die .oldvalue
speichern und dann im AfterUpdate
Ereignis neu zuweisen.
jedoch die Datenüberprüfung von Tabellenstruktur Ausnahmen ausgelöst (wie Text in einem Zahlenfeld) lösen das Form_Error
Ereignis vor dem BeforeUpdate
Ereignisse und das Form_Error
Ereignis bezieht sich nicht auf ein bestimmtes Feld, das ich als alten Wert speichern kann.
Ich konnte dieses Problem umgehen, indem Sie die Tabelle als völlig freien Textes in allen Bereichen mit nulls Einrichtung erlaubt, so dass es kein Form_Error
Ereignis ausgelöst und alle Validierung behandeln in BeforeUpdate
Ist das wirklich so, wie ich müssen Sie das tun? Es scheint seltsam zu sein, eine unsinnige Tabellenstruktur einzurichten, um Fehler zu behandeln, aber ich habe Mühe, mit einer anderen Methode zu kommen
Warum das Form Error Event überhaupt behandeln? Es scheint zu tun, was es sein sollte, und warnt vor Validierungsfehlern. Dies sind wahrscheinlich keine Werte, die Sie für die Validierung auf Datensatzebene in Betracht ziehen oder verwenden würden. Sie sind der falsche Datentyp/falsch auf einer grundlegenderen Ebene als die Validierung von Geschäftsregeln. Die Verarbeitung sollte/kann nicht über diese Stufe hinaus erfolgen. – Brad
Ja, aber das Standardverhalten für dieses Ereignis besteht darin, den Wert zu belassen, den der Benutzer in die Zelle eingegeben hat. Wenn der Wert zum Beispiel vorher 900 war und der Benutzer '1k' eingibt, wird der Fehler markiert, aber '1k' bleibt der Wert in der Zelle, bis der Benutzer ihn manuell in einen gültigen Wert ändert oder aussteigt. Ich möchte, dass der Zellenwert auf den ursprünglichen Wert (900) zurückgesetzt wird, nachdem die Fehlermeldung –
'Undo' und dann 'Response = 0' angezeigt wurde. – Brad