|
|
|
| Здравствуйте.
Подскажите кто сталкивался, вот в Access есть стандартный компонент VBA (подключаемый как DLL в ссылках по умолчанию); когда требуется вызвать его функцию, то делают это чаще в простой неквалифицированной форме (например Date(), хотя можно и в объектной: VBA.DateTime.Date() ).
Суть вопроса: когда пишется ActiveX DLL на Delphi, чтобы затем подключить его к Access через "Ссылки", каким образом указывается что метод допускается вызывать в простой форме?
Т.е. например есть код на Delphi:
type
TTestClass = class(TTypedComObject, ITestClass)
published
function Test1: SYSINT; stdcall;
end;
implementation
uses ComServ, Dialogs;
function TTestClass.Test1: SYSINT; export;
begin
ShowMessage('OK');
Result:=0;
end;
Это все компилируется в DLL, подключается в Access и прекрасно работает, но нужно чтобы в последующем в Access функция из компонента вызывалась просто Test1(), а не MyTestClass.Test1, в т.ч. чтобы ее можно было использовать в SQL-запросах. | |
|
| |
|
|
|
| Думаю что Ваша задача частично выполнима
не получится просто обратиться к Вашей функции ведь Акс не знает из какой библиотеки ее выудить
а вот SQL тут проще - SQL прекрасно позволяет использовать публичные функции т.е. в модуле пишите функцию в которой обращаетесь к нужной библиотеке и возвращаете запросу нужное значение | |
|
| |
|
|
|
| Думаю задача полностью выполнима, поскольку VBA-шные функции-же Access и SQL как-то понимают откуда выуживать. Кроме того при написании DLL на VB есть свойство класса Instancing=GlobalMultiUse, которое как раз и позволяет использовать функции DLL в любых приложениях в простой форме вызова, но с VB сложность поскольку Access его как раз понимает а SQL нет, а про Delphi и C++ известно что их DLL-функции понимает в т.ч. и SQL. Поэтому остается вопрос - где в Delphi это включается (аналог GlobalMultiUse)? | |
|
| |