2015-05-27 2 views
0

Доброго дня,BeforeUpdate события связанного управления подчиненной стрельбы несколько раз

Я должны поддерживать форму доступа, которые содержат связанный подчиненные (используя Мастер и дочерние поля).

В основном, в основной форме пользователь выбирает значение в поле со списком, и подформа автоматически обновляется.

Моя проблема в том, что у меня есть событие BeforeUpdate в одном поле моей подформы, которое предотвращает обновление поля (Cancel = true), если оно не соответствует критериям. Предупреждающий msgbox должен появляться один раз, если в поле есть какая-либо ошибка, но событие BeforeUpdate всегда запускается 3 раза по неизвестной причине.

Я создал простой файл accdb, который воспроизводит мою проблему. Он находится здесь: https://www.hightail.com/download/bXBhU2V0Q1JxRTFsQXNUQw.

Откройте форму Form1, выберите значение в поле со списком, а затем попробуйте обновить одну из букв в подформе на X, и вы получите сообщение msgbox, появляющееся несколько раз.

Заранее благодарим вас за помощь в этом вопросе, так как это сводит меня с ума.

Сильвен

ответ

0

Это происходит потому, что вы не измените значение Text0 обратно к тому, что это было.

Попробуйте

Private Sub Text0_BeforeUpdate(Cancel As Integer) 
    If Me.Text0 = "X" Then 
     MsgBox "Wrong value" 
     Cancel = True 
     Me.Text0.Undo 
    End If 
End Sub 
+0

Спасибо @DivisionX, но я хотел бы понять, почему он ведет себя таким образом. Если я открываю свою подчиненную форму как основную форму напрямую (Form2 в моем примере), и я обновляю поле с неправильным контентом, PreUpdate будет запущен только один раз, как и должно быть. Какова последовательность событий, которые приводят к тому, что это событие срабатывает несколько раз в случае связанной подформы? – sylvain77

+0

Это просто теория, но может быть, она сначала пытается обновить форму 1, затем форму 2, а затем снова сформировать 1, потому что форма 2 является подчиненной формой из 1? – DivisionX

+0

Поместите контрольную точку в свой код и просмотрите поток выполнения. Присутствующие в доступе скованы и в определенном порядке ... – John

0

OK, наконец, нашли решение.

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

Определение источника управления этого главного поля связи имел обыкновение быть:

=myCombobox.column(0) 

Заменяя определение, просто:

=myCombobox 

Событие BeforeUpdate в моем связанной подчиненной включается только один раз и ведет себя так, как ожидалось;

Private Sub Text0_BeforeUpdate(Cancel As Integer) 
    If Me.Text0 = "X" Then 
     MsgBox "Wrong Value" 
     Cancel = True 
    End If 
End Sub 

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

Sylvain

Смежные вопросы