繁体   English   中英

如何完全忽略 MS Access 错误 2113?

[英]How to ignore MS Access error 2113 totally?

我有一个格式化为“短日期”的文本框。 当我将无效数据放入字段中时,例如随机“dfsdf”,并尝试更改焦点,表单会抛出验证错误 2113。我的目标是让用户有机会通过单击“取消”按钮关闭表单而没有任何问题,因为无论他在日期文本框中输入什么,同时取消表单。

我可以处理此错误并使用 Form_Error 事件禁用消息,但是当我尝试单击“取消”按钮时,焦点仍然设置为日期文本框,并且永远不会单击按钮。

我使用了一个设置,可能与您的类似:

Private Sub Form_Error(DataErr As Integer, Response As Integer)

    Const InvalidDate   As Long = 2113

    Select Case DataErr
        Case InvalidDate
            MsgBox "Invalid date!"
            Response = acDataErrContinue
            ' Cancel invalid entry.
            Me.Undo
            ' DoCmd.Close
        Case Else
            Response = acDataErrDisplay
    End Select

End Sub

问题是,这将在您的按钮获得焦点之前触发。 这意味着,表单甚至不知道您单击了什么,只知道它位于日期文本框之外的某个地方。

因此, DoCmd.Close将关闭任何点击的表单。

您可以将其转化为优势,即用户能够观看错误输入的删除......

您应该使用 after update 事件来检查用户是否输入了有效日期,如果不是,则清除或撤消。 在不知道表单控件的情况下,我无法判断您是否允许用户更改表值或者您是否正在使用事务。
伪代码:

Private Sub Text1_AfterUpdate()
   If Check_If_Date Then
      Execute_Code
   Else
   End If
End Sub

Private Function Check_If_Date() as Boolean
   If IsDate(Text1) then
      Check_If_Date = True
   Else
      Check_If_Date = False
      Select Case msgbox("Not a valid date", vbOKCancel)
         case vbOK
            reset_value
         case vbCancel
            Close_Form
         case else
      End Select
   End If
End Sub

Private Sub Reset_Value()
   'need to clear value or undo 
End Sub

Public Sub Execute_Code()
   'Code to save values or allow Update to complete
End Sub

Private Sub Close_Form()
   'Code For Closing Form and logging errors
End Sub

我拆分了可重复的操作以供重用,以防相同的事情可以在另一个文本框中重复,例如第二个日期或为其他控件获得相同的行为。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM