Шаг 24 - CDynamicAccessor - когда структура таблицы неизвестна

Мы с вами использовали CAccessor. Использовали его потому что, структура данных была уже известна. А вот если она будет не известна, то мы должны будем использовать CDynamicAccessor. Мы создадим Win32 console приложение, дабы не загромождаться кодом. Смотрите код. Он прокомментирован, да и прошлые шаги есть. Мы все повторим за AppWizard, только будем использовать CDynamicAccessor.

#include "stdafx.h"
#include "afxwin.h"
#include "afxoledb.h" // классы OLEDB шаблонов
#include "iostream.h"

void main(int argc, char* argv[])
{
	CoInitialize(NULL);		// инициализация COM
	CDataSource db;
	CSession session;
	// связь
	CCommand dinamic;
	HRESULT		hr;
	// настрока свойств
	CDBPropSet	dbinit(DBPROPSET_DBINIT);
	dbinit.AddProperty(DBPROP_AUTH_CACHE_AUTHINFO, true);
	dbinit.AddProperty(DBPROP_AUTH_ENCRYPT_PASSWORD, false);
	dbinit.AddProperty(DBPROP_AUTH_MASK_PASSWORD, false);
	dbinit.AddProperty(DBPROP_AUTH_PASSWORD, "");
	dbinit.AddProperty(DBPROP_AUTH_PERSIST_ENCRYPTED, false);
	dbinit.AddProperty(DBPROP_AUTH_PERSIST_SENSITIVE_AUTHINFO, false);
	dbinit.AddProperty(DBPROP_AUTH_USERID, "Admin");
	dbinit.AddProperty(DBPROP_INIT_DATASOURCE,
		"C:\\MSDASDK\\bin\\oledb\\Nwind.mdb");
	dbinit.AddProperty(DBPROP_INIT_MODE, (long)16);
	dbinit.AddProperty(DBPROP_INIT_PROMPT, (short)4);
	dbinit.AddProperty(DBPROP_INIT_PROVIDERSTRING,
		";COUNTRY=0;CP=1252;LANGID=0x0409");
	dbinit.AddProperty(DBPROP_INIT_LCID, (long)1033);
	// инициализация
	hr = db.OpenWithServiceComponents("Microsoft.Jet.OLEDB.3.51", &dbinit);
	if (FAILED(hr))
	{
		cout << "Error dc.Open" << endl;
		return;
	}
	// создаем сессию
	hr = session.Open(db);
	if (FAILED(hr))
	{
		cout << "Error session.Open" << endl;
		return;
	}
	// настройка свойств
	CDBPropSet	propset(DBPROPSET_ROWSET);
	propset.AddProperty(DBPROP_CANFETCHBACKWARDS, true);
	propset.AddProperty(DBPROP_IRowsetChange, true);
	propset.AddProperty(DBPROP_UPDATABILITY, DBPROPVAL_UP_CHANGE);
	// открываем
	dinamic.Open(session,"SELECT * FROM Categories",&propset); 
	// количество колонок
	cout << dinamic.GetColumnCount() << endl;
	// инфорация о колонках
	for (unsigned int x=0; x < dinamic.GetColumnCount();x++)
	{
		// получить имя
		LPOLESTR lp=NULL;
		lp=dinamic.GetColumnName(x);	// получим OLECHAR
		if (lp!=NULL)			// если не NULL
		{
			char chars[255];				 
			wcstombs((CHAR*)&chars,(OLECHAR*)lp,sizeof(chars));
			cout << chars << endl; 
		}
	}

}

В результате мы сможем просмотреть название полей.

24_1.gif (3259 b)


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