Шаг 9 - Пример заполнения свойств

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

// Группа переменных для свойств
const ULONG   nProps = 4;
IDBProperties*  pIDBProperties;
DBPROP    InitProperties[nProps];
DBPROPSET   rgInitPropSet;

Дальше набор свойст необходимо инициализировать. Часть полей в свойствах общие и заполняются одинаково.

// Инициализация общих свойств
for (ULONG i = 0; i < nProps; i++ )
{
	VariantInit(&InitProperties[i].vValue);
	InitProperties[i].dwOptions = DBPROPOPTIONS_REQUIRED;
	InitProperties[i].colid = DB_NULLID;
}

Теперь нам надо заполнить каждую структуру свойствами.

// Первое
InitProperties[0].dwPropertyID = DBPROP_INIT_PROMPT;
InitProperties[0].vValue.vt = VT_I2;
InitProperties[0].vValue.iVal = DBPROMPT_NOPROMPT;
// Второе
InitProperties[1].dwPropertyID = DBPROP_INIT_DATASOURCE;
InitProperties[1].vValue.vt = VT_BSTR;
InitProperties[1].vValue.bstrVal = SysAllocString(OLESTR("OLE_DB_NWind_Jet"));
// Третье
InitProperties[2].dwPropertyID = DBPROP_AUTH_USERID;
InitProperties[2].vValue.vt = VT_BSTR;
InitProperties[2].vValue.bstrVal = SysAllocString(OLESTR(""));
// Четвертое
InitProperties[3].dwPropertyID = DBPROP_AUTH_PASSWORD;
InitProperties[3].vValue.vt = VT_BSTR;
InitProperties[3].vValue.bstrVal = SysAllocString(OLESTR(""));

А вот теперь мы можем создать структуру с набором свойств:

// Набор свойств
rgInitPropSet.guidPropertySet = DBPROPSET_DBINIT;
rgInitPropSet.cProperties = nProps;
rgInitPropSet.rgProperties = InitProperties;

Создав структуру свойств можно вызвать интерфейс установки свойств и установить их. После установки нужно проверить получилось у нас это или нет и освободить указатель на интерфейс свойств.

// Получаем интерфес свойств
pIDBInitialize->QueryInterface(IID_IDBProperties, (void**)&pIDBProperties);
// устанавливаем свойства
hr = pIDBProperties->SetProperties(1, &rgInitPropSet);
// Освобождаем интерфейс
pIDBProperties->Release();
// Освобождаем строки
SysFreeString(InitProperties[1].vValue.bstrVal);
SysFreeString(InitProperties[2].vValue.bstrVal);
SysFreeString(InitProperties[3].vValue.bstrVal);
// Проверка что свойства установлены
if  (FAILED(hr)) 
{
	cout << "Unable to set Propertes" << endl;
	pIDBInitialize->Release();
	CoUninitialize();
	return;
}

Вот так производится установка свойств. В принципе ничего страшного. Надо правда знать имя DataSource ну и пароль с пользователем при необходимости.


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