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

问题描述 投票:0回答:2

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

我可以处理此错误并禁用带有Form_Error事件的消息,但无论如何,焦点保持设置为日期textBox,当我尝试单击取消按钮,并且永远不会点击按钮。

ms-access-2013 access
2个回答
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将关闭所点击的任何形式。

你可以把它变成一个优势,用户可以看到删除错误输入...


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

如果可以在另一个文本框中重复相同的事情(例如第二个日期)或者为其他控件获取相同的行为,我会将可重复的操作拆分为重用。

© www.soinside.com 2019 - 2024. All rights reserved.