Будем развивать дальше наш проект. Добавим свойства для инициализации соединения. Для того, чтобы устанавливать свойства нам нужна группа переменных. Это структура свойства и набора свойств, а так же указатель на интерфейс.
// Группа переменных для свойств 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 ну и пароль с пользователем при необходимости.