Metody generované v průvodci příjemcem
Průvodce příjemce knihovny ATL technologie OLE DB a Průvodce aplikace knihovny MFC generují určité funkce, kterým je třeba věnovat pozornost.Všimněte si, že některé metody jsou implementovány v atributových projektech, takže zde je několik upozornění; každý případ je popsán níže.Informace o zobrazení vloženého kódu naleznete v tématu Ladění vloženého kódu.
OpenAll otevře zdroj dat, sadu řádků a spustí záložky, pokud jsou k dispozici.
CloseAll zavře všechny otevřené sady řádků a uvolní všechny spuštěné příkazy.
OpenRowset je volaná OpenAll k otevření sady řádků příjemce nebo sady řádků.
GetRowsetProperties načte ukazatel na sadu vlastností sady řádků se kterou mohou být nastaveny vlastnosti.
OpenDataSource otevře zdroj dat za použití inicializačního řetězce, zadaného v dialogovém okně Vlastnosti Data Link.
CloseDataSource zavře vhodným způsobem zdroj dat.
OpenAll a CloseAll
HRESULT OpenAll();
void CloseAll();
Následující příklad ukazuje, jak můžete volat OpenAll a CloseAll když provádíte opakovaně stejné příkazy.Srovnání příkladu kódu v CCommand::Close, které zobrazí variace, volané Close a ReleaseCommand, místo CloseAll.
int main(int argc, char* argv[])
{
HRESULT hr;
hr = CoInitialize(NULL);
CCustOrdersDetail rs; // Your CCommand-derived class
rs.m_OrderID = 10248; // Open order 10248
hr = rs.OpenAll(); // (Open also executes the command)
hr = rs.MoveFirst(); // Move to the first row and print it
printf( "Name: %s, Unit Price: %d, Quantity: %d, Discount %d, Extended Price %d\n", rs.m_ProductName, rs.m_UnitPrice.int64, rs.m_Quantity, rs.m_Discount, rs.m_ExtendedPrice.int64 );
// Close the first command execution
rs.Close();
rs.m_OrderID = 10249; // Open order 10249 (a new order)
hr = rs.Open(); // (Open also executes the command)
hr = rs.MoveFirst(); // Move to the first row and print it
printf( "Name: %s, Unit Price: %d, Quantity: %d, Discount %d, Extended Price %d\n", rs.m_ProductName, rs.m_UnitPrice.int64, rs.m_Quantity, rs.m_Discount, rs.m_ExtendedPrice.int64 );
// Close the second command execution;
// Instead of rs.CloseAll() you could call
// rs.Close() and rs.ReleaseCommand():
rs.CloseAll();
CoUninitialize();
return 0;
}
Poznámky
Všimněte si, že pokud definujete metodu HasBookmark, kód OpenAll nastaví vlastnost DBPROP_IRowsetLocate; ujistěte se, že toto provádíte pouze pokud Váš zprostředkovatel podporuje tuto vlastnost.
OpenRowset
// OLE DB Template version:
HRESULT OpenRowset(DBPROPSET* pPropSet = NULL)
// Attribute-injected version:
HRESULT OpenRowset(const CSession& session, LPCWSTR szCommand = NULL);
OpenAll volá tuto metodu k otevření sady řádků nebo sady řádků v příjemci.Obvykle nemusíte volat OpenRowset, pokud chcete pracovat s více zdroji dat/relacemi/sady řádků. OpenRowset je deklarováno v souboru záhlaví třídy příkazu a tabulky:
// OLE DB Template version:
HRESULT OpenRowset(DBPROPSET *pPropSet = NULL)
{
HRESULT hr = Open(m_session, NULL, pPropSet);
#ifdef _DEBUG
if(FAILED(hr))
AtlTraceErrorRecords(hr);
#endif
return hr;
}
Atributy implementují tuto metodu odlišně.Tato verze přebírá objekt relace a řetězec příkazu, který nastavuje řetězec příkazu určený v db_command, ačkoli můžete předat jiný.Všimněte si, že pokud definujete metodu HasBookmark, kód OpenRowset nastaví vlastnost DBPROP_IRowsetLocate; ujistěte se, že toto provádíte pouze pokud Váš zprostředkovatel podporuje tuto vlastnost.
// Attribute-injected version:
HRESULT OpenRowset(const CSession& session, LPCWSTR szCommand=NULL)
{
DBPROPSET *pPropSet = NULL;
CDBPropSet propset(DBPROPSET_ROWSET);
__if_exists(HasBookmark)
{
propset.AddProperty(DBPROP_IRowsetLocate, true);
pPropSet= &propset;
}
...
}
GetRowsetProperties
void GetRowsetProperties(CDBPropSet* pPropSet);
Tato metoda načte ukazatel na sadu vlastností sady řádků; můžete použít tento ukazatel na sadu vlastností, jako například DBPROP_IRowsetChange.GetRowsetProperties je používán následovně ve třídě uživatelského záznamu. Můžete upravit tento kód, nastavením dalších vlastností sady řádků:
void GetRowsetProperties(CDBPropSet* pPropSet)
{
pPropSet->AddProperty(DBPROP_CANFETCHBACKWARDS, true, DBPROPOPTIONS_OPTIONAL);
pPropSet->AddProperty(DBPROP_CANSCROLLBACKWARDS, true, DBPROPOPTIONS_OPTIONAL);
pPropSet->AddProperty(DBPROP_IRowsetChange, true, DBPROPOPTIONS_OPTIONAL);
pPropSet->AddProperty(DBPROP_UPDATABILITY, DBPROPVAL_UP_CHANGE | DBPROPVAL_UP_INSERT | DBPROPVAL_UP_DELETE);
}
Poznámky
Neměli byste definovat globální metodu GetRowsetProperties, protože by mohla být v konfliktu s metodou, definovanou pomocí průvodce. Všimněte si, že to je metoda, generovaná průvodcem, kterou získáte s šablonovými a atributovými projekty; atributy nevkládají tento kód.
OpenDataSource a CloseDataSource
HRESULT OpenDataSource();
void CloseDataSource();
Poznámky
Průvodce definuje metody OpenDataSource a CloseDataSource; OpenDataSource, volané CDataSource::OpenFromInitializationString.