Шаг 10 - Анализируем ошибки pIDBInitialize->Initialize()

В прошлом шаге мы устанавливали свойства. После установки свойств Вам нужно выло вызвать Initialize() для инициализации провайдера. Но эта функция может и не произвести инициализацию. Надо бы убедиться, что инициализация все-таки прошла. Эта функция возвращает HRESULT:

HRESULT Initialize();

Возвратов может быть много. Но на нормальную инициализацию Вы получите S_OK. Давайте расширим наш пример. Проверим ошибки.

hr=pIDBInitialize->Initialize();
if  (FAILED(hr))
{
	cout << "Unable to initialize IDBInitialize" << endl;
	switch  (hr)
	{
		case DB_S_ASYNCHRONOUS:
			cout  "DB_S_ASYNCHRONOUS" << endl;
			cout << "DB_S_ASYNCHRONOUS" << endl;
		case DB_S_ERRORSOCCURRED:
			cout << "DB_S_ERRORSOCCURRED" << endl;
			break;
		case E_FAIL:
			cout << "E_FAIL" << endl;
			break;
		case E_OUTOFMEMORY:
			cout << "E_OUTOFMEMORY" << endl;
			break;
		case E_UNEXPECTED:
			cout << "E_UNEXPECTED" << endl;
			break;
		case DB_E_ALREADYINITIALIZED:
			cout << "DB_E_ALREADYINITIALIZED" << endl;
			break;
		case DB_E_CANCELED:
			cout << "DB_E_CANCELED" << endl;
			break;
		case DB_E_ERRORSOCCURRED:
			cout << "DB_E_ERRORSOCCURRED" << endl;
			break;
		case DB_SEC_E_AUTH_FAILED:
			cout << "DB_SEC_E_AUTH_FAILED" << endl;
			break;
		default:
			cout << " ????? " << endl;
			break;
	}	
	pIDBInitialize->Release(); 
	CoUninitialize();
	return;
}
Так вот, если Вы запустите этот пример на 90% я уверен, что Вы получите ошибку E_FAIL. И не Я не Вы в этом не виноваты. Мы же с Вами говорили, что OLEDB это COM объекты ??? Говорили. Поищите в реестре строку OLE_DB_NWind_Jet, так как именно этого провайдера мы пытались оживить. Вот сдесь:
// Второе
InitProperties[1].dwPropertyID = DBPROP_INIT_DATASOURCE;
InitProperties[1].vValue.vt = VT_BSTR;
InitProperties[1].vValue.bstrVal = SysAllocString(OLESTR("OLE_DB_NWind_Jet"));

Если ошибка есть, то скорее всего о нем не упоминается в реесте. Откуда его взять ??? Смотрите следующие шаги :-))


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