Форум: "Базы";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];
ВнизВызов запроса MSAccess из Delphi Найти похожие ветки
← →
Slider007 © (2004-04-13 12:16) [0]Здравствуйте !
У меня возникла такая проблема:
В MSAccess я создал запрос (MyQuery), в котором используется написанная на встроенном VisualBasic"е функция (MyFunc)
Так вот когда я питаюсь выполнить этот запрос:
ADOQuery.SQL.Text := "Exec MyQuery";
ADOQuery.Active := true;
..у неня вылетает ошибка: "Неопределенная функция "MyFunc" в выражении"
В самом Аксессе это запрос выполняется без проблем.
Скажите пжалста в чём моя ошибка :)
Заранее спасибо.
← →
Slider007 © (2004-04-13 12:16) [0]Здравствуйте !
У меня возникла такая проблема:
В MSAccess я создал запрос (MyQuery), в котором используется написанная на встроенном VisualBasic"е функция (MyFunc)
Так вот когда я питаюсь выполнить этот запрос:
ADOQuery.SQL.Text := "Exec MyQuery";
ADOQuery.Active := true;
..у неня вылетает ошибка: "Неопределенная функция "MyFunc" в выражении"
В самом Аксессе это запрос выполняется без проблем.
Скажите пжалста в чём моя ошибка :)
Заранее спасибо.
← →
sniknik © (2004-04-13 12:20) [1]MyFunc компилируется и выполняется access-ом, дельфевская прога про нее ничего не знает, и встроеного вижуал бейсика не имеет.
в общем нельзя так делать.
← →
sniknik © (2004-04-13 12:20) [1]MyFunc компилируется и выполняется access-ом, дельфевская прога про нее ничего не знает, и встроеного вижуал бейсика не имеет.
в общем нельзя так делать.
← →
Slider007 © (2004-04-13 12:21) [2]понятно, спасибо
← →
Slider007 © (2004-04-13 12:21) [2]понятно, спасибо
← →
Anatoly Podgoretsky © (2004-04-13 12:23) [3]MSAccess является OLE сервером, так что можешь рулить им как угодно.
← →
Anatoly Podgoretsky © (2004-04-13 12:23) [3]MSAccess является OLE сервером, так что можешь рулить им как угодно.
← →
Digitman © (2004-04-13 12:25) [4]
> В самом Аксессе
Access как среда включает в себя интерпретатор VBA-программ
ADO же никаких VBA-программ не знает
Для того чтобы можно было вызывать на выполнение запросы, содержащие VBA-ссылки, следует отказаться от ADO и работать именно с Access-объектом
← →
Digitman © (2004-04-13 12:25) [4]
> В самом Аксессе
Access как среда включает в себя интерпретатор VBA-программ
ADO же никаких VBA-программ не знает
Для того чтобы можно было вызывать на выполнение запросы, содержащие VBA-ссылки, следует отказаться от ADO и работать именно с Access-объектом
← →
asafr (2004-04-13 12:48) [5]Связка компонентов AdoConnection->AdoStoredProc
В AdoStoredProc в Object Inspector вручную в свойстве AdoStoredProc.ProcedureName прописываешь имя запроса MyQuery. Вручную, потому что по умолчанию не предлагается список запросов, наподобии того, если б ты работал с MS SQL Server... И теперь используй AdoStoredProc на здоровие...
← →
asafr (2004-04-13 12:48) [5]Связка компонентов AdoConnection->AdoStoredProc
В AdoStoredProc в Object Inspector вручную в свойстве AdoStoredProc.ProcedureName прописываешь имя запроса MyQuery. Вручную, потому что по умолчанию не предлагается список запросов, наподобии того, если б ты работал с MS SQL Server... И теперь используй AdoStoredProc на здоровие...
← →
asafr (2004-04-13 12:49) [6]Пардон... В MS SQL не список запросов, а список SP предлагается
← →
asafr (2004-04-13 12:49) [6]Пардон... В MS SQL не список запросов, а список SP предлагается
← →
sniknik © (2004-04-13 13:01) [7]asafr (13.04.04 12:48) [5]
тут проблема не в получении списка и не в самом запросе, а в том что внутри процедура написаная в access используется.
← →
sniknik © (2004-04-13 13:01) [7]asafr (13.04.04 12:48) [5]
тут проблема не в получении списка и не в самом запросе, а в том что внутри процедура написаная в access используется.
← →
Digitman © (2004-04-13 13:21) [8]
> asafr
с AccessVBA-кодом может работать только сам Access
← →
Digitman © (2004-04-13 13:21) [8]
> asafr
с AccessVBA-кодом может работать только сам Access
← →
Slider007 © (2004-04-13 13:39) [9]хмм, так я ничего и не понял :)
у кого-нибудь это на практике получалось ?
дайте пожалуйста окончательный ответ :)
← →
Slider007 © (2004-04-13 13:39) [9]хмм, так я ничего и не понял :)
у кого-нибудь это на практике получалось ?
дайте пожалуйста окончательный ответ :)
← →
Digitman © (2004-04-13 13:45) [10]
> Slider007
вердикт окончательный и обжалованию не подлежит : ADO не дает возможности исполнять любые запросы, содержащие тексте ссылки на VBA-процедуры.. исполнение таких запросов - прерогатива самого Access, ибо только он сам знает, что делать когда в тексте встречается такая ссылка
← →
Digitman © (2004-04-13 13:45) [10]
> Slider007
вердикт окончательный и обжалованию не подлежит : ADO не дает возможности исполнять любые запросы, содержащие тексте ссылки на VBA-процедуры.. исполнение таких запросов - прерогатива самого Access, ибо только он сам знает, что делать когда в тексте встречается такая ссылка
← →
Slider007 © (2004-04-13 13:48) [11]А вообще есть способ из Delphi выполнить такой запрос ?
← →
Slider007 © (2004-04-13 13:48) [11]А вообще есть способ из Delphi выполнить такой запрос ?
← →
Digitman © (2004-04-13 13:54) [12]есть.
отказаться от АДО и работать непосредственно с Access как с внешним сервером автоматизации
← →
Digitman © (2004-04-13 13:54) [12]есть.
отказаться от АДО и работать непосредственно с Access как с внешним сервером автоматизации
← →
Slider007 © (2004-04-13 13:59) [13]Digitman, если не трудно, объясни пожалуйста, каким образом это осуществить (работать непосредственно с Access как с внешним сервером автоматизации), и что такое "внешний сервер автоматизации"
или если тебе известна какая-нибудь ссылка в инете по этому вопросу, дай мне её пожалуйста :)
← →
Slider007 © (2004-04-13 13:59) [13]Digitman, если не трудно, объясни пожалуйста, каким образом это осуществить (работать непосредственно с Access как с внешним сервером автоматизации), и что такое "внешний сервер автоматизации"
или если тебе известна какая-нибудь ссылка в инете по этому вопросу, дай мне её пожалуйста :)
← →
Digitman © (2004-04-13 14:12) [14]
> Slider007
у тебя в палитре компонентов делфи есть закладка Servers ?
← →
Digitman © (2004-04-13 14:12) [14]
> Slider007
у тебя в палитре компонентов делфи есть закладка Servers ?
← →
Slider007 © (2004-04-13 14:15) [15]Есть !
← →
Slider007 © (2004-04-13 14:15) [15]Есть !
← →
sniknik © (2004-04-13 14:24) [16]Slider007 © (13.04.04 14:15) [15]
> Есть !
забудь о ней. ;о) это зделаеш зато заполучиш другие проблеммы.
← →
sniknik © (2004-04-13 14:24) [16]Slider007 © (13.04.04 14:15) [15]
> Есть !
забудь о ней. ;о) это зделаеш зато заполучиш другие проблеммы.
← →
sniknik © (2004-04-13 14:25) [17]если только так, в порядке самообразования...
← →
sniknik © (2004-04-13 14:25) [17]если только так, в порядке самообразования...
← →
Slider007 © (2004-04-13 14:29) [18]конечно и для самообразования !
дайте хотя бы ссылку на документацию какую-нибудь :)
пожалуйста
← →
Slider007 © (2004-04-13 14:29) [18]конечно и для самообразования !
дайте хотя бы ссылку на документацию какую-нибудь :)
пожалуйста
← →
Digitman © (2004-04-13 14:35) [19]впрочем, это мало поможет тебе...
var
Access: OleVariant;
..
Access := CreateOleObject("Access.Application");
далее к объекту Access применяешь те методы, которые позволяют получить требуемый объект Recordset
подробности - в хэлпе на MS Access VBA
← →
Digitman © (2004-04-13 14:35) [19]впрочем, это мало поможет тебе...
var
Access: OleVariant;
..
Access := CreateOleObject("Access.Application");
далее к объекту Access применяешь те методы, которые позволяют получить требуемый объект Recordset
подробности - в хэлпе на MS Access VBA
← →
Slider007 © (2004-04-13 14:37) [20]спасибо, сейчас попробую
← →
Slider007 © (2004-04-13 14:37) [20]спасибо, сейчас попробую
← →
sniknik © (2004-04-13 14:42) [21]можеш залезть в папку
D:\Program Files\Borland\Delphi7\Ocx\Servers
и посмотреть Access97.pas .. AccessXP.pas, если пользоваться ими (или с компонентом с закладки что в принципе тоже самое) то хотя бы контекстная ссылка на процедуры будет (в отличие от [19]).
← →
sniknik © (2004-04-13 14:42) [21]можеш залезть в папку
D:\Program Files\Borland\Delphi7\Ocx\Servers
и посмотреть Access97.pas .. AccessXP.pas, если пользоваться ими (или с компонентом с закладки что в принципе тоже самое) то хотя бы контекстная ссылка на процедуры будет (в отличие от [19]).
← →
Digitman © (2004-04-13 14:51) [22]
> хотя бы контекстная ссылка на процедуры будет
будет.
но с учетом "что такое "внешний сервер автоматизации" и "для самообразования" лучше таки на первых порах поэкспериментировать с поздним связыванием .. это ощутимо ближе к соотв.примерам в MSAccessVBA-хэлпе и практически не требует адаптации к синтаксису OP
← →
Digitman © (2004-04-13 14:51) [22]
> хотя бы контекстная ссылка на процедуры будет
будет.
но с учетом "что такое "внешний сервер автоматизации" и "для самообразования" лучше таки на первых порах поэкспериментировать с поздним связыванием .. это ощутимо ближе к соотв.примерам в MSAccessVBA-хэлпе и практически не требует адаптации к синтаксису OP
← →
Slider007 © (2004-04-14 08:29) [23]Извините ребята, ещё вопрос:
>var
> Access: OleVariant;
>
>..
>
> Access := CreateOleObject("Access.Application");
Как этот самый объект "Access" связать с конкретным файлом БД ?
← →
Slider007 © (2004-04-14 08:29) [23]Извините ребята, ещё вопрос:
>var
> Access: OleVariant;
>
>..
>
> Access := CreateOleObject("Access.Application");
Как этот самый объект "Access" связать с конкретным файлом БД ?
← →
sniknik © (2004-04-14 08:37) [24]через его процедуры, функции, параметры...
почему я и думаю что с контекстной помощь. было бы легче.
вполне возможно что так явно ты не сможеш подключить к нему датасорс-грид, тут же что получается, вызвав "Access.Application" ты по сути запустил программу access а дальше ей управляеш извне, access этот получился таким сервером к которому у тебя удаленный доступ. есть у него метод/параметр открытая тавлица/база сможеш грид подключить, нет ... не обессудь. ;о)
чего и говорил, решаеш одну маленькую проблемку а получаеш кучу больших.
← →
sniknik © (2004-04-14 08:37) [24]через его процедуры, функции, параметры...
почему я и думаю что с контекстной помощь. было бы легче.
вполне возможно что так явно ты не сможеш подключить к нему датасорс-грид, тут же что получается, вызвав "Access.Application" ты по сути запустил программу access а дальше ей управляеш извне, access этот получился таким сервером к которому у тебя удаленный доступ. есть у него метод/параметр открытая тавлица/база сможеш грид подключить, нет ... не обессудь. ;о)
чего и говорил, решаеш одну маленькую проблемку а получаеш кучу больших.
← →
Digitman © (2004-04-14 08:42) [25]у объекта Access.Application есть объект-свойство DBEngine
у объекта DBEngine есть св-во-коллекция Workspaces объектов Workspace
у объекта Workspace есть метод OpenDatabase
все это подробно описано в справке по AccessVBA, почитай - все станет ясно
← →
Digitman © (2004-04-14 08:42) [25]у объекта Access.Application есть объект-свойство DBEngine
у объекта DBEngine есть св-во-коллекция Workspaces объектов Workspace
у объекта Workspace есть метод OpenDatabase
все это подробно описано в справке по AccessVBA, почитай - все станет ясно
← →
Slider007 © (2004-04-14 08:53) [26]Спасибо, сейчас буду копаться
← →
Slider007 © (2004-04-14 08:53) [26]Спасибо, сейчас буду копаться
← →
Slider007 © (2004-04-14 11:19) [27]Ребята !
у меня получилось сделать то, что я задумал следующим образом:
я положил на форму компонент 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 11:19) [27]Ребята !
у меня получилось сделать то, что я задумал следующим образом:
я положил на форму компонент 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;
всё вроде замечательно работает, спасибо за подсказку про "внешний сервер автоматизации"
← →
sniknik © (2004-04-14 13:23) [28]распространять программу будеш вместе с мс оффисом.
← →
sniknik © (2004-04-14 13:23) [28]распространять программу будеш вместе с мс оффисом.
← →
Digitman © (2004-04-14 15:19) [29]
> sniknik
"Эт точно !" (с)
задница во весь экран)
← →
Digitman © (2004-04-14 15:19) [29]
> sniknik
"Эт точно !" (с)
задница во весь экран)
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];
Память: 0.59 MB
Время: 0.045 c