Шаг 20 - Что сделал AppWizard

В прошлом шаге мы посмотрели как используя AppWizard создавать приложение с OLEDB. Давайте посмотрим, что этот Wizard нам наделал. Первое что Вы увидите это некоторое количество новый классов.

20_1.gif (2651 b)

Смотрим класс CCategories. Этот класс аналогия созданной нами таблицы. Посмотрите последнее окно в прошлом шаге.

class CCategories
{
public:
	CCategories()
	{
		memset( (void*)this, 0, sizeof(*this) );
	};

	int m_CategoryID;
	char m_CategoryName[16];
	char m_Description[1025];		
	ISequentialStream* m_Picture;


BEGIN_COLUMN_MAP(CCategories)
	COLUMN_ENTRY_TYPE(1, DBTYPE_I4, m_CategoryID)
	COLUMN_ENTRY_TYPE(2, DBTYPE_STR, m_CategoryName)
	COLUMN_ENTRY_TYPE(3, DBTYPE_STR, m_Description)
	BLOB_ENTRY(4, IID_ISequentialStream, STGM_READ, m_Picture)
END_COLUMN_MAP()

};

Как видите этот класс, описывает все поля, которые присутствовали в таблице. AppWizard сам нашел им аналоги в C++ и создал переменные члены классов. Второй созданный класс CTestTemplateSet.

class CTestTemplateSet : public CCommand<CAccessor<CCategories> >
{
	......
}

Посмотрите он является наследником класс CCommand который включает наш класс CCategories. Все здесь проще так как структуры данных известна на этапе проектирования. Так же Wizard перегрузил функцию Open.

HRESULT Open()
{
	CDataSource db;
	CSession	session;
	HRESULT		hr;

	CDBPropSet	dbinit(DBPROPSET_DBINIT);
	dbinit.AddProperty(DBPROP_AUTH_CACHE_AUTHINFO, true);
	......
}

Помните по предыдущим шагам чего нам это стоило? В начале заполняются свойства, которые были установлены в диалоговом режиме при проектировании. Вы сможете их увидеть на рисунке в прошлом шаге.

......
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);

На основе нее открывается сессия.

hr = session.Open(db);

Дальше устанавливаются свойства сессии.

CDBPropSet propset(DBPROPSET_ROWSET);
propset.AddProperty(DBPROP_CANFETCHBACKWARDS, true);
propset.AddProperty(DBPROP_IRowsetScroll, true);
propset.AddProperty(DBPROP_IRowsetChange, true);
propset.AddProperty(DBPROP_UPDATABILITY, DBPROPVAL_UP_CHANGE |
	DBPROPVAL_UP_INSERT | DBPROPVAL_UP_DELETE );

И выполняется команда по выбору данных.

hr = CCommand<CAccessor<CCategories> >::Open(session,
	"SELECT * FROM Categories", &propset);

Все это нам знакомо по прошлым шагам, только проще реализуется. Кстати как Вы видите после генерации этого кода у Вас есть возможность, что то подправить. Например, изменить запрос SQL.


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 20.07.2001