C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 10 - Анализируем ошибки pIDBInitialize->Initialize() / OLE DB / Visual C++

Шаг 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"));

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


Загрузить проект | | |
Автор Каев Артем.
[AD]