Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Открытие формы Access из программы


Автор: Dimon007 2.5.2008, 22:41
Очень нужна помощь в этом вопросе, если бы дело касалось программирования работы с данными БД то проблем бы не возникла а так тут суть такая что есть база данных в которой уже есть формы, так вот надо чтобы они из проги вызывались. Я попытался сделать через компоненты вкладки office2k но при попытке открыть компоненты типа TAccessForm у меня выдается "Класс не зарегистрирован". Единственный способ который может сработать это AccessApplication1->DoCmd->OpenForm но я не знаю как им правильно воспользоваться.
Там появляется переменная типа tagVARIANT и я чесно уже запутался. Кто знает как привильно решить эту задачку подскажите, а лучше код набросайте чтобы открывал форму в базе данных. Вот что у меня есть но это не работает...


Код


WideString dbName = "C:\\new.mdb";
AccessApplication1->Connect();
AccessApplication1->OpenCurrentDatabase (dbName, true);
AccessApplication1->set_Visible(true);
tagVARIANT a,b,c,d;
a.pcVal="main";
b.pcVal="";
c.pcVal="";
d.pcVal="";
AccessApplication1->DoCmd->OpenForm(a,acNormal,b,c,acFormPropertySettings,acWindowNormal,d);




Воть, мож кто знает как это правильно сделать ????

Автор: Данкинг 3.5.2008, 00:10
А почему нельзя просто запустить на выполнение mdb ?

Автор: Dimon007 3.5.2008, 00:21
Данкинг, 
А я дурак не догадался что можно просто открыть Access и запустить форму, 
помоему если бы в поставленная задача звучала "Как открыть форму в Access ?" то я  бы задавал её в разделах про office...
Это не мне надо чтобы все именно так работало, мне надо только помочь осуществить эту часть... И поэтому желательно по теме, прошу помощи так как нормального описания и примеров нигде не нашел...
 smile 

Автор: Данкинг 3.5.2008, 10:58
По-моему, вопрос этот всё равно про "офис". А просто DoCmd.OpenForm (forma) почему нельзя написать? Должно же работать.

Автор: Dimon007 3.5.2008, 11:30
Данкинг, 
Я ж говорю просто не получается после строки
Код

AccessApplication1->DoCmd->OpenForm(

надо задать 6 параметров 4 из которых tagVARIANT , это если делать через TAccessApplication если кто знает как это правильно сделать или каким другим образом это можно сделать...

Автор: Данкинг 3.5.2008, 11:34
Я просто смотрю код нашего бывшего программера, крутого спеца по VBA. Он открывает форму именно так:

Код

DoCmd.OpenForm "formAnkets"


Причём пример этот не единичный. По логике, при создании объекта должно быть то же самое (признаюсь, сам не пробовал, подобных задач решать не доводилось). Какие там ещё могут параметры... smile 

Автор: Dimon007 3.5.2008, 12:00
Данкинг,
Ну если бы на VBA надо было то я бы не мучился... проблема заключается в том что например название формы должно быть описано как tagVARIANT но тут свои проблемы когда я выполняю выше написанный код то просто ничего не происходит. По VBA я совершенно согласен, но вот на С++ хотелось бы лицезреть рабочий пример по теме...

Автор: xvr 4.5.2008, 15:29
Цитата(Dimon007 @ 3.5.2008,  12:00)
Данкинг,
Ну если бы на VBA надо было то я бы не мучился... проблема заключается в том что например название формы должно быть описано как tagVARIANT но тут свои проблемы когда я выполняю выше написанный код то просто ничего не происходит.

В Builder'e надо вместо tagVARIANT пользовать переменные типа TVariant и присваивать им нужные значения (нужных типов).
Т.е. как то так
Код

WideString dbName = "C:\\new.mdb";
AccessApplication1->Connect();
AccessApplication1->OpenCurrentDatabase (dbName, true);
AccessApplication1->set_Visible(true);
TVariant a,b,c,d;
a="main";
b="";
c="";
d="";
AccessApplication1->DoCmd->OpenForm(a,acNormal,b,c,acFormPropertySettings,acWindowNormal,d);

Что касается сообщения "Класс не зарегистрирован", то оно наводит на мысль что какая то часть Оффиса не установлена.

Автор: Dimon007 4.5.2008, 16:12
xvr, 
Спасибо огромное теперь заработало, действительно надо было вместо tagVARIANT использовать тип TVariant. Выручил, тема закрыта... smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)