Библиотека
ParusInfoProvider.dll содержит реализацию провайдера для БД Парус8. Провайдер реализует, в дополнение к обязательным, интерфейс, позволяющий управлять им посредством механизма "Пользовательских приложений":
1 IParusProvider = interface(IDispatch)
2 ['{4864AE99-80E6-4FC6-9DB0-EAB248F72362}']
3 procedure Connect(const Database: WideString;
4 const UserName: WideString;
5 const Password: WideString); safecall;
6 property QueryObject: OleVariant;
7 property StoredProcObject: OleVariant;
8 end;
Объект-провайдер может установить связь с БД либо самостоятельно с использованием переданных в метод Connect параметров соединения, либо с помощью объектов
Query и
StoredProc , предоставляемых системой Парус8 для использования в пользовательских приложениях. В свою очередь, созданный провайдер с установленным соединением может быть передан в метод
Execute объекта
QueryBuilder.Application . Вторым параметром может быть передано значение, представляющее структуру запроса. Это может быть либо строка с указанием имени файла, либо объект, реализующий интерфейс
IStream (например,
MSXML.DOMDocument ), либо строка, представляющая собой xml-документ. Все средства манипуляции структурой и поведением запроса предоставляются на уровне работы с xml-документом, описывающим запрос.
Пример | Пример скрипта пользовательского приложения на DelphiScript 01procedure QueryBuilderTest;
02var
03 LApplication: OleVarint;
04 LProvider: OleVarint;
05 LDocument: OleVariant;
06begin
07 //описание структуры запроса. Из BLOB, из файла, из строки - откуда угодно
08 LDocument := CreateOleObject('MSXML.DOMDocument');
09 //LDocument реализует IXMLDOMDocument и IStream
10 LDocument.loadXML('<Query Provider="{B3079C97-6EBC-43EB-880F-58F094B322B0}">' +
11 '<Item Type="Table" Table="AGNLIST" Alias="MAIN" TableAlias="MAIN">' +
12 '<Item ColumnIndex="0" Type="Field" Field="AGNABBR" Table="AGNLIST" ' +
13 'Alias="MAIN_AGNABBR" TableAlias="MAIN"/>' +
14 '<Item ColumnIndex="1" Type="Field" Field="VERSION" Table="AGNLIST" ' +
15 'Alias="MAIN_VERSION" TableAlias="MAIN"/>' +
16 '</Item>' +
17 '</Query>');
18
19 //Скрытие дерева структуры
20 LDocument.documentElement.setAttribute('TreeWidth', 0);
21
22 //Наложение условий отбора на колонку
23 LDocument.selectSingleNode('/*/Item/Item[@Field="AGNABBR" and @Table="AGNLIST"]').
24 setAttribute('ColumnFilter', 'Б*');
25
26 //Переименование колонки
27 LDocument.selectSingleNode('/*/Item/Item[@Field="VERSION" and @Table="AGNLIST"]').
28 setAttribute('Caption', 'Версия');
29
30
31 //создание провайдера и передача ему объектов для соединения с БД
32 LProvider := CreateOleObject('ParusInfoProvider.ParusProvider');
33 LProvider.QueryObject := Query;
34 LProvider.StoredProcObject := StoredProc;
35
36 //создание и использование объекта-приложения QueryBuilder
37 LApplication := CreateOleObject('QueryBuilder.Application');
38
39 //В качестве второго параметра передается ОБЪЕКТ, через
40 // IStream содержащий структуру запроса
41 LApplication.Execute(LProvider, LDocument);
42 LApplication.Visible := True;
43
44 //Ожидание завершения работы с приложением
45 repeat
46 Application.ProcessMessages;
47 until not LApplication.Visible;
48
49end;
50
|
Интерфейс автоматизации поддерживает также метод для автоматического применения шаблона для переноса в Excel.
Пример | Допустим, .MQR-файл, описывающий запрос, содержащий шаблон с именем "Простой Перенос" загружен в раздел "Модули пользовательских приложений" с мнемокодом "QueryData". Для этого необходимо создать модуль пользовательского приложения с типом "COM-сервер" или "Надстройка Excel" и загрузить из файла .MQR-файл. Проверки соответствия формата загружаемого файла заявленному типу модуля пользовательского приложения Парус не производит, что позволяет воспользоваться этим трюком. Тогда: 01procedure QueryBuilderTemplateTest;
02var
03 LApplication: OleVarint;
04 LProvider: OleVarint;
05 S: string;
06begin
07 Query.SQL.Text := 'select BMODULE from V_UAMODULES where SCODE = :CODE';
08 //мнемокод модуля пользовательского приложения, содержащего
09 //загруженный .MQR-файл
10 Query.ParamByName('CODE').Value := 'QueryData';
11 Query.Open;
12 S := Query.FieldByName('BMODULE').AsString;
13 Query.Close;
14
15 //создание провайдера и передача ему объектов для соединения с БД
16 LProvider := CreateOleObject('ParusInfoProvider.ParusProvider');
17 LProvider.QueryObject := Query;
18 LProvider.StoredProcObject := StoredProc;
19
20 //создание и использование объекта-приложения QueryBuilder
21 LApplication := CreateOleObject('QueryBuilder.Application');
22
23 //В качестве второго параметра передается СТРОКА, содержащая xml с описанием
24 //структуры запроса и шаблоны для переноса в Excel
25 LApplication.ExecuteTemplate(LProvider, S, 'Простой Перенос');
26end;
|