|
|
|
| есть форма, источник строк таблица1.
на второй столбец таблицы1 (например) наложено условие "Not is Null"
при открытии в форме открывается новая запись (DoCmd , , acNewRec)
допустим на форме есть текстовые поля и поля со списками...
если пользователь осуществил выбор или ввод какого нибудь значения кроме второго столбца, потом например передумал заводить новую запись и закрыл форму.. то возникает ошибка при попытке сохранить запись в таблицу так как на второй столбец наложено соответствующее условие.
Можно ли вместо неточного системного сообщения и закрытия формы с ошибками, перехватить ошибку (похоже код ее 3317), выдать пользователю свое сообщение в котором указать какой именно столбец обязательно надо заполнить, и после этого прервать процедуру закрытия формы??? | |
|
| |
|
|
|
| Как-то так можно попробовать. От Гетца, с моими вмешательствами.
Private Sub Form_Error(DataErr As Integer, Response As Integer)
Const adhcErrDataValidation = 3317
Const adhcErrDataType = 2113
Const adhcErrDuplicateKey = 3022
Const adhcErrNullKey = 3058
Dim strMsg As String
Select Case DataErr
Case 3316, 2473
strMsg = "Обязательное поле " & _
"осталось незаполненным."
strMsg = strMsg & vbCrLf & "Введите данные в поле , " & _
"или нажмите Отмена для выхода."
MsgBox strMsg, vbInformation, Me.Caption
Response = acDataErrContinue
Case adhcErrDataValidation, adhcErrDataType
strMsg = "Введенное значение не соответствует " & _
"требованиям для этого поля."
strMsg = strMsg & vbCrLf & "Введите снова, " & _
"или нажмите Отмена для выхода."
MsgBox strMsg, vbInformation, Me.Caption
Response = acDataErrContinue
Case adhcErrDuplicateKey
strMsg = "You've attempted to add a record " & _
"that duplicates an existing key value."
strMsg = strMsg & vbCrLf & "Введите снова, " & _
"или нажмите Отмена для выхода."
MsgBox strMsg, vbInformation, Me.Caption
Response = acDataErrContinue
Case adhcErrNullKey
strMsg = "You've attempted to add a new " & _
"record with an empty key value."
strMsg = strMsg & vbCrLf & "Please supply " & _
"a key value, or press Escape to undo your entry."
MsgBox strMsg, vbInformation, Me.Caption
Response = acDataErrContinue
Case Else
' It's an unexpected error. Let Access handle it.
Response = acDataErrDisplay
End Select
End Sub
|
| |
|
| |
|
|
|
| о, здорово, щас попробую, спасибо!!!... а у меня еще после 3317 вываливалась ошибка 2169.. или она не будет вываливаться после написания вашего кода? | |
|
| |
|
|
|
| А я бы на Form_BeforeUpdate проверял значения поля и отменял сохранение (Cancel = True).
И условие в свойствах не залавал. | |
|
| |
|
|
|
| а если просто открыть форму (она открывается на новой записи, т.е по умолчнию это поле пустое).. тогда ваш вариант не даст зарытся форме нормально? | |
|
| |
|
|
|
| а если просто открыть форму (она открывается на новой записи, т.е по умолчнию это поле пустое).. тогда ваш вариант не даст зарытся форме нормально? | |
|
| |
|
|
|
| Ваш пример красив, но он не ловит ошибку 2169, которая все равно вываливается почемуто;( | |
|
| |
|
|
|
| А вот если сочесть отлов 2169 через form_error и ваш способ то пользователь ничего не заамечает! И форма отрабатывает как надо, не занося в таблицу пустых значений! | |
|
| |
|
|
|
|
а если просто открыть форму (она открывается на новой записи, т.е по умолчнию это поле пустое).. тогда ваш вариант не даст зарытся форме нормально?
|
Вы уверены?
Событие Before_Update возникает, если запись редактировалась. Если перейти на новую запись и закрыть форму - ничего не произоцдет. | |
|
| |
|
|
|
| такой способ позволяет избежать ошибки 3317... но все равно остается почему-то 2169... и она выдает системное сообщение о невозможности сохранить объект базы...
я ее смог только через form_error пропустить, чтобы пользователь не увидел... может как то по другому надо было решить? | |
|
| |
|
|
|
| правильно я понял что acDataErrContinue позволяет пропустить системное значение? | |
|
| |