2016-07-29 13 views
0

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

+0

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

+0

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 –

+1

'Undo' und dann 'Response = 0' angezeigt wurde. – Brad

Antwort

3

Ich mache diesen Kommentar in eine Antwort. Dies ist der Kern dessen, wie man von der Form_Error zurückkehrt.

Sie könnten mehr tun wie eine Nachricht auf dem Bildschirm anzeigen, was Sie getan haben, um Sie Benutzer dann verstecken Sie es auf einem Timer-Ereignis. Nur etwas, damit sie nicht sicher sind, warum ihre Daten weggegangen sind.

+1

Ich habe bereits die Nachrichten bearbeitet, habe gerade versucht, sehr langatmige Versionen zu tun, was Undo kann für mich tun. Danke nochmal, akzeptierte Antwort. –

1

Setzen Sie yourglobal auf das Gotfocus-Ereignis des Steuerelements. Dann für das Fehlerereignis verwenden Sie

If err.number = 2107 then 
yourfield = yourglobal 
err.clear 
end if