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

时间:2018-09-15 10:31:23

标签: ms-access-2013 access

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

我可以处理此错误并通过Form_Error事件禁用消息,但是当我尝试单击“取消”按钮时,焦点仍然设置为日期文本框,而按钮从未被单击。

2 个答案:

答案 0 :(得分:0)

我使用的设置可能与您相似:

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将关闭所有单击的表单。

您可以将它变成一个优势,那就是用户可以观察到错误输入的移除...

答案 1 :(得分:0)

您应使用更新后事件检查用户是否输入了有效日期, 如果没有,请清除或撤消。在不知道表单控件的情况下,我无法告诉您是否允许用户更改表值或是否正在使用事务。
伪代码:

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

如果可以在另一个文本框中重复执行相同的操作(例如第二次约会)或使其他控件获得相同的行为,我将重复的操作拆分开以便重复使用。