В прошлом шаге мы говорили, что перед инициализацией надо устанавливать свойства соединения. Основой для устaновки свойств является структураDBPROP. Она вот такая:
typedef struct tagDBPROP { DBPROPID dwPropertyID; // Идентификатор свойств DBPROPOPTIONS dwOptions; // Опции DBPROPSTATUS dwStatus; // статус результата. Например если провайдер не поддерживает // это свойство, то вернется DBPROPSTATUS_NOTSUPPORTED DBID colid; // Необязательное ID для колонки. Если ко всем колонкам, то надо //устанавливать в DB_NULLID VARIANT vValue; // Значение свойства. } DBPROP;
Так вот, чтобы произвести инициализацию соединения с OLE провайдером нам нужен массив свойств, в котором определены параметры, например такие, как источник строк, пароль доступа и так далее. Этот массив и передается для инициализации. Объявить его можно так:
DBPROP InitProperties[nProps];
Только поместить этот массив нужно в специальную структуру набора свойств - DBPROPSET:
typedef struct tagDBPROPSET { DBPROP * rgProperties; // Указатель на массив структур ULONG cProperties; // Число свойств в наборе GUID guidPropertySet; // GUID для идентификации } DBPROPSET;
Объявить можно так:
DBPROPSET rgInitPropSet;
Но, в принципе, все просто - для инициализации нужен набор свойств. Только одно свойство в одной специальной структуре. Эти структуры собираются в массив, который и передается для инициализации. А передать можно так.
rgInitPropSet.guidPropertySet = DBPROPSET_DBINIT; rgInitPropSet.cProperties = nProps; rgInitPropSet.rgProperties = InitProperties;
После заполнения массива можно попросить интерфейс IDBInitialize для установки свойств.
pIDBInitialize->QueryInterface(IID_IDBProperties, (void**) &pIDBProperties);
И получив его установить свойства соединения.
hr = pIDBProperties->SetProperties(1, &rgInitPropSet);