Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS Access > отловить событие перед вставкой новой записи


Автор: Perun 27.3.2008, 12:25
Нашёл похожую тему, но там не было того что мне надо.
Мне просто перед добаавлением записи(стнадартной кнопкой перехода на форме)
надо проверить все ли поля заполнены - это выпадающие списки и поля ввода. 
Я взял событие Private Sub Form_BeforeInsert(Cancel As Integer)
В нём написал код: 

Код

Private Sub Form_BeforeInsert(Cancel As Integer)
  If IsNull(Me.КодПодкарМат) Then
     MsgBox "Заполните поле 'Подкарантинный материал'"
     Me.КодПодкарМат.SetFocus
     Exit Sub
  End If
  If IsNull(Me.КодЕдИзм) Then
     MsgBox "Заполните поле 'Единица измерения'"
     Me.КодЕдИзм.SetFocus
     Exit Sub
  End If
  If IsNull(Me.Количество) Then
     MsgBox "Заполните поле 'Количество'"
     'Me.Количество.SetFocus
     Exit Sub
  End If
  If IsNull(Me.Страна) Then
     MsgBox "Заполните поле 'Страна происхождения'"
     Me.Страна.SetFocus
     Exit Sub
  End If
  If IsNull(Me.ПринМеры) Then
     MsgBox "Заполните поле 'Принятые меры'"
     Me.ПринМеры.SetFocus
     Exit Sub
  End If
  If IsNull(Me.ОТчётныйПериод) Then
     MsgBox "Заполните поле 'ОтчётныйПериод'"
     Me.ОТчётныйПериод.SetFocus
     Exit Sub
  End If
    DoCmd.GoToRecord , , acNewRec
End Sub


не пойму на какое соытие надо поставиьт код или в коде проблема??

Автор: Akina 27.3.2008, 13:25
В коде проблема есть однозначно - прежде чем обращаться к значению поля, надо перевести на него фокус. Соответственно не
Код

  If IsNull(Me.Контрол) Then
     MsgBox "Заполните поле 'Что-то-там'"
     Me.Контрол.SetFocus
     Exit Sub
  End If

а
Код

  Me.Контрол.SetFocus
  If IsNull(Me.Контрол) Then
     MsgBox "Заполните поле 'Что-то-там'"
     Exit Sub
  End If


Автор: Perun 27.3.2008, 14:52
Ну и что? Поставил breakpoint
на событие - оно срабатывает ещё до выбора объекта из списка!
А надо - при нажатии кнопки перехода(вставка текущей записи и переход к новой) 
отловить событие и проверить заполнение всех полей формы.
??????

Добавлено через 11 минут и 24 секунды
и ещё, как на поле ввода переместить фокус - на SetFocus ругается - нет такого метода

Автор: Akina 27.3.2008, 17:51
Ну правильно... справка так и говорит:
Цитата

The BeforeInsert event occurs when the user types the first character in a new record, but before the record is actually created. 

Соответственно надо использовать 
Цитата

The BeforeUpdate event occurs before changed data in a control or record is updated.

Но я бы оторвал форму от таблицы и сделал занесение (и проверку) данных по нажатию спецовой кнопки.

Автор: Perun 27.3.2008, 18:43
Да, так действительно лучше! Убрать кнопки перехода и создать свои кнопки?
Это так называемый "хороший стиль программирования"

Автор: Akina 27.3.2008, 19:03
А у тебя вообще не будет кнопок перехода - у тебя же форма не будет иметь источника данных, все поля отвязаны от таблиц.

Автор: Perun 28.3.2008, 11:30
не понял - я форме в данных же задал таблицу и убрал 
отображение стандартных кнопок перехода

Автор: Akina 28.3.2008, 12:09
Не, внешний вид ты строй как хочешь. Я о сути.

Автор: Perun 28.3.2008, 12:45
Понял, событие обработал как хотел. Спасибо

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)