Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вызов запроса MSAccess из Delphi [D6, MSAccess2000]


Страницы:   1 2

Slider007 ©   (2004-04-13 12:16:00) 

Здравствуйте !
У меня возникла такая проблема:
В MSAccess я создал запрос (MyQuery), в котором используется написанная на встроенном VisualBasic'е функция (MyFunc)
Так вот когда я питаюсь выполнить этот запрос:

ADOQuery.SQL.Text := 'Exec MyQuery';
ADOQuery.Active   := true;

..у неня вылетает ошибка: "Неопределенная функция 'MyFunc' в выражении"

В самом Аксессе это запрос выполняется без проблем.

Скажите пжалста в чём моя ошибка :)
Заранее спасибо.


Digitman   (2004-04-14 15:19:00) [1]


> sniknik


"Эт точно !" (с)

задница во весь экран)


sniknik   (2004-04-14 13:23:00) [2]

распространять программу будеш вместе с мс оффисом.


Slider007   (2004-04-14 11:19:00) [3]

Ребята !
у меня получилось сделать то, что я задумал следующим образом:
я положил на форму компонент TAccessApplication и написал следующий код :

var
 acc : TAccessApplication;
begin
 acc.Connect;
 acc.Visible := false;
 acc.OpenCurrentDatabase('c:\db1.mdb',true);
 acc.DoCmd.OpenQuery('MyQuery',acViewNormal,acEdit);
 acc.Disconnect;
end;

всё вроде замечательно работает, спасибо за подсказку про "внешний сервер автоматизации"


Slider007   (2004-04-14 08:53:00) [4]

Спасибо, сейчас буду копаться


Digitman   (2004-04-14 08:42:00) [5]

у объекта Access.Application есть объект-свойство DBEngine
у объекта DBEngine есть св-во-коллекция Workspaces объектов Workspace
у объекта Workspace есть метод OpenDatabase

все это подробно описано в справке по AccessVBA, почитай - все станет ясно


sniknik   (2004-04-14 08:37:00) [6]

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

вполне возможно что так явно ты не сможеш подключить к нему датасорс-грид, тут же что получается, вызвав "Access.Application" ты по сути запустил программу access а дальше ей управляеш извне, access этот получился таким сервером к которому у тебя удаленный доступ. есть у него метод/параметр открытая тавлица/база сможеш грид подключить, нет ... не обессудь. ;о)
чего и говорил, решаеш одну маленькую проблемку а получаеш кучу больших.


Slider007   (2004-04-14 08:29:00) [7]

Извините ребята, ещё вопрос:

>var
> Access: OleVariant;
>
>..
>
> Access := CreateOleObject('Access.Application');

Как этот самый объект "Access" связать с конкретным файлом БД ?


Digitman   (2004-04-13 14:51:00) [8]


> хотя бы контекстная ссылка на процедуры будет


будет.

но с учетом "что такое "внешний сервер автоматизации" и "для самообразования" лучше таки на первых порах поэкспериментировать с поздним связыванием .. это ощутимо ближе к соотв.примерам в MSAccessVBA-хэлпе и практически не требует адаптации к синтаксису OP


sniknik   (2004-04-13 14:42:00) [9]

можеш залезть в папку
D:\Program Files\Borland\Delphi7\Ocx\Servers
и посмотреть Access97.pas .. AccessXP.pas, если пользоваться ими (или с компонентом с закладки что в принципе тоже самое) то хотя бы контекстная ссылка на процедуры будет (в отличие от [19]).


Slider007   (2004-04-13 14:37:00) [10]

спасибо, сейчас попробую


Digitman   (2004-04-13 14:35:00) [11]

впрочем, это мало поможет тебе...

var
 Access: OleVariant;

..

 Access := CreateOleObject('Access.Application');

далее к объекту Access применяешь те методы, которые позволяют получить требуемый объект Recordset

подробности - в хэлпе на MS Access VBA


Slider007   (2004-04-13 14:29:00) [12]

конечно и для самообразования !
дайте хотя бы ссылку на документацию какую-нибудь :)
пожалуйста


sniknik   (2004-04-13 14:25:00) [13]

если только так, в порядке самообразования...


sniknik   (2004-04-13 14:24:00) [14]

Slider007 ©   (13.04.04 14:15) [15]
> Есть !
забудь о ней. ;о) это зделаеш зато заполучиш другие проблеммы.


Slider007   (2004-04-13 14:15:00) [15]

Есть !


Digitman   (2004-04-13 14:12:00) [16]


> Slider007


у тебя в палитре компонентов делфи есть закладка Servers ?


Slider007   (2004-04-13 13:59:00) [17]

Digitman, если не трудно, объясни пожалуйста, каким образом это осуществить (работать непосредственно с Access как с внешним сервером автоматизации), и что такое "внешний сервер автоматизации"
или если тебе известна какая-нибудь ссылка в инете по этому вопросу, дай мне её пожалуйста :)


Digitman   (2004-04-13 13:54:00) [18]

есть.

отказаться от АДО и работать непосредственно с Access как с внешним сервером автоматизации


Slider007   (2004-04-13 13:48:00) [19]

А вообще есть способ из Delphi выполнить такой запрос ?


Digitman   (2004-04-13 13:45:00) [20]


> Slider007


вердикт окончательный и обжалованию не подлежит : ADO не дает возможности исполнять любые запросы, содержащие тексте ссылки на VBA-процедуры.. исполнение таких запросов - прерогатива самого Access, ибо только он сам знает, что делать когда в тексте встречается такая ссылка


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо