[英]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.