Взаимодействие Access VBA с Delphi - HELP !

niktesla
Дата: 04.06.2004 12:59:39
Добрый день.

У меня имеется БД Accecc'овского формата, в которой есть процедура, написанная на VBA.

Sub MyProc()
.........
End Sub

Возникла необходимость запустить эту процедуру из программы на Delphi, и как это сделать я чего-то не врублюсь...
В принципе, я надеялся запустить ее используя Объекты Автоматизации - создаю объект Application, подключаюсь к базе... а дальше пока неясно.
Макрос например можно выполнить при помощи DoCmd.RunMacro, а вот как используя объект Application(или еще чего другое) выполнить конкретную процедуру или отправить на выполнение кусок VB кода ?
Или как преобразовать вышеупомянутую процедурку в макрос, который можно выполнить при помощи DoCmd.RunMacro ?

HELP !
paparome
Дата: 04.06.2004 13:55:08
Этот топ до конца прочитай - может и передумаешь Акс из Дельфи пользовать!
/topic/88148&hl=Application+Delphi
niktesla
Дата: 04.06.2004 16:06:24
Не, ну это не дело, Есть задача, и мне ее надо решить....

Кто нибудь знает, как запустить из Delphi процедуру VBA, содержащуюся в аксессовской БД ?

или как в аксессе создать макрос из процедуры ?
Sfagnum
Дата: 04.06.2004 16:27:46
переделываешь sub на function, и делаешь макрос для запуска ф-ии...

Сделать можно всё!!!
Только бы знать как...
marvan
Дата: 04.06.2004 16:48:49
Можно поступить совсем некультурно.
Создать запрос, содержащий вызов этой процедуры. И дёргать его через ADO.
Параметры процедуры (если они есть) можно передать как параметры запроса.
niktesla
Дата: 04.06.2004 17:38:56
Спасибо, оба способа показали себя жизнеспособными
аха
Дата: 04.06.2004 17:50:55
вот сходил на форум Дельфы, украл оттуда кусок кода:
begin
{Экспорт в Excel}
  try
    try
      XL := CreateOleObject('Excel.Application');
    except
      raise Exception.Create('Ощибка запуска Excel');
    end;

    XL.Application.EnableEvents := False;
    XL.WorkBooks.Add('c:\test.xls'); 
    RowCount := XL.Workbook.WorkSheets[1].UsedRange.Rows.Count;
    ColCount := 2;
    TableVals := VarArrayCreate([0, RowCount, 0, ColCount], varVariant);

т.е. работать с Оле можно

понятно, что если создать
Aсс := CreateOleObject('Access.Application')
(тут гемор при наличии файла рабочих групп - окошко появляется, если Admin запоролен в системнике по умолчанию - не помню, обходится ли)
дальше:
nAcc.DBEngine.SystemDB:=... (твой файл раб групп)
nacc.DBEngine.DefaultUser:= ...
nacc.DBEngine.DefaultPassword:= ...
то в нем можно открыть требуемый файлик
nAcc.OpenCurrentDatabase Filepath:= ... , Exclusive := ...
ну а там - обращаться к его модулям.

не уверен, что не будет очень много гемора. Но принципиальная возможность есть.
Если просто нужно использовать метод/функцию - дешевле ее переписать на паскале.
Гость33
Дата: 07.06.2004 12:25:29
marvan
Можно поступить совсем некультурно.
Создать запрос, содержащий вызов этой процедуры. И дёргать его через ADO.


А можно подробнее для новичков? Как запрос то написать? В SQL SERVER я бы написал
exec MyFunc
А в Аксессе то как?
Hummer
Дата: 07.06.2004 12:29:32
Application.Run

Создать макрос - просто офигительный совет:)
niktesla
Дата: 07.06.2004 16:15:01
Hummer - спасибо,
Application.Run это действительно, то что надо :)
(интересно кстати, зачем нужны остальные штук 20 Application.Run с различными параметрами)