|
|
|
| MS Access 2007 SP2.
Есть форма, на ней элементы MyComboBox и MyLabel. Есть глобальная переменная GlobalDim as Byte.
Для события On Load формы прописан код:
Select Case GlobalDim
Case 1
MyLabel.Caption = "Заголовок 1"
MyComboBox.RowSource = "SQL-запрос1"
Case 2
MyLabel.Caption = "Заголовок 2"
MyComboBox.RowSource = "SQL-запрос2"
End Select
Данный код прекрасно работает. Но, если вставить эту форму в качестве подчиненной в другую форму, то код частично перестает работать.
MyLabel.Caption - все так же обновляется в зависимости от GlobalDim, а вот смена источника данных MyComboBox.RowSource - то работает, то нет. Поначалу вроде работает, потом перестает - не пойму, от чего это зависит.
В результате заголовок меняется, а содержимое столбца - нет.
В Интернете находил вопросы подобные моему, но без решения проблемы.
Пробовал добавлять последней строкой Me.Requery, Me.Recalc, Me.Refresh - бесполезно.
В таблицах на всякий случай убрал все подстановки (lookup). | |
|
| |
|
|
|
| попробуйте в конце добавить
DoEvents | |
|
| |
|
|
|
| Попробуйте на Load главной формы выполнить Requery списка в субформе и ли заменить RowSource. Кстати, интересно - какой запрос в этот момент в списке? | |
|
| |
|
|
|
| Я пробовал выполнять тот же код из главной формы - результат тот же.
Запрос в этот момент правильный - я специально выводил его строкой на label, расположенный на главной форме.
Я уже почти понял в чем дело:
http://www.eggheadcafe.com/conversation.aspx?messageid=32315329&threadid=32315329
Кому неохота идти по ссылке - краткий перевод:
Эксперт говорит, что:
1) Когда открывается форма, на которой есть субформа, то субформа открывается первой и свойства родительской формы в этот момент пока еще не доступны.
2) Он так же советует изменять rowsource элементов субформы по событию On Load главной формы, но подчеркивает, что нужно правильно обращаться к свойствам субформы. А именно: нельзя напрямую указывать имя субформы, а что надо обращаться к свойству Form элемента, который содержит в себе субформу, чтобы выглядело так:
Me!MySubFormControl.Form!MyComboBoxName.RowSource = ...
Я попробовал так обратиться, у меня получается:
Me.MySubFormControl.Form. - а дальше в списке нет нужного мне элемента.
И еще я не понимаю, почему он в одних местах ставить восклицательные знаки, а в других точки - ведь это одно и тоже, только после восклицательного знака список свойств не появляется. | |
|
| |
|
|
|
| Me.MySubFormControl.Form. - а дальше в списке нет нужного мне элемента. |
Придется набрать руками
И еще я не понимаю, почему он в одних местах ставить восклицательные знаки, а в других точки - ведь это одно и тоже, только после восклицательного знака список свойств не появляется. |
Из Help
Использование операторов ! и . (точка) в выражениях
Операторы ! и . (точка) в идентификаторах указывают тип элемента, стоящего справа от оператора.
Оператор ! указывает, что следующий за ним элемент является элементом, определяемым пользователем (элементом семейства). Например, с помощью оператора ! определяют ссылку на открытую форму, на открытый отчет или элемент управления в открытой форме или отчете.
Идентификатор Объект ссылки
Forms![Заказы] Открытая форма «Заказы»
Reports![Счет] Открытый отчет «Счет»
Forms![Заказы]![КодЗаказа] Элемент управления «КодЗаказа» в открытой форме «Заказы»
Оператор . (точка) обычно указывает, что следующий за ним элемент определен в Microsoft Access. Например, оператор . (точка) используется для ссылок на свойства форм, отчетов и элементов управления.
Примечание. Допускается также использование оператора . (точка) для ссылок на значение поля в инструкции SQL, метод Visual Basic для приложений (VBA) или семейство. Например, идентификатор Forms![Заказы].Controls представляет ссылку на семейство Controls формы «Заказы». Однако, поскольку семейство Controls является семейством, используемым для форм и отчетов по умолчанию, обычно нет необходимости ссылаться на него в явном виде. | |
|
| |
|
|
|
| Сделал как сказал эксперт, правда без восклицательных знаков - access говорит, что не может найти объект. С точками все нормально. Но результат тот же самый - с чего начал к тому и пришел - поле в связанной форме не обновляется. Я заметил еще один прикол - если открыть список Combobox в связанной форме, то появляются правильные значения, те которые я назначал в rowsource. Как только переключаешь фокус на что-нибудь другое - опять появляется неправильное. Такое впечатление, что MyComboBox.RowSource где-то по умолчанию прописан и что бы я ни делал, он каждый раз возвращает прежнее значение. | |
|
| |