![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вызов запроса MSAccess из Delphi [D6, MSAccess2000]
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, ибо только он сам знает, что делать когда в тексте встречается такая ссылка