|
|
|
| Подскажите пожалуйста как выполнить обмен данными между формами? Мне необходимо передать значение строковой переменную с одной формы на другую. | |
|
| |
|
|
|
| либо через паблик переменную, либо если обе формы загружены непосредственно ссылкой на поле формы | |
|
| |
|
|
|
| Я пишу в эксесе. У меня формы находятся в разных файлах, вторую форму я открываю из другого файла (привожу код первой формы):
Set appAccess = CreateObject("Access.Application")
appAccess.OpenCurrentDatabase "Пример.mdb"
appAccess.DoCmd.OpenForm "ВтораяФорма"
Set FormPoetAges = appAccess.Forms("ВтораяФорма")
и теперь вроде можно вытащить данные со второй формы... но как их вытаскивать в первую форму, если я работаю во второй.. или как их передать в первую при закрытии второй? я не могу разобраться какие события ловить :( подскажите пжалста | |
|
| |
|
|
|
| Вы вообще-то что делаете и почему разместили топик в теме "VB" ? | |
|
| |
|
|
|
| >Вы вообще-то что делаете и почему разместили топик в теме
>"VB" ?
Работаю с базой данных access, конечный результат - вывод данные в шаблон word-документа, по ходу сохраняю/открываю данные в/из файлов, код пишу в VBA.
Тему разместил здесь потому что в ветке ACCEESS мне никто ничего не ответил, может я неграмотно задал вопрос, а может так звезды легли.
Мне нужно данные перемещать с одной формы эксес на другую, в меру своих знаний я пытаюсь это сделать как могу представить себе алгоритм работы. Самое простое что было это помещать данные в поле, копировать их и потом вставлять в поле нужной мне формы, для этого на API переключался между окнами и эмулировал нажатия клавиш для копирования и вставки. Такое решение кажется мне стремным и я пытаюсь придумать более правильный алгоритм работы... | |
|
| |
|
|
|
| если не ответили в течении 5 часов, это не значит что не ответят... Лучше бы там подняли ветку вверх...
Вообще пока Вы не закрыли форму, вы можете получить значение любого поля этой формы
debug.print FormPoetAges.[Поле1]
|
т.е. можно не закрывать, а прятать форму me.visible = false, затем из вызвавшей БД считывать нужные поля и затем закрывать форму и приложение
вообще что-то странное у вас с постановкой задачи:
Есть файл .mde (типа закрытый от любопытных), в нем есть главная рабочая форма, при работе с которой требуется открывать дополнительные рабочие формы (находятся в других файлах mde или mdb), по закрытию дополнительной формы она должна передавать в главную форму строковую переменную. Дополнительные формы в процессе работы на основной форме могут вообще не потребоваться, а может их прийдеться открывать сотнями из сотни разных файлов.
Может в принципе другое решение применить?
Откуда будут браться эти сотни файлов? | |
|
| |
|
|
|
| В форму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 (наличие дополнительной формы), дополнительные формы размещены в файлах по именам КОДов записей....
:) чет кажется чем больше объясняю тем больше непонятно...
Если приведенный код и уточнения про отлов ошибок грамотное решение, то этим я пока и довольствуюсь, потому что лучшее враг хорошего
Но если вы поняли мою задачу и у вас есть мысли про другое решение поделитесь пожалуйста, потому что нет пределу совершенства | |
|
| |
|
|
|
| В форму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 (наличие дополнительной формы), дополнительные формы размещены в файлах по именам КОДов записей....
:) чет кажется чем больше объясняю тем больше непонятно...
Если приведенный код и уточнения про отлов ошибок грамотное решение, то этим я пока и довольствуюсь, потому что лучшее враг хорошего
Но если вы поняли мою задачу и у вас есть мысли про другое решение поделитесь пожалуйста, потому что нет пределу совершенства | |
|
| |
|
|
|
| Честно говоря не очень понял почему данные нужно брать из форм...
Обычно так
есть одна БД с таблицам лежит в общедоступном месте
есть несколько БД с формами и прочим добром кроме таблиц, - у каждого пользователя на его компе. В этоих БД прилинкованы таблицы из общей БД.
В этом случае данные доступны с любого рабочего места, их можно сохранить в таблицах и от туда считать... | |
|
| |
|
|
|
| так и есть, есть одна БД в общедоступном месте и есть БД с рабочей формой у каждого пользователя....
Дополнительные формы это своего рода интерфейс через который пользователь видит данные хранящиеся в общей БД.
Скажем что общего между краской и обоями? в общей БД я даю им коды и общее наименование... а для уточнения использую дополнительные формы и дополнительные таблицы, которые храню в отдельных файлах по именам-кодам в общедоступном месте, в которых для краски к примеру указываю цвет и литраж (таблица возможных цветов и таблица возможного литража), а для обоев только длину рулона (таблица длин).
Есть названия которые требуют указывать до 10 параметров...
И человеку при выборе наименования продукции открывается дополнительная форма для этой продукции, в которой он через поля со списками, чекбоксами и т.п. инструментами выбирает нужные ему параметры (цвет, размер и т.д.). Для каждой продукции своя форма и свои таблицы... и все это в общедоступном месте и пополняя общий перечень продукции я создаю файл с дополнительной формой и таблицами....
А если данные пользователь задает на дополнительной форме... через поля со списками и т.д..... то я и хочу их брать из этих полей.. куда ж тут таблицы? если значения полей и есть выбранные значения из таблиц? | |
|
| |
|
|
|
| которые храню в отдельных файлах по именам-кодам в общедоступном месте
Вот что-то мне не очень это понравилось... правда я не совсем понял.
Почему под это дело не завести таблицы в общей БД?
А если данные пользователь задает на дополнительной форме... через поля со списками и т.д..... то я и хочу их брать из этих полей.. куда ж тут таблицы? если значения полей и есть выбранные значения из таблиц?
Выыбранне значение полей можно (нужно?) сохранить в таблице (можно временной) из которой данные можно перенести в основную по имени-коду...
Щас уже совсем некогда, если будет время вечером попробую поподробнее
пока почитайте мой ответ на
http://www.hiprog.com/forum/read.php?id_forum=1&id_theme=695&page=1
очень похоже на вашу задачу | |
|
| |
|
|
|
| >Вот что-то мне не очень это понравилось... правда я не
>совсем понял.
>Почему под это дело не завести таблицы в общей БД?
можно и в одной БД поместить все эти таблицы... меня смущает их количество... несколько сот, а может и тысяч... так они лежат каждый в своем файле-коде как в контейнере со своими формами и модулями обработки таблиц-данных.
>Выыбранне значение полей можно (нужно?) сохранить в таблице
>(можно временной) из которой данные можно перенести в
>основную по имени-коду...
А где будет размещаться временная таблица физически... в общей базе или временная будет висеть в памяти? как если делать 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("ВтораяФорма")
то может ли вторая форма сама присваивать значения переменным первой формы? или она не видит кто её открыл? | |
|
| |
|
|
|
| Цикл мне лично не нравится, думаю будет тормозить
"со своими формами и модулями обработки таблиц-данных. " - неужели обработка настолько различается?
если организовать базу как описано здесь http://www.hiprog.com/forum/read.php?id_forum=1&id_theme=695&page=1, то можно будет все изделия обрабатывать в одной форме.
Та программа которая вызывает имеет объект апликешен (посколько он в ней и создается) , а вот вызываемая ничего не знает об этом. МОжно в вызываемой создать свойство и присовить ему объект текущей формы.
В общем мне кажется, т.е. я почти уверен, что решение с отдельным файлом для каждого изделия не верное, отсюда и поблемы с реализацией. | |
|
| |
|
|
|
| В общем вроде получилось и передавать значение в форму 2 и вытаскивать значения из формы 2 :)
По поводу отдельных файлов... может если я увижу что данные можно унифицировать то все помещу в одну базу, но пока я не вижу как их обобщить... а вообще заметил, что со сременем просматривая уже отлаженые алгоритмы находишь как их можно ещё больше оптимизировать... в основном это связано с етм что со временем узнаешь все больше и больше :)
Спасибо за советы, буду понить про них | |
|
| |
|
|
|
|
| не обижайтесь, пожалуйста, но
- данные хранятся в таблицах, а на форме(-ах) отображаются;
- можно получить данные и не создавая/открывая никаких форм - для этого используются методами, которые предоставляют библиотеки DAO или ADO;
имхо, мне кажется что Вы простую задачу решаете через чур "извращенным" способом | |
|
| |