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

Форум: MS ACCESS

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

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

 
 

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

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

тема: Не обновляется RowSource в подчиненной форме
 
 автор: access_newb   (22.05.2009 в 08:11)   личное сообщение
 
 

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).

  Ответить  
 
 автор: osmor   (22.05.2009 в 10:29)   личное сообщение
 
 

попробуйте в конце добавить
DoEvents

  Ответить  
 
 автор: Анатолий (Киев)   (22.05.2009 в 10:34)   личное сообщение
 
 

Попробуйте на Load главной формы выполнить Requery списка в субформе и ли заменить RowSource. Кстати, интересно - какой запрос в этот момент в списке?

  Ответить  
 
 автор: access_newb   (22.05.2009 в 11:19)   личное сообщение
 
 

Я пробовал выполнять тот же код из главной формы - результат тот же.
Запрос в этот момент правильный - я специально выводил его строкой на 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. - а дальше в списке нет нужного мне элемента.
И еще я не понимаю, почему он в одних местах ставить восклицательные знаки, а в других точки - ведь это одно и тоже, только после восклицательного знака список свойств не появляется.

  Ответить  
 
 автор: osmor   (22.05.2009 в 12:17)   личное сообщение
 
 

Me.MySubFormControl.Form. - а дальше в списке нет нужного мне элемента.


Придется набрать руками

И еще я не понимаю, почему он в одних местах ставить восклицательные знаки, а в других точки - ведь это одно и тоже, только после восклицательного знака список свойств не появляется.



Из Help
Использование операторов ! и . (точка) в выражениях

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

Идентификатор Объект ссылки
Forms![Заказы] Открытая форма «Заказы»
Reports![Счет] Открытый отчет «Счет»
Forms![Заказы]![КодЗаказа] Элемент управления «КодЗаказа» в открытой форме «Заказы»
Оператор . (точка) обычно указывает, что следующий за ним элемент определен в Microsoft Access. Например, оператор . (точка) используется для ссылок на свойства форм, отчетов и элементов управления.

Примечание. Допускается также использование оператора . (точка) для ссылок на значение поля в инструкции SQL, метод Visual Basic для приложений (VBA) или семейство. Например, идентификатор Forms![Заказы].Controls представляет ссылку на семейство Controls формы «Заказы». Однако, поскольку семейство Controls является семейством, используемым для форм и отчетов по умолчанию, обычно нет необходимости ссылаться на него в явном виде.

  Ответить  
 
 автор: access_newb   (22.05.2009 в 12:48)   личное сообщение
 
 

Сделал как сказал эксперт, правда без восклицательных знаков - access говорит, что не может найти объект. С точками все нормально. Но результат тот же самый - с чего начал к тому и пришел - поле в связанной форме не обновляется. Я заметил еще один прикол - если открыть список Combobox в связанной форме, то появляются правильные значения, те которые я назначал в rowsource. Как только переключаешь фокус на что-нибудь другое - опять появляется неправильное. Такое впечатление, что MyComboBox.RowSource где-то по умолчанию прописан и что бы я ни делал, он каждый раз возвращает прежнее значение.

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