Иллюстрированный самоучитель по Delphi 7 для профессионалов

Перечислители. Объекты соединения с источниками данных.

Объекты-перечислители обеспечивают поиск любых объектов ADO, которые имеют доступ к источникам данных. При этом другие перечислители также видны в данном перечислителе.

Первичный поиск источников данных осуществляется в провайдере ADO. Перечислители могут отбирать только источники данных конкретных типов, поэтому провайдер обеспечивает доступ к конкретному типу хранилища данных.

В составе ADO имеется системный корневой перечислитель, который выполняет начальный поиск других перечислителей и источников данных. Его можно использовать, зная его идентификатор класса CLSID_OLEDB_ENUMERATOR.

Примечание
В Delphi GUID глобального перечислителя содержится в файле \Delphi7\Source \Vcl\OleDB.pas
.

CLSID_OLEDB_ENrjMERATOR: TGUID= '{C8B522DO-5CF3-11CE-ADE5-OOAA0044773D}

Функции перечислителя содержатся в интерфейсе isourcesRowset. Метод:

function GetSourcesRowset(const punkOuter: lUnknown;
const riid: TGUID; cPropertySets: UINT; rgProperties: PDBPropSetArray;
out ppSourcesRowset: lUnknown): HResult; stdcall;

…возвращает ссылку на объект набора рядов (см. выше), содержащий сведения о найденных источниках данных или перечислителях.

Объекты соединения с источниками данных

Внутренний механизм ADO, обеспечивающий соединение с хранилищем данных, использует два типа объектов. Это объекты-источники данных и объекты-сессии.

Объект-источник данных обеспечивает представление информации о требуемом реальном источнике данных и подключение к нему.

Для ввода сведений о хранилище данных используется интерфейс iDBProperties. Для успешного подключения необходимо задать обязательные сведения. Вероятно, для любого хранилища данных будет актуальной информация об его имени, пользователе и пароле. Однако каждый тип хранилища имеет собственные уникальные настройки.

Для получения списка всех обязательных параметров соединения с данным хранилищем можно воспользоваться методом:

function GetPropertylnfo(cPropertylDSets: UINT; rgPropertylDSets: PDBPropIDSetArray;
var pcPropertylnfoSets: UINT; out prgPropertylnfoSets: PDBPropInfoSet;
ppDescBuffer: PPOleStr): HResult; stdcall;

…который возвращает заполненную структуру DBPROPINFO.

PDBPropInfo = ^TDBPropInfo;
DBPROPINFO = packed record
pwszDescription: PWideChar;
dwPropertylD: DBPROPID;
dwFlags: DBPROPFLAGS;
vtType: Word;
vValues: OleVariant;
end;
TDBPropInfo = DBPROPINFO;

Для каждого обязательного параметра в элементе dwFlags устанавливается значение DBPROPFLAGS_REQUIRED.

Для инициализации соединения необходимо использовать метод:

function Initialize: HResult; stdcall;

…интерфейса iDBinitiaiize объекта-источника данных.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.