|
|
|
| Заранее извиняюсь если подобный вопрос уже был. Порывшись на форуме кое что нашёл, но к сожалению заставить это работать не могу .
Есть основная форма - в ней 2 подчинённые. Основная форма никак не связана с подчинёнными. Мне надо сделать чтоб после переключения на любую запись в 1-й подчинённой форме, во 2-й подчинённой форме делалась выборка на основе выбранной в 1-й подчинённой форме записи.
В 1-й подчинённой форме код:
Private Sub Form_Current()
Dim Источник As String
Источник = "SELECT Бла Бла Бла"
If IsLoaded("ПодФорма2") Then
Forms![ОсновнаяФорма]![ПодФорма2].Form.RecordSource = Источник
End If
End Sub
|
Пробовал ещё вот так:
Private Sub Form_Current()
Dim Источник As String
Источник = "SELECT Бла Бла Бла"
If CurrentProject.AllForms("ПодФорма2").IsLoaded = True Then
Forms![ОсновнаяФорма]![ПодФорма2].Form.RecordSource = Источник
End If
End Sub
|
Но в обоих случаях проверка не работает. А без проверки при загрузке основной формы выдаёт ошибку
Run-time error 2455 "Введённое выражение содержит недопустимую ссылку на свойство Form/Report"
После того как нажимаешь End в открывшейся Основной форме всё работает как надо. Т.е. происходит нужная выборка в ПодФорме2 на основе ПодФормы1. Я так понимаю что код срабатывает когда формы ещё не загружены - следовательно нужна проверка на загрузку форм.
Помогите пожалуйста разобраться что я делаю не так. | |
|
| |
|
|
|
| в базе данных должен быть модуль и функция в нем - IsLoaded, она у вас есть? | |
|
| |
|
|
|
| Подформа загружается раньше чем основная форма | |
|
| |
|
|
|
| Дело в том что в момент запуска основной формы происходит куча событий
ну если грубо то пимерно так
загружается подформа1 ( со всеми событиями в т.ч. событие текущая запись)
потом загружается подформа2 (тоже со всеми событиями)
далее догружается основная форма
видимо на загрузке подформы 1 повешан код который изменяет значения в подформе2 а так как она не загружена еще - то возникает ошибка | |
|
| |
|
|
|
| http://icanhascheezburger.files.wordpress.com/2011/06/1dd28582-b84e-400d-948b-03013c86f9f1.gif | |
|
| |
|
|
|
| У меня код повешен не на загрузку Подфломы1, а на текущую запись. Всё равно он срабатывает когда она загружается, вот я и хочу сделать проверку загружена ли ПодФорма2 чтоб код когда срабатывал проводилась нужная проверка и когда условие Тру срабатывал код уже не Рекорд Сурс | |
|
| |
|
|
|
| Сори ) Непонимаю ) Мне надо самому этот модуль писать или он встроенный я Access? Сейчас у меня никаких модулей с функцией IsLoaded в нет | |
|
| |
|
|
|
| можно не писать а взять из какой-либо старой базы построенной мастером. | |
|
| |
|
|
|
| а можно в поисковике набрать | |
|
| |
|
|
|
| Лето быстро пролетит.
Загорать, купаться надо, а не заниматься фикней.
А вот долгими зимними вечерами ... | |
|
| |
|
|
|
| да,
пошел я на дачу загорать и шашлык жарить... | |
|
| |
|
|
|
| шо так пешком и пошел? :) | |
|
| |
|
|
|
| ща тока вернулся и ща опять пойду :)
у меня дача чуть не под окнами - 2 километра,
при мерно тудаобратно гдето 5
------
дома телевизора нет, только на даче, посмотрю что там нового происходит.
как там каддафи и фокусима
------
взял картошку чтобы запечь на гриле и приправы к салату. шашлык еще остался, а салат нужно еще подрезать...
ушолъ | |
|
| |
|
|
|
| Везет-же некоторым.
А до моей целых 5,5 км. в одну сторону.
Приходится ездить на машине. :)
От шашлыкинга пришлось отказаться по причине неистовой жары.
Зажарили поросятину на сковороде.
Чуть живые вернулись домой.
Лето... | |
|
| |
|
|
|
| вот. пришОл :)
завтра на работу нужно подготовиться.
третью неделю нет горячей воды
кончилась чиста посуда
на даче все в порядке - и горячая вода и чистая посуда.
сделал баранину барьбекью и бутылку крансного сухого.\
въодножалъо
доволен как таракан | |
|
| |
|
|
|
|
| лето это маленькая жизнь... | |
|
| |
|
|
|
| На такой жаре это ж разве жизнь?
Если только из воды не вылезать.
Я водяной, я водяной... | |
|
| |
|
|
|
| Имеется введу вот это? Нашёл этот код в Хелпе.
Sub AllForms()
Dim obj As AccessObject, dbs As Object
Set dbs = Application.CurrentProject
' Search for open AccessObject objects in AllForms collection.
For Each obj In dbs.AllForms
If obj.IsLoaded = True Then
' Print name of obj.
Debug.Print obj.Name
End If
Next obj
End Sub
|
| |
|
| |
|
|
|
| Может проверять основную форму на загрузку
пока не загружена то DoEvents | |
|
| |
|
|
|
| Дело в том что
CurrentProject.AllForms("ОсновнаяФорма").IsLoaded
|
Выдаёт Тру. А такая же проверка любой из подформ
CurrentProject.AllForms("ПодФорма2").IsLoaded
|
выдаёт фалсе. Т.е. Access считает что ОсновнаяФорма загружена, а ПодФормы нет, причём даже после того как всё загрузилось и открылось. Вот непонимаю почему. Может к ПодФорме2 в проверке надо путь прикручивать как то?
Но вот такая конструкция тож не работает
CurrentProject.AllForms("Forms![ОсновнаяФорма]![ПодФорма2].Form").IsLoaded
|
Думаю на какое событие ещё можно Рекорд Сурс повесить. | |
|
| |
|
|
|
| 1. Нужно в форме-контейнере подписаться на события класса Form объекта первой подчиненной формы.
2. При наступлении события Current - менять источник объекта второй подчиненной формы.
3. Возможно, понадобится "передернуть" источник объекта второй подчиненной формы на Open формы-контейнера.
Никаких проверок типа IsLoaded не нужно. | |
|
| |
|
|
|
|
On Error Resume Next 'Если форма загружена как подчиненная, то у нее есть основная (Parent)
strarg = Me.Parent.name
FlagSubForm = (Err.Number = 0)
Err.Clear
If FlagSubForm Then
... блаблабла
End if
|
Впрочем, вопрос, кажется вдругом - загрузилась ли форма УЖЕ. | |
|
| |