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

Форум: MS ACCESS

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

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

 
 

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

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

тема: Событие Current в SubForm
 
 автор: AlexSyr   (08.07.2010 в 13:53)   личное сообщение
49 Кб.
 
 

В наборе элементов управления MSA имеется довольно интересный элемент - SubForm. Данный элемент насколько полезный, настолько и специфичный. К примеру, имеет всего два события - Enter и Exit, при этом все остальные события скрываются в форме, запросе, которые могут являться источником данных для этого элемента контроля.
Каким же существуют способы работы с SubForm по передачи событий в главную форму?
- Вариант 00 - Разделенная форма - создается автоматически на основе таблицы. То, что, при небольшом приближении, хотелось бы получить. Т.е. перемещаясь по записям в подчиненной форме, получать значения (с возможностью редактирования) в полях главной формы. Грубо говоря использовать элемент SubForm как "расширенный ListBox" (перемещать колонки, редактировать их ширину, применение различных фильтров и т.п.)
Недостатки:
- По сути не содержит SubForm;
- Работает с MSA2007 и выше.
- Вариант 01 - SubForm создается мастером, при этом автоматом в качестве источника данных присваивается вновь созданная форма, созданная на основе таблицы или запроса. Данные в полях главной формы, отображающих значения из подчиненной формы, связываются с SubForm вручную, через построитель.
Недостатки:
- Невозможно редактировать данные в полях главной формы;
- Для SubForm, в качестве объекта-источника, которого, используется запрос, таким способом связывание невозможно.
- Вариант 02 - связывание полей главной формы с записями SubForm через процедуру, функцию. Т.е. в подчиненной форме на событие Current ставится вызов процедуры, функции главной формы.
Недостатки:
- Для SubForm, в качестве объекта-источника, которого, используется запрос, таким способом связывание невозможно.
- Вариант 03 - связывание полей главной формы с записями SubForm через общую функцию. Т.е. в главной форме, при загрузке, обработчик события Current подчиненной формы ставится на вызов общей функции, которая, в свою очередь вызывает процедуру, функцию главной формы.
Недостатки:
- Как то некрасиво вызывать общую функцию, которая вызовет процедуру, функцию.

Похоже, что существует всего один универсальный способ (для форм, запросов) - Вариант 03?
Может кто поделится идеями, опытом, наработками в этом вопросе.
Прикреплен пример всех описанных вариантов для MSA2010 и 2003. (Правда экспорт в 2003 формат произошел как то не очень гладко, так что не пинайте )

  Ответить  
 
 автор: Explorer   (08.07.2010 в 13:59)   личное сообщение
 
 


You transferred an archive of format that McAfee Web Gateway cannot extract.
The security settings do not allow this archive to pass without virus scanning.
Please contact your administrator.

  Ответить  
 
 автор: AlexSyr   (08.07.2010 в 14:03)   личное сообщение
33 Кб.
 
 

Повторяю архивы в WinRAR для MSA2003

  Ответить  
 
 автор: AlexSyr   (08.07.2010 в 14:04)   личное сообщение
41 Кб.
 
 

Повторяю архивы в WinRAR для MSA2010

  Ответить  
 
 автор: Lukas   (08.07.2010 в 14:27)   личное сообщение
16 Кб.
 
 

Написано много, но понял мало. Жара.


...способы работы с SubForm по передачи событий в главную форму...


1. Начнем с того, что события могут быть только у класса, если они описаны и публичны.
2. Если мы используем запрос(спецформа) в качестве "вложения" контейнера "подчиненная форма",
то о событиях можно сразу забыть, потому как эта спецформа их не генерирует.
2. Если в качестве "вложения" контейнера "подчиненная форма" используется форма, то как всегда,
подписавшись на эти события, мы их могем слушать.
Пример: в форме frmParents слушается событие Current объекта frmChilds, находящегося в контейнере подчиненной формы.

  Ответить  
 
 автор: snipe   (08.07.2010 в 15:27)   личное сообщение
 
 

А чего хотите то?
мне (старой больной обезьяне) вообще ни чего не понятно

  Ответить  
 
 автор: AlexSyr   (08.07.2010 в 15:34)   личное сообщение
 
 

Грубо говоря использовать элемент SubForm как "расширенный ListBox" (перемещать колонки, редактировать их ширину, применение различных фильтров и т.п.)
А может у меня старческий маразм начался на фоне жары

  Ответить  
 
 автор: AlexSyr   (08.07.2010 в 15:33)   личное сообщение
 
 

1. Даже не спорю
2. Авторитет давит , но ...
А как же тогда вот это (Вариант 03):

  Me.SubForm_qryTest.SourceObject = "Query.qryTest"
  Me.SubForm_qryTest.Form.OnCurrent = "=ToCurrentQ()"

т.е. такое ощущение, что контейнер "подчиненная форма", обладает всеми теми же событиями, что и форма. Я ошибаюсь?
2. т.е. 3. Понимаю Жара
Здесь опять, как всегда, Вы правы. Я думал об этом, но не "додумал" , решив, что это похоже на Вариант 02 с его недостатками.

  Ответить  
 
 автор: Lukas   (08.07.2010 в 15:41)   личное сообщение
 
 


такое ощущение, что контейнер "подчиненная форма", обладает всеми теми же событиями, что и форма. Я ошибаюсь?


Да. Контейнер один класс, вложение - другой класс.

Me.SubForm_qryTest.Form.OnCurrent = "=ToCurrentQ()" 

Это мостик. Мы не можем подписаться на это событие,
но мы можем назначить функцию, которая будет вызвана на это событие.
Могет и ошибаюсь.

Добавлено:
А может 2007 или 2010 уже дают возможность слушать эти события?
Проверьте на своем 2010.

  Ответить  
 
 автор: AlexSyr   (08.07.2010 в 16:30)   личное сообщение
 
 

Похоже, что в этом плане в 2010 ничего не изменилось, если я все правильно сделал.

Private WithEvents frmSub03a As Form

Private Sub Form_Open(Cancel As Integer)
  Me.SubForm_qryTest.SourceObject = "Query.qryTest"
  Set frmSub03a = Me.SubForm_qryTest.Form
'  Me.SubForm_qryTest.Form.OnCurrent = "=ToCurrentQ()"
  frmSub03a.OnCurrent = "[Event Procedure]"
End Sub

Private Sub frmSub03a_Current()
  'не отрабатывается
  MsgBox "Current_Sub03a"
End Sub

  Ответить  
 
 автор: Lukas   (08.07.2010 в 16:42)   личное сообщение
 
 

Понятно. У меня в 2003/sp2 тоже тишина.

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