Шаг 7 - О свойствах (DBPROP) и инициализации

В прошлом шаге мы говорили, что перед инициализацией надо устанавливать свойства соединения. Основой для уст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; 

7.gif (2207 b)

После заполнения массива можно попросить интерфейс IDBInitialize для установки свойств.

pIDBInitialize->QueryInterface(IID_IDBProperties, (void**) &pIDBProperties);

И получив его установить свойства соединения.

hr = pIDBProperties->SetProperties(1, &rgInitPropSet);

Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 10.06.2001