Подчиненная форма запроса из другой подчиненной формы, проблемы

#ms-access #vba #subform

#ms-access #vba #подчиненная форма

Вопрос:

У меня есть 2 подчиненные формы в основной форме. Sub_2 отображает сведения об элементе, выбранном в sub_1, в виде списка. Для обеих подчиненных форм я использую форму продолжения, и они ограничены двумя запросами с одним общим полем, скажем ‘id’.

Что я сделал, так это добавил код в событие DClick для sub_1, чтобы установить фильтр sub_2 следующим образом

 Me.Parent.sub_2.Form.Filter = "id=" amp; "'" amp; Me.Recordset!id amp; "'"
  

Затем запрос

 Me.Parent.sub_2.Form.Requery
  

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

Есть предложения? Может быть, мне следует использовать другой подход для этого?

PS: Я уверен, что Me.Parent.sub_2.Filter изменено, но запрос не работает.

Редактировать:

Спасибо за ответы. Я нахожу проблему, то есть поле ‘id’ есть в запросе, но оно не отображается в подчиненной форме, поэтому, возможно, Access не может его использовать.

И когда фильтр изменен, Access выполняет запрос автоматически.

Ответ №1:

Вам не нужно ничего делать со свойством filter.

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

Для второй подчиненной формы также задайте свойство Link Дочерние поля, как для обычного элемента управления одной подчиненной формой. Свойство Link Master Fields будет ссылаться на имя элемента управления первой подчиненной формы: [Имя элемента управления подчиненной формы 1]!Имя поля.

В событии OnCurrent первого элемента управления подчиненной формы добавьте следующую строку кода VBA:

 Me.Parent.Controls![Subform 2 Control Name].Requery
  

Запустите форму. Когда вы щелкаете строку в первой подчиненной форме, вторая подчиненная форма запрашивает отображение дочерних строк для строки, выбранной в первой подчиненной форме.

Комментарии:

1. Я обнаружил, что вышеупомянутое решение не будет работать без некоторых изменений — оно должно быть Me.Parent.Controls!SubformName.Form.Requery (т. Е. вставить Form. )

Ответ №2:

Установите для свойства FilterOn значение True после назначения выражения Filter.

 Me.Parent.sub_2.Form.Filter = "id=" amp; "'" amp; Me.Recordset!id amp; "'"
Me.Parent.sub_2.Form.FilterOn = True
  

Ответ №3:

Вам понадобится что-то вроде следующего:

 Me!Subform2.Form.Requery  
'or  
Forms!Mainform!Subform1.Form!Subform2.Form.Requery
  

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

Вот отличный источник для подобных вопросов:
http://access.mvps.org/access/forms/frm0031.htm

Моя единственная жалоба на эту страницу заключается в том, что они не охватывают методы вызова, вспомогательные модули / функции или ссылки на общедоступные переменные. Все это (или может быть) немного отличается от сценариев, перечисленных там.