Validation 使用Access 2003 ADP项目执行表单验证

Validation 使用Access 2003 ADP项目执行表单验证,validation,ms-access,vba,Validation,Ms Access,Vba,我正在开发一个使用MS SQLServer后端的Access 2003数据库 我正在尝试进行表单验证,遇到了一些问题 似乎忽略了每个字段的ValidationRule 如果不让数据库执行验证,我无法确定应该覆盖什么事件来强制执行验证。(我并不反对这一点,我只是不知道如何捕捉错误消息,而不是将它们显示给用户) 我尝试过通过禁止关闭和强制使用“关闭按钮”来绕过数字2,但用户可以通过按tab键或按下底部的“下一个记录”按钮来绕过它 如果您有任何建议,我们将不胜感激。如果您给我们一个验证规则的示例,可能

我正在开发一个使用MS SQLServer后端的Access 2003数据库

我正在尝试进行表单验证,遇到了一些问题

  • 似乎忽略了每个字段的ValidationRule
  • 如果不让数据库执行验证,我无法确定应该覆盖什么事件来强制执行验证。(我并不反对这一点,我只是不知道如何捕捉错误消息,而不是将它们显示给用户)
  • 我尝试过通过禁止关闭和强制使用“关闭按钮”来绕过数字2,但用户可以通过按tab键或按下底部的“下一个记录”按钮来绕过它


    如果您有任何建议,我们将不胜感激。

    如果您给我们一个验证规则的示例,可能会有所帮助

    然而,我一直有在更新之前进行验证的习惯(特别是当我有更复杂的验证算法时)

    更新: 我做了一些实验,似乎只有在您对字段进行更新时才会检查字段的验证规则,但如果您在表单的其他地方进行更新,则不会检查,并且在保存记录时也不会检查。因此,我认为您的解决方案是在更新之前将验证转移到Form_

    或者您可以将表中的列设置为非空-这将强制用户对字段执行某些操作


    或者,如果字段必须是“测试”字段,则您可以通过设置默认值并锁定字段以使用户无法更改它来回避整个过程。

    如果您使用的是validation rules属性,则可以在Form Error event(表单错误事件)中捕获验证和重复键错误,以及其他内容:

    Private Sub Form_Error(DataErr As Integer, Response As Integer)
       If DataErr=2107 Then
          MsgBox "Validation error! "  & ActiveControl.Name
       End If
    End Sub
    
    您可以使用在表单级别定义的变量强制使用关闭按钮,并将其设置为false,除非单击按钮

    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
    

    From:

    您可以通过将表单的导航按钮属性设置为“否”来隐藏导航按钮。您还可以通过将表单的循环属性设置为“当前记录”来禁止对新记录进行制表


    对于Access中的任何非竞争性应用程序界面,我通常会将表单锁得很紧,并根据需要提供自己的导航按钮、关闭按钮等。

    在OnLoad事件中将布尔值设置为False是毫无用处的,因为一个未初始化的布尔定义等于False。我认为不管任何已知的默认值如何初始化所有变量都是公认的最佳实践。这是很多非VB社区喜欢挑刺的小毛病之一。这是我最后的改变:)我认为当AllowClose设置为Form_Load时,它更容易理解。