Перечислители. Объекты соединения с источниками данных.
Объекты-перечислители обеспечивают поиск любых объектов 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 объекта-источника данных.