Durchführen von Formular-Validierung mit einer Access 2003-ADP-Projekt
-
05-07-2019 - |
Frage
Ich entwickle eine Access 2003-Datenbank, die einen MS SQL Server-Backend verwendet.
Ich versuche Form Validation zu tun und einige Probleme erlebe.
- ValidationRule für jedes Feld scheint ignoriert werden
- Ich kann nicht herausfinden, welches Ereignis soll ich außer Kraft setzen Validierung zu erzwingen, ohne die Datenbank es tun. (Ich bin nicht dagegen, es ist nur mir unbekannt, wie ich Fehlermeldungen fangen würde, anstatt sie für den Benutzer)
Ich habe versucht, immer um die Nummer 2 durch Schließen disallowing und die Verwendung eines „Close Button“ Erzwingen, aber der Benutzer die Seite kann es Schritt für Tab-Taste oder über die „Next Record“ -Button am unteren Rand drücken.
würde Irgendwelche Vorschläge sehr geschätzt.
Lösung
Wenn Sie die Validierungsregeln Eigenschaft verwenden, können Sie die Validierung fangen und Schlüsselfehler duplizieren, unter anderem in Form Fehlerereignis:
Private Sub Form_Error(DataErr As Integer, Response As Integer)
If DataErr=2107 Then
MsgBox "Validation error! " & ActiveControl.Name
End If
End Sub
Sie können die Verwendung Ihrer Schließen-Schaltfläche mit einer variablen erzwingen auf Formularebene definiert und auf false gesetzt, wenn Ihr Schaltfläche geklickt wird.
Option Compare Database
Option Explicit
Public AllowClose As Boolean
Private Sub Form_Load()
AllowClose = False
End Sub
Private Sub Form_Unload(Cancel As Integer)
Cancel = Not AllowClose
End Sub
Private Sub cmdClose_Click()
On Error GoTo Err_cmdClose_Click
AllowClose = True
DoCmd.Close
Exit_cmdClose_Click:
Exit Sub
Err_cmdClose_Click:
MsgBox Err.Description
Resume Exit_cmdClose_Click
End Sub
Andere Tipps
Wenn Sie uns ein Beispiel für einen Ihrer Validierungsregeln geben, es könnte helfen.
Allerdings habe ich vor der Aktualisierung in die Validierung der Umsetzung unter der Gewohnheit gewesen (vor allem, wenn ich komplexere Validierungsalgorithmen haben)
Update: Ich habe einige Experimente und es scheint, dass die Gültigkeitsregel für das Feld nur überprüft, wenn Sie ein Update auf das Feld, aber nicht, wenn Sie ein Update irgendwo anders auf dem Formular machen, und nicht, wenn Sie den Datensatz speichern. Ich denke also, Ihre Lösung ist die Validierung Form_BeforeUpdate zu bewegen.
oder Sie könnten die Spalte in der Tabelle nicht-null machen -., Die die Nutzer etwas mit dem Feld zwingen würde,
oder, wenn das Feld „Testing“ sein muss, dann könnte man das Ganze Schritt Seite durch einen Standardwert einstellen und die Feldverriegelungs so dass der Benutzer kann es nicht ändern.
Sie können mit den Navigationstasten ausblenden, indem Sie die Form der Navigationstasten Eigenschaft auf „Nein“ einstellen Sie können auch zu einem neuen Datensatz nicht zulassen Tabbing durch die Form der Zyklus-Eigenschaft auf Einstellung „Aktuellen Datensatz.“
Mit jeder nicht trivialer Anwendungsschnittstelle in Access, ich in der Regel die Form sperre ziemlich eng und meine eigenen nav Knöpfe, Schließen-Schaltfläche liefern usw. je nach Bedarf.