ATL COM AppWizard і ATL об'єктМайстер можна використовувати для створення OLE DB шаблон-споживчі .
Щоб створити проект ATL OLE DB-споживчого
Ім'я проекту на вкладці проекти , а потім натисніть кнопку ОК. ATL COM AppWizard з'являється.
Далі, за допомогою майстра ATL об'єкта.
Використання майстра ATL об'єкта
Використання майстра об'єкт ATL встановити властивості для споживача.
Щоб установити споживчі властивості за допомогою майстра ATL об'єкт
Після вибору постачальника та інші параметри, натисніть кнопку Випробувань підключення для перевірки відборів виступила на попередній діалоговому вікні сторінок. Якщо у полі Результати » повідомляє PASSED
, натисніть кнопку Готово , щоб створити зв'язок даних. З'явиться діалогове вікно Вибір таблиці бази даних.
Майстер генератори методів доступу-клас і команда (або таблиці) класу, як показано у прикладі вихідний нижче. Команда класу містить код відкрити джерело даних і набір рядків, зазначені в майстрі. Клас методів доступу містить карту стовпця таблиці бази даних, ви вибрали.
// Product.H : Declaration of the CProduct class
#ifndef __PRODUCT_H_
#define __PRODUCT_H_
class CProductAccessor
{
public:
LONG m_ProductID; // Number automatically assigned to new product.
TCHAR m_ProductName[41]; // Number automatically assigned to new product.
LONG m_SupplierID; // Same entry as in Suppliers table.
LONG m_CategoryID; // Same entry as in Categories table.
TCHAR m_QuantityPerUnit[21]; // (e.g., 24-count case, 1-liter bottle).
DB_NUMERIC m_UnitPrice; // (e.g., 24-count case, 1-liter bottle).
SHORT m_UnitsInStock; // (e.g., 24-count case, 1-liter bottle).
SHORT m_UnitsOnOrder; // (e.g., 24-count case, 1-liter bottle).
SHORT m_ReorderLevel; // Minimum units to maintain in stock.
VARIANT_BOOL m_Discontinued; // Yes means item is no longer available.
BEGIN_COLUMN_MAP(CProductAccessor)
COLUMN_ENTRY(1, m_ProductID)
COLUMN_ENTRY(2, m_ProductName)
COLUMN_ENTRY(3, m_SupplierID)
COLUMN_ENTRY(4, m_CategoryID)
COLUMN_ENTRY(5, m_QuantityPerUnit)
COLUMN_ENTRY(6, m_UnitPrice)
COLUMN_ENTRY(7, m_UnitsInStock)
COLUMN_ENTRY(8, m_UnitsOnOrder)
COLUMN_ENTRY(9, m_ReorderLevel)
COLUMN_ENTRY_TYPE(10, DBTYPE_BOOL, m_Discontinued)
END_COLUMN_MAP()
DEFINE_COMMAND(CProductAccessor, _T(" \
SELECT \
ProductID, \
ProductName, \
SupplierID, \
CategoryID, \
QuantityPerUnit, \
UnitPrice, \
UnitsInStock, \
UnitsOnOrder, \
ReorderLevel, \
Discontinued \
FROM Products"))};
class CProduct : public CCommand<CAccessor<CProductAccessor> >
{
public:
HRESULT Open()
{
HRESULT hr;
hr = OpenDataSource();
if (FAILED(hr))
return hr;
return OpenRowset();
}
HRESULT OpenDataSource()
{
HRESULT hr;
CDataSource db;
CDBPropSet dbinit(DBPROPSET_DBINIT);
dbinit.AddProperty(DBPROP_INIT_DATASOURCE, OLESTR("OLE_DB_NWind_Jet"));
dbinit.AddProperty(DBPROP_INIT_PROMPT, (short)4);
dbinit.AddProperty(DBPROP_INIT_LCID, (long)1033);
hr = db.Open(_T("MSDASQL"), &dbinit);
if (FAILED(hr))
return hr;
return m_session.Open(db);
}
HRESULT OpenRowset()
{
// Set properties for open
CDBPropSet propset(DBPROPSET_ROWSET);
propset.AddProperty(DBPROP_IRowsetChange, true);
propset.AddProperty(DBPROP_UPDATABILITY, DBPROPVAL_UP_CHANGE);
return CCommand<CAccessor<CProductAccessor> >::Open(m_session, NULL, &propset);
}
CSession m_session;
};
#endif // __PRODUCT_H_