Как полностью игнорировать ошибку MS Access 2113? - PullRequest
0 голосов
/ 15 сентября 2018

У меня есть текстовое поле, отформатированное как «Короткая дата». Когда я помещаю недопустимые данные в поле, например, случайное «dfsdf», и пытаюсь изменить фокус, форма бросает проверку Ошибка 2113. Моя цель - дать пользователю возможность без проблем закрыть форму, нажав на кнопку «Отмена», потому что независимо от того, что он вводил в текстовое поле «Дата», пока форма отменяется.

Я могу обработать эту ошибку и отключить сообщение с помощью события Form_Error, но в любом случае фокус остается установленным на dateBox, когда я пытаюсь нажать кнопку «Отмена», и кнопка никогда не нажимается.

Ответы [ 2 ]

0 голосов
/ 17 сентября 2018

Вы должны использовать событие после обновления, чтобы проверить, если пользователь ввел правильную дату, если нет, то очистите или отмените. Не зная элементов управления вашей формы, я не могу сказать, позволяете ли вы пользователям изменять значения таблиц или вы используете транзакции.
псевдокод:

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

Я разделил повторяющиеся действия для повторного использования в случае, если то же самое можно повторить в другом текстовом поле, например, на второй дате, или чтобы получить такое же поведение для других элементов управления.

0 голосов
/ 15 сентября 2018

Я использую настройку, возможно похожую на вашу:

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 закроет форму для того, что было нажато.

Вы можете превратить это в преимущество, которое пользователь может наблюдать за удалением ошибочного ввода..

...