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

Форум: MS ACCESS

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

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

 
 

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

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

тема: Как проверить загружена ли подчинённая форма
 
 автор: Danila   (02.07.2011 в 08:01)   личное сообщение
 
 

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

Есть основная форма - в ней 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. Я так понимаю что код срабатывает когда формы ещё не загружены - следовательно нужна проверка на загрузку форм.
Помогите пожалуйста разобраться что я делаю не так.

  Ответить  
 
 автор: Explorer   (02.07.2011 в 09:51)   личное сообщение
 
 

в базе данных должен быть модуль и функция в нем - IsLoaded, она у вас есть?

  Ответить  
 
 автор: snipe   (02.07.2011 в 10:07)   личное сообщение
 
 

Подформа загружается раньше чем основная форма

  Ответить  
 
 автор: snipe   (02.07.2011 в 10:21)   личное сообщение
 
 

Дело в том что в момент запуска основной формы происходит куча событий
ну если грубо то пимерно так
загружается подформа1 ( со всеми событиями в т.ч. событие текущая запись)
потом загружается подформа2 (тоже со всеми событиями)
далее догружается основная форма

видимо на загрузке подформы 1 повешан код который изменяет значения в подформе2 а так как она не загружена еще - то возникает ошибка

  Ответить  
 
 автор: Силblч   (02.07.2011 в 10:35)   личное сообщение
 
 

http://icanhascheezburger.files.wordpress.com/2011/06/1dd28582-b84e-400d-948b-03013c86f9f1.gif

  Ответить  
 
 автор: Danila   (02.07.2011 в 11:08)   личное сообщение
 
 

У меня код повешен не на загрузку Подфломы1, а на текущую запись. Всё равно он срабатывает когда она загружается, вот я и хочу сделать проверку загружена ли ПодФорма2 чтоб код когда срабатывал проводилась нужная проверка и когда условие Тру срабатывал код уже не Рекорд Сурс

  Ответить  
 
 автор: Danila   (02.07.2011 в 10:56)   личное сообщение
 
 

Сори ) Непонимаю ) Мне надо самому этот модуль писать или он встроенный я Access? Сейчас у меня никаких модулей с функцией IsLoaded в нет

  Ответить  
 
 автор: Explorer   (02.07.2011 в 11:07)   личное сообщение
 
 

можно не писать а взять из какой-либо старой базы построенной мастером.

  Ответить  
 
 автор: Explorer   (02.07.2011 в 11:10)   личное сообщение
 
 

а можно в поисковике набрать

  Ответить  
 
 автор: Lukas   (02.07.2011 в 11:13)   личное сообщение
 
 

Лето быстро пролетит.
Загорать, купаться надо, а не заниматься фикней.

А вот долгими зимними вечерами ...

  Ответить  
 
 автор: Explorer   (02.07.2011 в 11:14)   личное сообщение
 
 

да,

пошел я на дачу загорать и шашлык жарить...

  Ответить  
 
 автор: lukas   (02.07.2011 в 17:14)   личное сообщение
 
 

шо так пешком и пошел? :)

  Ответить  
 
 автор: Explorer   (02.07.2011 в 18:33)   личное сообщение
 
 

ща тока вернулся и ща опять пойду :)

у меня дача чуть не под окнами - 2 километра,

при мерно тудаобратно гдето 5

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

ушолъ

  Ответить  
 
 автор: Lukas   (02.07.2011 в 19:45)   личное сообщение
 
 

Везет-же некоторым.
А до моей целых 5,5 км. в одну сторону.
Приходится ездить на машине. :)

От шашлыкинга пришлось отказаться по причине неистовой жары.
Зажарили поросятину на сковороде.

Чуть живые вернулись домой.
Лето...

  Ответить  
 
 автор: Explorer   (03.07.2011 в 23:58)   личное сообщение
 
 

вот. пришОл :)

завтра на работу нужно подготовиться.
третью неделю нет горячей воды

кончилась чиста посуда

на даче все в порядке - и горячая вода и чистая посуда.

сделал баранину барьбекью и бутылку крансного сухого.\
въодножалъо

доволен как таракан

  Ответить  
 
 автор: Lukas   (04.07.2011 в 00:02)   личное сообщение
 
 


кончилась чиста посуда


Пора заводить Шарика. :)

  Ответить  
 
 автор: Explorer   (04.07.2011 в 00:03)   личное сообщение
 
 

лето это маленькая жизнь...

  Ответить  
 
 автор: Lukas   (04.07.2011 в 00:07)   личное сообщение
 
 

На такой жаре это ж разве жизнь?
Если только из воды не вылезать.
Я водяной, я водяной...

  Ответить  
 
 автор: Danila   (02.07.2011 в 11:12)   личное сообщение
 
 

Имеется введу вот это? Нашёл этот код в Хелпе.
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

  Ответить  
 
 автор: snipe   (02.07.2011 в 11:26)   личное сообщение
 
 

Может проверять основную форму на загрузку
пока не загружена то DoEvents

  Ответить  
 
 автор: Danila   (02.07.2011 в 12:08)   личное сообщение
 
 

Дело в том что
CurrentProject.AllForms("ОсновнаяФорма").IsLoaded

Выдаёт Тру. А такая же проверка любой из подформ
CurrentProject.AllForms("ПодФорма2").IsLoaded

выдаёт фалсе. Т.е. Access считает что ОсновнаяФорма загружена, а ПодФормы нет, причём даже после того как всё загрузилось и открылось. Вот непонимаю почему. Может к ПодФорме2 в проверке надо путь прикручивать как то?
Но вот такая конструкция тож не работает
CurrentProject.AllForms("Forms![ОсновнаяФорма]![ПодФорма2].Form").IsLoaded

Думаю на какое событие ещё можно Рекорд Сурс повесить.

  Ответить  
 
 автор: Lukas   (02.07.2011 в 19:53)   личное сообщение
 
 

1. Нужно в форме-контейнере подписаться на события класса Form объекта первой подчиненной формы.
2. При наступлении события Current - менять источник объекта второй подчиненной формы.
3. Возможно, понадобится "передернуть" источник объекта второй подчиненной формы на Open формы-контейнера.

Никаких проверок типа IsLoaded не нужно.

  Ответить  
 
 автор: Дядя Федор   (04.07.2011 в 08:04)   личное сообщение
 
 


On Error Resume Next 'Если форма загружена как подчиненная, то у нее есть основная (Parent)
strarg = Me.Parent.name
FlagSubForm = (Err.Number = 0)
Err.Clear
If FlagSubForm Then
... блаблабла
End if


Впрочем, вопрос, кажется вдругом - загрузилась ли форма УЖЕ.

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