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

Форум: VB

Программирование VB

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

 
 

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

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

тема: Как обмениваться данными между формами?
 
 автор: SVS   (13.03.2007 в 12:44)   личное сообщение
 
 

Подскажите пожалуйста как выполнить обмен данными между формами? Мне необходимо передать значение строковой переменную с одной формы на другую.

  Ответить  
 
 автор: ДрЮня   (13.03.2007 в 13:17)   личное сообщение
 
 

либо через паблик переменную, либо если обе формы загружены непосредственно ссылкой на поле формы

  Ответить  
 
 автор: SVS   (13.03.2007 в 13:41)   личное сообщение
 
 

Я пишу в эксесе. У меня формы находятся в разных файлах, вторую форму я открываю из другого файла (привожу код первой формы):

Set appAccess = CreateObject("Access.Application")
appAccess.OpenCurrentDatabase "Пример.mdb"
appAccess.DoCmd.OpenForm "ВтораяФорма"
Set FormPoetAges = appAccess.Forms("ВтораяФорма")

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

  Ответить  
 
 автор: ДрЮня   (13.03.2007 в 14:17)   личное сообщение
 
 

Вы вообще-то что делаете и почему разместили топик в теме "VB" ?

  Ответить  
 
 автор: SVS   (13.03.2007 в 14:32)   личное сообщение
 
 

>Вы вообще-то что делаете и почему разместили топик в теме
>"VB" ?
Работаю с базой данных access, конечный результат - вывод данные в шаблон word-документа, по ходу сохраняю/открываю данные в/из файлов, код пишу в VBA.
Тему разместил здесь потому что в ветке ACCEESS мне никто ничего не ответил, может я неграмотно задал вопрос, а может так звезды легли.
Мне нужно данные перемещать с одной формы эксес на другую, в меру своих знаний я пытаюсь это сделать как могу представить себе алгоритм работы. Самое простое что было это помещать данные в поле, копировать их и потом вставлять в поле нужной мне формы, для этого на API переключался между окнами и эмулировал нажатия клавиш для копирования и вставки. Такое решение кажется мне стремным и я пытаюсь придумать более правильный алгоритм работы...

  Ответить  
 
 автор: osmor   (13.03.2007 в 15:32)   личное сообщение
 
 

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


debug.print FormPoetAges.[Поле1]

т.е. можно не закрывать, а прятать форму me.visible = false, затем из вызвавшей БД считывать нужные поля и затем закрывать форму и приложение

вообще что-то странное у вас с постановкой задачи:

Есть файл .mde (типа закрытый от любопытных), в нем есть главная рабочая форма, при работе с которой требуется открывать дополнительные рабочие формы (находятся в других файлах mde или mdb), по закрытию дополнительной формы она должна передавать в главную форму строковую переменную. Дополнительные формы в процессе работы на основной форме могут вообще не потребоваться, а может их прийдеться открывать сотнями из сотни разных файлов.
Может в принципе другое решение применить?
Откуда будут браться эти сотни файлов?

  Ответить  
 
 автор: SVS   (13.03.2007 в 16:38)   личное сообщение
 
 

В форму1 вписал следующий код
Form_Форма1.Visible = False
FormPoetAges.SetFocus 'ВтораяФорма
Do
Str = FormPoetAges.DopKod 'стринговая переменная
DoEvents
Loop Until Str <> ""
appAccess.DoCmd.Close acForm, "ВтораяФорма"
appAccess.Quit
Set FormPoetAges = Nothing
Set appAccess = Nothing
Form_Форма1.Visible = True

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

>Может в принципе другое решение применить?
Может решение и другое... я пытаюсь решить задачу по мере своих знаний и видимости решения

>Откуда будут браться эти сотни файлов?
С формой1 работает пользователь, а формы2,3,...,n находятся на сетевом диске.
Данные у меня занесены в таблицу (находится на сетевом диске), для примера - обои, краска, лак и т.п.... дополнительные формы я использую для уточнения... если того требуют данные - цвет, размер, масса, стоимость и т.д. для каждой записи получается свой набор уточнений.... каждая запись у меня имеет свой КОД и поле - boolean (наличие дополнительной формы), дополнительные формы размещены в файлах по именам КОДов записей....
:) чет кажется чем больше объясняю тем больше непонятно...
Если приведенный код и уточнения про отлов ошибок грамотное решение, то этим я пока и довольствуюсь, потому что лучшее враг хорошего
Но если вы поняли мою задачу и у вас есть мысли про другое решение поделитесь пожалуйста, потому что нет пределу совершенства

  Ответить  
 
 автор: SVS   (13.03.2007 в 16:40)   личное сообщение
 
 

В форму1 вписал следующий код
Form_Форма1.Visible = False
FormPoetAges.SetFocus 'ВтораяФорма
Do
Str = FormPoetAges.DopKod 'стринговая переменная
DoEvents
Loop Until Str <> ""
appAccess.DoCmd.Close acForm, "ВтораяФорма"
appAccess.Quit
Set FormPoetAges = Nothing
Set appAccess = Nothing
Form_Форма1.Visible = True

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

>Может в принципе другое решение применить?
Может решение и другое... я пытаюсь решить задачу по мере своих знаний и видимости решения

>Откуда будут браться эти сотни файлов?
С формой1 работает пользователь, а формы2,3,...,n находятся на сетевом диске.
Данные у меня занесены в таблицу (находится на сетевом диске), для примера - обои, краска, лак и т.п.... дополнительные формы я использую для уточнения... если того требуют данные - цвет, размер, масса, стоимость и т.д. для каждой записи получается свой набор уточнений.... каждая запись у меня имеет свой КОД и поле - boolean (наличие дополнительной формы), дополнительные формы размещены в файлах по именам КОДов записей....
:) чет кажется чем больше объясняю тем больше непонятно...
Если приведенный код и уточнения про отлов ошибок грамотное решение, то этим я пока и довольствуюсь, потому что лучшее враг хорошего
Но если вы поняли мою задачу и у вас есть мысли про другое решение поделитесь пожалуйста, потому что нет пределу совершенства

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

Честно говоря не очень понял почему данные нужно брать из форм...
Обычно так
есть одна БД с таблицам лежит в общедоступном месте
есть несколько БД с формами и прочим добром кроме таблиц, - у каждого пользователя на его компе. В этоих БД прилинкованы таблицы из общей БД.
В этом случае данные доступны с любого рабочего места, их можно сохранить в таблицах и от туда считать...

  Ответить  
 
 автор: SVS   (13.03.2007 в 17:49)   личное сообщение
 
 

так и есть, есть одна БД в общедоступном месте и есть БД с рабочей формой у каждого пользователя....
Дополнительные формы это своего рода интерфейс через который пользователь видит данные хранящиеся в общей БД.
Скажем что общего между краской и обоями? в общей БД я даю им коды и общее наименование... а для уточнения использую дополнительные формы и дополнительные таблицы, которые храню в отдельных файлах по именам-кодам в общедоступном месте, в которых для краски к примеру указываю цвет и литраж (таблица возможных цветов и таблица возможного литража), а для обоев только длину рулона (таблица длин).
Есть названия которые требуют указывать до 10 параметров...
И человеку при выборе наименования продукции открывается дополнительная форма для этой продукции, в которой он через поля со списками, чекбоксами и т.п. инструментами выбирает нужные ему параметры (цвет, размер и т.д.). Для каждой продукции своя форма и свои таблицы... и все это в общедоступном месте и пополняя общий перечень продукции я создаю файл с дополнительной формой и таблицами....
А если данные пользователь задает на дополнительной форме... через поля со списками и т.д..... то я и хочу их брать из этих полей.. куда ж тут таблицы? если значения полей и есть выбранные значения из таблиц?

  Ответить  
 
 автор: osmor   (13.03.2007 в 18:28)   личное сообщение
 
 

которые храню в отдельных файлах по именам-кодам в общедоступном месте
Вот что-то мне не очень это понравилось... правда я не совсем понял.
Почему под это дело не завести таблицы в общей БД?

А если данные пользователь задает на дополнительной форме... через поля со списками и т.д..... то я и хочу их брать из этих полей.. куда ж тут таблицы? если значения полей и есть выбранные значения из таблиц?
Выыбранне значение полей можно (нужно?) сохранить в таблице (можно временной) из которой данные можно перенести в основную по имени-коду...

Щас уже совсем некогда, если будет время вечером попробую поподробнее
пока почитайте мой ответ на
http://www.hiprog.com/forum/read.php?id_forum=1&id_theme=695&page=1
очень похоже на вашу задачу

  Ответить  
 
 автор: SVS   (13.03.2007 в 19:03)   личное сообщение
 
 

>Вот что-то мне не очень это понравилось... правда я не
>совсем понял.
>Почему под это дело не завести таблицы в общей БД?
можно и в одной БД поместить все эти таблицы... меня смущает их количество... несколько сот, а может и тысяч... так они лежат каждый в своем файле-коде как в контейнере со своими формами и модулями обработки таблиц-данных.

>Выыбранне значение полей можно (нужно?) сохранить в таблице
>(можно временной) из которой данные можно перенести в
>основную по имени-коду...
А где будет размещаться временная таблица физически... в общей базе или временная будет висеть в памяти? как если делать Set Rst = CurrentDb.OpenRecordset("SELECT.....")?

>Щас уже совсем некогда, если будет время вечером попробую
>поподробнее
>пока почитайте мой ответ на
>http://www.hiprog.com/forum/read.php?id_forum=1&id_theme=695&page=1
>очень похоже на вашу задачу
Как для переноса данных вроде да похоже,
а правильно писать на первой форме такой цикл, для ожидания изменения значения переменной, тойже временной таблицы?
Do
переменная формы1 = переменная формы2 (временная таблица)
DoEvents
Loop Until переменная формы1 <> Null (или что то там)

а ещё вопрос.... если вторую форму открывать в первой таким образом:
appAccess.DoCmd.OpenForm "ВтораяФорма"
и привязываться к ней через
Set FormPoetAges = appAccess.Forms("ВтораяФорма")
то может ли вторая форма сама присваивать значения переменным первой формы? или она не видит кто её открыл?

  Ответить  
 
 автор: osmor   (14.03.2007 в 09:36)   личное сообщение
 
 

Цикл мне лично не нравится, думаю будет тормозить
"со своими формами и модулями обработки таблиц-данных. " - неужели обработка настолько различается?
если организовать базу как описано здесь http://www.hiprog.com/forum/read.php?id_forum=1&id_theme=695&page=1, то можно будет все изделия обрабатывать в одной форме.

Та программа которая вызывает имеет объект апликешен (посколько он в ней и создается) , а вот вызываемая ничего не знает об этом. МОжно в вызываемой создать свойство и присовить ему объект текущей формы.

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

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

В общем вроде получилось и передавать значение в форму 2 и вытаскивать значения из формы 2 :)
По поводу отдельных файлов... может если я увижу что данные можно унифицировать то все помещу в одну базу, но пока я не вижу как их обобщить... а вообще заметил, что со сременем просматривая уже отлаженые алгоритмы находишь как их можно ещё больше оптимизировать... в основном это связано с етм что со временем узнаешь все больше и больше :)
Спасибо за советы, буду понить про них

  Ответить  
 
 автор: SVS   (13.03.2007 в 16:41)   личное сообщение
 
 

Повтор

  Ответить  
 
 автор: ДрЮня   (13.03.2007 в 15:46)   личное сообщение
 
 

не обижайтесь, пожалуйста, но
- данные хранятся в таблицах, а на форме(-ах) отображаются;
- можно получить данные и не создавая/открывая никаких форм - для этого используются методами, которые предоставляют библиотеки DAO или ADO;

имхо, мне кажется что Вы простую задачу решаете через чур "извращенным" способом

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