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

Форум: MS ACCESS

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

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

 
 

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

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

тема: Корректный обмен данными между формами?
 
 автор: SVS   (12.03.2007 в 13:50)   личное сообщение
 
 

Есть файл .mde (типа закрытый от любопытных), в нем есть главная рабочая форма, при работе с которой требуется открывать дополнительные рабочие формы (находятся в других файлах mde или mdb), по закрытию дополнительной формы она должна передавать в главную форму строковую переменную. Дополнительные формы в процессе работы на основной форме могут вообще не потребоваться, а может их прийдеться открывать сотнями из сотни разных файлов.
Вначале писал mdb и просто копировал дополнительные формы в рабочий файл, обрабатывал их и удалял (вдальнейшем при закрытии пережимал базу), НО запамятовал, что формат mde не позволяет копировать формы :(
Нашел такое решение... но оно меня смущает, подскажите грамотно ли так работать с буфером и может есть что то более изящное :)
Пример:
В рабочей форме на событие, для примера взял ПолеДанных_Click(), пишу:
'Делаю невидимой область данных на рабочей форме
ОбластьДанных.Visible = False
'Запускаю функцию во внешнем файле, которая открывает дополнительную форму, из этого же файла
Set appAccess = CreateObject("Access.Application")
appAccess.OpenCurrentDatabase "Дополнительная форма1.mdb", False, "Код"
appAccess.Run "Zapusk"
Set appAccess = Nothing
'Нахожу дополнительную форму и делаю её активной
hwnd = FindWindow(vbNullString, "Дополнительная форма1")
SetForegroundWindow (hwnd)
'Запускаю цикл работающий пока окно дополнительная форма присутствует
Do
hwnd = FindWindow(vbNullString, "Дополнительная форма1")
DoEvents
Loop Until hwnd = 0
'Восстанавливаю видимость рабочей формы, устанавливаю фокус на поле ввода данных и вывожу данные из буфера
ОбластьДанных.Visible = True
ПолеДанных.SetFocus
SendKeys "+{INS}", True
End Sub

В дополнительной форме на событие Form_Close() пишу:
ПолеРезультат.SetFocus
SendKeys "{F2}"
SendKeys "^{INS}", True
hwnd = FindWindow(vbNullString, "Форма1")
SetForegroundWindow (hwnd)
DoCmd.Quit
End Sub
Пишу в ACCESS2003

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