Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: ошибки при закрытии формы
 
 автор: joka   (20.03.2009 в 14:53)   личное сообщение
 
 

есть форма, источник строк таблица1.
на второй столбец таблицы1 (например) наложено условие "Not is Null"
при открытии в форме открывается новая запись (DoCmd , , acNewRec)
допустим на форме есть текстовые поля и поля со списками...
если пользователь осуществил выбор или ввод какого нибудь значения кроме второго столбца, потом например передумал заводить новую запись и закрыл форму.. то возникает ошибка при попытке сохранить запись в таблицу так как на второй столбец наложено соответствующее условие.
Можно ли вместо неточного системного сообщения и закрытия формы с ошибками, перехватить ошибку (похоже код ее 3317), выдать пользователю свое сообщение в котором указать какой именно столбец обязательно надо заполнить, и после этого прервать процедуру закрытия формы???

  Ответить  
 
 автор: Lukas   (20.03.2009 в 15:05)   личное сообщение
 
 

Как-то так можно попробовать. От Гетца, с моими вмешательствами.

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

  Ответить  
 
 автор: joka   (20.03.2009 в 15:23)   личное сообщение
 
 

о, здорово, щас попробую, спасибо!!!... а у меня еще после 3317 вываливалась ошибка 2169.. или она не будет вываливаться после написания вашего кода?

  Ответить  
 
 автор: Анатолий (Киев)   (20.03.2009 в 15:59)   личное сообщение
 
 

А я бы на Form_BeforeUpdate проверял значения поля и отменял сохранение (Cancel = True).
И условие в свойствах не залавал.

  Ответить  
 
 автор: joka   (20.03.2009 в 16:17)   личное сообщение
 
 

а если просто открыть форму (она открывается на новой записи, т.е по умолчнию это поле пустое).. тогда ваш вариант не даст зарытся форме нормально?

  Ответить  
 
 автор: joka   (20.03.2009 в 16:17)   личное сообщение
 
 

а если просто открыть форму (она открывается на новой записи, т.е по умолчнию это поле пустое).. тогда ваш вариант не даст зарытся форме нормально?

  Ответить  
 
 автор: joka   (20.03.2009 в 16:38)   личное сообщение
 
 

Ваш пример красив, но он не ловит ошибку 2169, которая все равно вываливается почемуто;(

  Ответить  
 
 автор: joka   (20.03.2009 в 16:41)   личное сообщение
 
 

А вот если сочесть отлов 2169 через form_error и ваш способ то пользователь ничего не заамечает! И форма отрабатывает как надо, не занося в таблицу пустых значений!

  Ответить  
 
 автор: Анатолий (Киев)   (20.03.2009 в 17:03)   личное сообщение
 
 


а если просто открыть форму (она открывается на новой записи, т.е по умолчнию это поле пустое).. тогда ваш вариант не даст зарытся форме нормально?


Вы уверены?
Событие Before_Update возникает, если запись редактировалась. Если перейти на новую запись и закрыть форму - ничего не произоцдет.

  Ответить  
 
 автор: joka   (23.03.2009 в 11:08)   личное сообщение
 
 

такой способ позволяет избежать ошибки 3317... но все равно остается почему-то 2169... и она выдает системное сообщение о невозможности сохранить объект базы...
я ее смог только через form_error пропустить, чтобы пользователь не увидел... может как то по другому надо было решить?

  Ответить  
 
 автор: joka   (20.03.2009 в 16:19)   личное сообщение
 
 

правильно я понял что acDataErrContinue позволяет пропустить системное значение?

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList