CDatabase
Třída
Představuje připojení ke zdroji dat, prostřednictvím kterého můžete pracovat se zdrojem dat.
Syntaxe
class CDatabase : public CObject
Členové
Veřejné konstruktory
Název | Popis |
---|---|
CDatabase::CDatabase |
CDatabase Vytvoří objekt. Objekt je nutné inicializovat voláním OpenEx nebo Open . |
Veřejné metody
Název | Popis |
---|---|
CDatabase::BeginTrans |
Spustí "transakci" – řadu reverzibilních volání AddNew třídy , Edit , Delete a Update členské funkce třídy CRecordset – na připojeném zdroji dat. Zdroj dat musí podporovat transakce BeginTrans , aby se projevily. |
CDatabase::BindParameters |
Umožňuje vytvořit vazbu parametrů před voláním CDatabase::ExecuteSQL . |
CDatabase::Cancel |
Zruší asynchronní operaci nebo proces z druhého vlákna. |
CDatabase::CanTransact |
Vrátí nenulové, pokud zdroj dat podporuje transakce. |
CDatabase::CanUpdate |
Vrátí nenulovou hodnotu, pokud CDatabase je objekt aktualizovatelný (nikoli jen pro čtení). |
CDatabase::Close |
Zavře připojení ke zdroji dat. |
CDatabase::CommitTrans |
Dokončí transakci zahájenou BeginTrans . Příkazy v transakci, které mění zdroj dat, jsou prováděny. |
CDatabase::ExecuteSQL |
Spustí příkaz SQL. Nejsou vráceny žádné datové záznamy. |
CDatabase::GetBookmarkPersistence |
Identifikuje operace, kterými záložky zůstávají u objektů sady záznamů. |
CDatabase::GetConnect |
Vrátí připojovací řetězec ODBC sloužící k připojení objektu CDatabase ke zdroji dat. |
CDatabase::GetCursorCommitBehavior |
Identifikuje účinek potvrzení transakce na otevřený objekt sady záznamů. |
CDatabase::GetCursorRollbackBehavior |
Identifikuje účinek vrácení transakce na otevřený objekt sady záznamů. |
CDatabase::GetDatabaseName |
Vrátí název aktuálně používané databáze. |
CDatabase::IsOpen |
Vrátí nenulovou hodnotu, CDatabase pokud je objekt aktuálně připojen ke zdroji dat. |
CDatabase::OnSetOptions |
Volal rozhraní pro nastavení standardních možností připojení. Výchozí implementace nastaví hodnotu časového limitu dotazu. Tyto možnosti můžete předem vytvořit voláním SetQueryTimeout . |
CDatabase::Open |
Vytvoří připojení ke zdroji dat (prostřednictvím ovladače ODBC). |
CDatabase::OpenEx |
Vytvoří připojení ke zdroji dat (prostřednictvím ovladače ODBC). |
CDatabase::Rollback |
Vrátí změny provedené během aktuální transakce. Zdroj dat se vrátí do předchozího stavu, jak je definováno při BeginTrans volání, bez omezení. |
CDatabase::SetLoginTimeout |
Nastaví počet sekund, po kterých vyprší časový limit pokusu o připojení ke zdroji dat. |
CDatabase::SetQueryTimeout |
Nastaví počet sekund po vypršení časového limitu databázových operací dotazu. Ovlivňuje všechny následné sady Open záznamů , AddNew , Edit a Delete volání. |
Veřejné datové členy
Název | Popis |
---|---|
CDatabase::m_hdbc |
Otevřete popisovač připojení ODBC (Database Connectivity) ke zdroji dat. Zadejte HDBC. |
Poznámky
Zdroj dat je konkrétní instance dat hostovaná některým systémem pro správu databází (DBMS). Mezi příklady patří Microsoft SQL Server, Microsoft Access, Borland dBASE a xBASE. V aplikaci můžete mít najednou aktivní jeden nebo více CDatabase
objektů.
Poznámka:
Pokud pracujete s třídami DAO (Data Access Objects) místo tříd ODBC (Open Database Connectivity), použijte místo toho třídu CDaoDatabase
. Další informace naleznete v článku Přehled: Programování databáze.
Chcete-li použít CDatabase
, vytvoření objektu CDatabase
a volání jeho OpenEx
členské funkce. Tím se otevře připojení. Když pak vytvoříte CRecordset
objekty pro provoz na připojeném zdroji dat, předejte konstruktor sady záznamů ukazatel na objekt CDatabase
. Po dokončení používání připojení zavolejte členovou Close
funkci a odstraňte CDatabase
objekt. Close
zavře všechny sady záznamů, které jste předtím nezavřeli.
Další informace naleznete v CDatabase
článcích Zdroje dat (ODBC) a Přehled: Programování databáze.
Hierarchie dědičnosti
CDatabase
Požadavky
Záhlaví: afxdb.h
CDatabase::BeginTrans
Voláním této členské funkce zahájíte transakci s připojeným zdrojem dat.
BOOL BeginTrans();
Návratová hodnota
Nenulové, pokud bylo volání úspěšné a změny jsou potvrzeny pouze ručně; jinak 0.
Poznámky
Transakce se skládá z jednoho nebo více volání AddNew
, Edit
, Delete
a Update
členské funkce objektu CRecordset
. Před zahájením transakce CDatabase
musí být objekt již připojen ke zdroji dat voláním jeho OpenEx
nebo Open
členské funkce. Chcete-li ukončit transakci, volání CommitTrans
přijmout všechny změny ve zdroji dat (a provést je) nebo volání Rollback
přerušit celou transakci. Volání BeginTrans
po otevření všech sad záznamů zahrnutých v transakci a co nejblíže k skutečným operacím aktualizace.
Upozornění
V závislosti na ovladači ODBC může otevření sady záznamů před voláním BeginTrans
způsobit problémy při volání Rollback
. Měli byste zkontrolovat konkrétní ovladač, který používáte. Pokud například používáte ovladač Microsoft Accessu zahrnutý v sadě Microsoft ODBC Desktop Driver Pack 3.0, je nutné počítat s požadavkem databázového stroje Jet, že byste neměli začínat transakci u žádné databáze, která má otevřený kurzor. V databázových třídách MFC znamená otevřený kurzor otevřený CRecordset
objekt. Další informace naleznete v technické poznámce 68.
BeginTrans
může také uzamknout datové záznamy na serveru v závislosti na požadované souběžnosti a možnostech zdroje dat. Informace o uzamčení dat naleznete v článku Sada záznamů: Uzamčení záznamů (ODBC).
Uživatelem definované transakce jsou vysvětleny v článku Transakce (ODBC).
BeginTrans
určuje stav, do kterého lze posloupnost transakcí vrátit zpět (obráceně). Chcete-li vytvořit nový stav pro vrácení zpět, potvrďte všechny aktuální transakce a pak znovu zavolejte BeginTrans
.
Upozornění
Volání BeginTrans
znovu bez volání CommitTrans
nebo Rollback
je chyba.
Voláním CanTransact
členské funkce určíte, jestli ovladač podporuje transakce pro danou databázi. Měli byste také zavolat GetCursorCommitBehavior
a GetCursorRollbackBehavior
určit podporu zachování kurzoru.
Další informace o transakcích naleznete v článku Transakce (ODBC).
Příklad
Viz článek Transakce: Provádění transakce v sadě záznamů (ODBC).
CDatabase::BindParameters
Přepsat BindParameters
, když potřebujete vytvořit vazbu parametrů před voláním CDatabase::ExecuteSQL
.
virtual void BindParameters(HSTMT hstmt);
Parametry
hstmt
Popisovač příkazu ODBC, pro který chcete svázat parametry.
Poznámky
Tento přístup je užitečný, pokud nepotřebujete sadu výsledků uložené procedury.
V přepsání volejte SQLBindParameters
a související funkce ODBC pro vytvoření vazby parametrů. MFC volá přepsání před voláním .ExecuteSQL
Nemusíte volat SQLPrepare
; ExecuteSQL
volání SQLExecDirect
a zničí hstmt
, který se používá pouze jednou.
CDatabase::Cancel
Voláním této členské funkce požádejte, aby zdroj dat zrušil probíhající asynchronní operaci nebo proces z druhého vlákna.
void Cancel();
Poznámky
Všimněte si, že třídy MFC ODBC již nepoužívají asynchronní zpracování; k provedení asynchronní operace je nutné přímo volat funkci SQLSetConnectOption
rozhraní ODBC API . Další informace naleznete v tématu Asynchronní spuštění.
CDatabase::CanTransact
Voláním této členské funkce určíte, zda databáze umožňuje transakce.
BOOL CanTransact() const;
Návratová hodnota
Nenulové, pokud sady záznamů používající tento CDatabase
objekt umožňují transakce; jinak 0.
Poznámky
Informace o transakcích naleznete v článku Transakce (ODBC).
CDatabase::CanUpdate
Voláním této členské funkce určíte, zda CDatabase
objekt umožňuje aktualizace.
BOOL CanUpdate() const;
Návratová hodnota
Nenulové, pokud CDatabase
objekt umožňuje aktualizace; jinak 0 označuje, že jste se předali bReadOnly
TRUE
při otevření objektu CDatabase
nebo že samotný zdroj dat je jen pro čtení. Zdroj dat je jen pro čtení, pokud volání funkce SQLGetInfo
rozhraní ODBC API pro SQL_DATASOURCE_READ_ONLY
vrácení y
.
Poznámky
Ne všechny ovladače podporují aktualizace.
CDatabase::CDatabase
CDatabase
Vytvoří objekt.
CDatabase();
Poznámky
Po vytvoření objektu je nutné zavolat jeho OpenEx
nebo Open
členovou funkci k navázání připojení k zadanému zdroji dat.
Může být vhodné CDatabase
vložit objekt do třídy dokumentu.
Příklad
Tento příklad ukazuje použití CDatabase
v -odvozené CDocument
třídě.
// This fragment is taken from the declaration for CMyDatabaseDoc
// CMyDatabaseDoc is derived from CDocument.
public:
// Declare a CDatabase embedded in the document
CDatabase m_dbCust;
// Initialize when needed
CDatabase *CMyDatabaseDoc::GetDatabase()
{
// Connect the object to a data source
if (!m_dbCust.IsOpen() && !m_dbCust.OpenEx(NULL))
return NULL;
return &m_dbCust;
}
CDatabase::Close
Tuto členovou funkci zavolejte, pokud se chcete odpojit od zdroje dat.
virtual void Close();
Poznámky
Před voláním této členské funkce je nutné zavřít všechny sady záznamů přidružené k objektu CDatabase
. Protože Close
objekt nezničíte CDatabase
, můžete objekt znovu použít tak, že otevřete nové připojení ke stejnému zdroji dat nebo jinému zdroji dat.
Všechny čekající AddNew
nebo Edit
výpisy sad záznamů používající databázi se zruší a všechny čekající transakce se vrátí zpět. Všechny sady záznamů závislé na objektu CDatabase
zůstanou v nedefinovaném stavu.
Příklad
// Close the current connection
m_dbCust.Close();
// Perhaps connect the object to a
// different data source
m_dbCust.OpenEx(_T("DSN=MFC_ODBCTest;UID=JOES"));
CDatabase::CommitTrans
Volání této členské funkce při dokončení transakcí.
BOOL CommitTrans();
Návratová hodnota
Nenulové, pokud byly aktualizace úspěšně potvrzeny; jinak 0. Pokud CommitTrans
selže, stav zdroje dat není definován. Abyste zjistili jejich stav, musíte zkontrolovat data.
Poznámky
Transakce se skládá z řady volání AddNew
, , Edit
Delete
a Update
členské funkce CRecordset
objektu, který začal voláním BeginTrans
členské funkce. CommitTrans
potvrdí transakci. Ve výchozím nastavení jsou aktualizace potvrzeny okamžitě; volání BeginTrans
způsobí zpoždění závazku aktualizací, dokud CommitTrans
se nevolá.
Dokud nevoláte na ukončení transakce, můžete zavolat CommitTrans
Rollback
členovou funkci k přerušení transakce a ponechat zdroj dat v původním stavu. Chcete-li zahájit novou transakci, zavolejte BeginTrans
znovu.
Další informace o transakcích naleznete v článku Transakce (ODBC).
Příklad
Viz článek Transakce: Provádění transakce v sadě záznamů (ODBC).
CDatabase::ExecuteSQL
Tuto členovou funkci zavolejte, když potřebujete spustit příkaz SQL přímo.
void ExecuteSQL(LPCTSTR lpszSQL);
Parametry
lpszSQL
Ukazatel na řetězec ukončený hodnotou null obsahující platný příkaz SQL ke spuštění. Můžete předat CString
.
Poznámky
Vytvořte příkaz jako řetězec ukončený hodnotou null. ExecuteSQL
nevrací datové záznamy. Pokud chcete pracovat se záznamy, použijte místo toho objekt sady záznamů.
Většina příkazů pro zdroj dat se vydává prostřednictvím objektů sady záznamů, které podporují příkazy pro výběr dat, vkládání nových záznamů, odstraňování záznamů a úpravy záznamů. Nicméně, ne všechny funkce ODBC jsou přímo podporovány databázovými třídami, takže někdy budete muset provést přímé volání SQL s ExecuteSQL
.
Příklad
try
{
m_dbCust.ExecuteSQL(
_T("UPDATE Taxes ")
_T("SET Rate = '36' ")
_T("WHERE Name = 'Federal'"));
}
catch (CDBException *pe)
{
// The error code is in pe->m_nRetCode
pe->ReportError();
pe->Delete();
}
CDatabase::GetBookmarkPersistence
Voláním této členské funkce určíte trvalost záložek u objektu sady záznamů po určitých operacích.
DWORD GetBookmarkPersistence() const;
Návratová hodnota
Bitová maska, která identifikuje operace, kterými záložky zůstávají v objektu sady záznamů. Podrobnosti najdete v části Poznámky.
Poznámky
Pokud například zavoláte CRecordset::GetBookmark
a pak zavoláte CRecordset::Requery
, záložka získaná z GetBookmark
již nemusí být platná. Měli byste volat GetBookmarkPersistence
před voláním CRecordset::SetBookmark
.
Následující tabulka uvádí hodnoty bitové masky, které lze kombinovat pro návratovou GetBookmarkPersistence
hodnotu .
Hodnota bitové masky | Trvalost záložek |
---|---|
SQL_BP_CLOSE |
Záložky jsou platné po Requery operaci. |
SQL_BP_DELETE |
Záložka řádku je platná po Delete operaci na daném řádku. |
SQL_BP_DROP |
Záložky jsou platné po Close operaci. |
SQL_BP_SCROLL |
Záložky jsou platné po jakékoli Move operaci. To jednoduše identifikuje, zda jsou záložky podporovány v sadě záznamů, jak je vráceno CRecordset::CanBookmark . |
SQL_BP_TRANSACTION |
Záložky jsou platné po potvrzení nebo vrácení transakce zpět. |
SQL_BP_UPDATE |
Záložka řádku je platná po Update operaci na daném řádku. |
SQL_BP_OTHER_HSTMT |
Záložky přidružené k jednomu objektu sady záznamů jsou platné u druhé sady záznamů. |
Další informace o této návratové hodnotě naleznete v rozhraní ODBC API funkce SQLGetInfo
v sadě Windows SDK. Další informace o záložkách naleznete v článku Sada záznamů: Záložky a Absolutní pozice (ODBC).
CDatabase::GetConnect
Voláním této členské funkce načtěte připojovací řetězec použitou při volání OpenEx
objektu nebo Open
objektu připojeného CDatabase
ke zdroji dat.
const CString GetConnect() const;
Návratová hodnota
A const
CString
obsahující připojovací řetězec, pokud OpenEx
nebo Open
byl volán; jinak prázdný řetězec.
Poznámky
Popis CDatabase::Open
způsobu vytvoření připojovací řetězec
CDatabase::GetCursorCommitBehavior
Voláním této členské funkce určíte, jak CommitTrans
operace ovlivňuje kurzory u otevřených objektů sady záznamů.
int GetCursorCommitBehavior() const;
Návratová hodnota
Hodnota označující účinek transakcí na otevřené objekty sady záznamů. Podrobnosti najdete v části Poznámky.
Poznámky
Následující tabulka uvádí možné návratové hodnoty a GetCursorCommitBehavior
odpovídající účinek na otevřenou sadu záznamů.
Vrácená hodnota | Efekt na CRecordset objekty |
---|---|
SQL_CB_CLOSE |
Volání CRecordset::Requery bezprostředně za potvrzením transakce. |
SQL_CB_DELETE |
Volání CRecordset::Close bezprostředně za potvrzením transakce. |
SQL_CB_PRESERVE |
Pokračujte normálně s operacemi CRecordset . |
Další informace o této návratové hodnotě naleznete v rozhraní ODBC API funkce SQLGetInfo
v sadě Windows SDK. Další informace o transakcích naleznete v článku Transakce (ODBC).
CDatabase::GetCursorRollbackBehavior
Voláním této členské funkce určíte, jak Rollback
operace ovlivňuje kurzory u otevřených objektů sady záznamů.
int GetCursorRollbackBehavior() const;
Návratová hodnota
Hodnota označující účinek transakcí na otevřené objekty sady záznamů. Podrobnosti najdete v části Poznámky.
Poznámky
Následující tabulka uvádí možné návratové hodnoty a GetCursorRollbackBehavior
odpovídající účinek na otevřenou sadu záznamů.
Vrácená hodnota | Efekt na CRecordset objekty |
---|---|
SQL_CB_CLOSE |
Volání CRecordset::Requery okamžitě za vrácením transakce zpět. |
SQL_CB_DELETE |
Volání CRecordset::Close okamžitě za vrácením transakce zpět. |
SQL_CB_PRESERVE |
Pokračujte normálně s operacemi CRecordset . |
Další informace o této návratové hodnotě naleznete v rozhraní ODBC API funkce SQLGetInfo
v sadě Windows SDK. Další informace o transakcích naleznete v článku Transakce (ODBC).
CDatabase::GetDatabaseName
Voláním této členské funkce načtěte název aktuálně připojené databáze (za předpokladu, že zdroj dat definuje pojmenovaný objekt s názvem "databáze").
CString GetDatabaseName() const;
Návratová hodnota
A CString
obsahující název databáze v případě úspěchu, jinak prázdný CString
.
Poznámky
To není stejné jako název zdroje dat (DSN) zadaný v OpenEx
volání nebo Open
volání. Co GetDatabaseName
vrací, závisí na rozhraní ODBC. Obecně platí, že databáze je kolekce tabulek. Pokud má tato entita název, GetDatabaseName
vrátí ji.
Tento název můžete například zobrazit v nadpisu. Pokud při načítání názvu z rozhraní ODBC dojde k chybě, GetDatabaseName
vrátí prázdnou CString
hodnotu .
CDatabase::IsOpen
Voláním této členské funkce určíte, jestli CDatabase
je objekt aktuálně připojený ke zdroji dat.
BOOL IsOpen() const;
Návratová hodnota
Nenulové, pokud CDatabase
je objekt aktuálně připojen; jinak 0.
CDatabase::m_hdbc
Obsahuje veřejný popisovač připojení ke zdroji dat ODBC – popisovač připojení.
Poznámky
Za normálních okolností nebudete muset přistupovat k této členské proměnné přímo. Místo toho architektura při volání OpenEx
nebo Open
. Rozhraní uvolní popisovač při volání delete
operátoru objektu CDatabase
. Všimněte si, že členová Close
funkce nezvolí popisovač.
Za určitých okolností však možná budete muset použít popisovač přímo. Pokud například potřebujete volat funkce rozhraní ODBC API přímo než prostřednictvím třídy CDatabase
, možná budete potřebovat popisovač připojení, který se má předat jako parametr. Podívejte se na následující příklad kódu.
Příklad
// Using m_hdbc for a direct ODBC API call.
// m_dbCust is the CDatabase object; m_hdbc is
// its HDBC member variable
nRetCode = ::SQLGetInfo(m_dbCust.m_hdbc, SQL_ODBC_SQL_CONFORMANCE,
&nValue, sizeof(nValue), &cbValue);
CDatabase::OnSetOptions
Architektura volá tuto členská funkce při přímém spuštění příkazu SQL s ExecuteSQL
členské funkce.
virtual void OnSetOptions(HSTMT hstmt);
Parametry
hstmt
Popisovač příkazu ODBC, pro které jsou nastaveny možnosti.
Poznámky
CRecordset::OnSetOptions
také volá tuto členovu funkci.
OnSetOptions
nastaví hodnotu časového limitu přihlášení. Pokud existují předchozí volání SetQueryTimeout
funkce a člena, OnSetOptions
odráží aktuální hodnoty, jinak nastaví výchozí hodnoty.
Poznámka:
Před mfc 4.2 OnSetOptions
také nastavte režim zpracování buď na snychronous nebo asynchronní. Počínaje mfc 4.2 jsou všechny operace synchronní. Chcete-li provést asynchronní operaci, musíte provést přímé volání funkce SQLSetPos
rozhraní ODBC API .
Pokud chcete změnit hodnotu časového limitu, nemusíte ji přepsat OnSetOptions
. Místo toho pro přizpůsobení hodnoty časového limitu dotazu volání SetQueryTimeout
před vytvořením sady záznamů; OnSetOptions
použije novou hodnotu. Hodnoty nastavené pro následné operace u všech sad záznamů nebo přímých volání SQL.
Pokud chcete nastavit další možnosti, přepsat OnSetOptions
. Přepsání by mělo volat základní třídu OnSetOptions
buď před nebo po volání funkce SQLSetStmtOption
rozhraní ODBC API . Postupujte podle metody znázorněné ve výchozí implementaci OnSetOptions
rozhraní .
CDatabase::Open
Voláním této členské funkce inicializujete nově vytvořený CDatabase
objekt.
virtual BOOL Open(
LPCTSTR lpszDSN,
BOOL bExclusive = FALSE,
BOOL bReadOnly = FALSE,
LPCTSTR lpszConnect = _T("ODBC;"),
BOOL bUseCursorLib = TRUE);
Parametry
lpszDSN
Určuje název zdroje dat – název zaregistrovaný v rozhraní ODBC prostřednictvím programu správce ODBC. Je-li zadána hodnota DSN ( lpszConnect
ve tvaru "DSN=<data-source>"), nesmí být znovu zadána v lpszDSN
. V tomto případě lpszDSN
by měl být NULL
. Jinak můžete předat NULL
, pokud chcete uživateli prezentovat dialogové okno Zdroj dat, ve kterém uživatel může vybrat zdroj dat. Další informace najdete v tématu Poznámky.
bExclusive
Tato verze knihovny tříd není podporována. V současné době kontrolní výraz selže, pokud je TRUE
tento parametr . Zdroj dat se vždy otevře jako sdílený (ne exkluzivní).
bReadOnly
TRUE
pokud máte v úmyslu připojení jen pro čtení a zakázat aktualizace zdroje dat. Všechny závislé sady záznamů dědí tento atribut. Výchozí hodnota je FALSE
.
lpszConnect
Určuje připojovací řetězec. Připojovací řetězec zřetězí informace, například název zdroje dat, ID uživatele platné pro zdroj dat, ověřovací řetězec uživatele (heslo, pokud zdroj dat vyžaduje) a další informace. Celý připojovací řetězec musí mít předponu řetězec "ODBC;"
(velká nebo malá). Řetězec "ODBC;"
se používá k označení, že připojení je ke zdroji dat ODBC. To je kvůli zvýšení kompatibility, pokud budoucí verze knihovny tříd mohou podporovat zdroje dat jiného typu než ODBC.
bUseCursorLib
TRUE
Chcete-li načíst knihovnu DLL knihovny kurzorů ODBC. Knihovna kurzorů maskuje některé funkce základního ovladače ODBC, což účinně brání použití dynaset (pokud je ovladač podporuje). Jedinými podporovanými kurzory, pokud je načtena knihovna kurzorů, jsou statické snímky a kurzory pouze vpřed. Výchozí hodnota je TRUE
. Pokud plánujete vytvořit objekt sady záznamů přímo z CRecordset
něj bez odvození, neměli byste načíst knihovnu kurzorů.
Návratová hodnota
Nenulové, pokud je připojení úspěšně provedeno; jinak 0, pokud uživatel zvolí Zrušit při zobrazení dialogového okna s žádostí o další informace o připojení. Ve všech ostatních případech architektura vyvolá výjimku.
Poznámky
Než ho budete moct použít k vytvoření objektu sady záznamů, je nutné inicializovat databázový objekt.
Poznámka:
OpenEx
Volání členské funkce je upřednostňovaným způsobem připojení ke zdroji dat a inicializace databázového objektu.
Pokud parametry ve volání Open
neobsahují dostatek informací pro vytvoření připojení, ovladač ODBC otevře dialogové okno pro získání potřebných informací od uživatele. Při volání Open
, připojovací řetězec , lpszConnect
je uložen soukromě v CDatabase
objektu a je k dispozici voláním GetConnect
členské funkce.
Pokud chcete, můžete otevřít vlastní dialogové okno před voláním Open
získat informace od uživatele, například heslo, a pak tyto informace přidat do připojovací řetězec, do Open
kterého předáte . Nebo můžete chtít uložit připojovací řetězec, které předáte, abyste ho mohli znovu použít při příštím volání Open
aplikace na CDatabase
objekt.
Můžete také použít připojovací řetězec pro více úrovní autorizace přihlášení (každý pro jiný CDatabase
objekt) nebo k předávání dalších informací specifických pro zdroj dat. Další informace o připojovací řetězec naleznete v kapitole 5 v sadě Windows SDK.
Pokud je například hostitel DBMS nedostupný, může dojít k vypršení časového limitu připojení. Pokud pokus o připojení selže, Open
vyvolá CDBException
chybu .
Příklad
// m_dbCust is a CDatabase object embedded in a CDocument class
if (bDefault)
{
// Connect the object to a data source (no password)
// the ODBC connection dialog box will always remain hidden
m_dbCust.Open(_T("MFC_ODBCTest"), FALSE, FALSE, _T("ODBC;UID=JOES"));
}
else
{
// ...Or, query the user for all connection information
m_dbCust.Open(NULL);
}
CDatabase::OpenEx
Voláním této členské funkce inicializujete nově vytvořený CDatabase
objekt.
virtual BOOL OpenEx(
LPCTSTR lpszConnectString,
DWORD dwOptions = 0);
Parametry
lpszConnectString
Určuje připojovací řetězec ODBC. To zahrnuje název zdroje dat a také další volitelné informace, jako je ID uživatele a heslo. Je to například "DSN=SQLServer_Source;UID=SA;PWD=abc123"
možné připojovací řetězec. Všimněte si, že pokud předáte NULL
lpszConnectString
, dialogové okno Zdroj dat vyzve uživatele k výběru zdroje dat.
dwOptions
Bitová maska, která určuje kombinaci následujících hodnot. Výchozí hodnota je 0, což znamená, že databáze bude otevřena jako sdílená s přístupem k zápisu, knihovna DLL kurzoru ODBC nebude načtena a dialogové okno připojení ODBC se zobrazí pouze v případě, že není dostatek informací pro vytvoření připojení.
CDatabase::openExclusive
Tato verze knihovny tříd není podporována. Zdroj dat je vždy otevřen jako sdílený (ne exkluzivní). V současné době kontrolní výraz selže, pokud zadáte tuto možnost.CDatabase::openReadOnly
Otevřete zdroj dat jen pro čtení.CDatabase::useCursorLib
Načtěte knihovnu DLL knihovny kurzorů ODBC. Knihovna kurzorů maskuje některé funkce základního ovladače ODBC, což účinně brání použití dynaset (pokud je ovladač podporuje). Jedinými podporovanými kurzory, pokud je načtena knihovna kurzorů, jsou statické snímky a kurzory pouze vpřed. Pokud plánujete vytvořit objekt sady záznamů přímo zCRecordset
něj bez odvození, neměli byste načíst knihovnu kurzorů.CDatabase::noOdbcDialog
Nezobrazovat dialogové okno připojení ODBC bez ohledu na to, zda je zadán dostatek informací o připojení.CDatabase::forceOdbcDialog
Vždy zobrazte dialogové okno připojení ODBC.
Návratová hodnota
Nenulové, pokud je připojení úspěšně provedeno; jinak 0, pokud uživatel zvolí Zrušit při zobrazení dialogového okna s žádostí o další informace o připojení. Ve všech ostatních případech architektura vyvolá výjimku.
Poznámky
Než ho budete moct použít k vytvoření objektu sady záznamů, je nutné inicializovat databázový objekt.
lpszConnectString
Pokud parametr ve vašem OpenEx
volání neobsahuje dostatek informací pro vytvoření připojení, ovladač ODBC otevře dialogové okno pro získání potřebných informací od uživatele za předpokladu, že jste nenastavili CDatabase::noOdbcDialog
nebo CDatabase::forceOdbcDialog
v parametrudwOptions
. Při volání OpenEx
, připojovací řetězec , lpszConnectString
je uložen soukromě v CDatabase
objektu a je k dispozici voláním GetConnect
členské funkce.
Pokud chcete, můžete otevřít vlastní dialogové okno před voláním OpenEx
získat informace od uživatele, například heslo, a pak tyto informace přidat do připojovací řetězec, do OpenEx
kterého předáte . Nebo můžete chtít uložit připojovací řetězec, které předáte, abyste ho mohli znovu použít při příštím volání OpenEx
aplikace na CDatabase
objekt.
Můžete také použít připojovací řetězec pro více úrovní autorizace přihlášení (každý pro jiný CDatabase
objekt) nebo k předávání dalších informací specifických pro zdroj dat. Další informace o připojovací řetězec naleznete v kapitole 6 v referenční dokumentaci programátora ODBC.
Pokud je například hostitel DBMS nedostupný, může dojít k vypršení časového limitu připojení. Pokud pokus o připojení selže, OpenEx
vyvolá CDBException
chybu .
Příklad
// m_dbCust is a CDatabase object embedded in a CDocument class.
// Connect the object to a read-only data source where
// the ODBC connection dialog box will always remain hidden
m_dbCust.OpenEx(_T("DSN=MFC_ODBCTest;UID=JOES"),
CDatabase::openReadOnly | CDatabase::noOdbcDialog);
CDatabase::Rollback
Voláním této členské funkce zrušíte změny provedené během transakce.
BOOL Rollback();
Návratová hodnota
Nenulové, pokud transakce byla úspěšně obrácena; jinak 0. Rollback
Pokud volání selže, zdroj dat a stavy transakcí nejsou definovány. Pokud Rollback
vrátí hodnotu 0, je nutné zkontrolovat zdroj dat a určit jeho stav.
Poznámky
Všechna CRecordset
AddNew
volání a Delete
Edit
Update
volání se od posledního BeginTrans
volání vrátí zpět do stavu, který existoval v době volání.
Po volání Rollback
, transakce je překonaná a je nutné volat BeginTrans
znovu pro jinou transakci. Záznam, který byl aktuální předtím, než jste volali BeginTrans
, se stane aktuálním záznamem znovu za Rollback
.
Po vrácení zpět zůstane záznam, který byl aktuální před vrácením zpět. Podrobnosti o stavu sady záznamů a zdroje dat po vrácení zpět naleznete v článku Transakce (ODBC).
Příklad
Viz článek Transakce: Provádění transakce v sadě záznamů (ODBC).
CDatabase::SetLoginTimeout
Zavolejte tuto členovou funkci – před voláním OpenEx
nebo Open
– a přepište výchozí počet sekund povolených před vypršením časového limitu připojení zdroje dat.
void SetLoginTimeout(DWORD dwSeconds);
Parametry
dwSeconds
Počet sekund, které se mají povolit, než vyprší časový limit pokusu o připojení.
Poznámky
Pokud například DBMS není k dispozici, může dojít k vypršení časového limitu pokusu o připojení. Volání SetLoginTimeout
po vytvoření neinicializovaného CDatabase
objektu, ale před voláním OpenEx
nebo Open
.
Výchozí hodnota časových limitů přihlášení je 15 sekund. Ne všechny zdroje dat podporují možnost zadat hodnotu časového limitu přihlášení. Pokud zdroj dat nepodporuje časový limit, získáte výstup trasování, ale ne výjimku. Hodnota 0 znamená "nekonečné".
CDatabase::SetQueryTimeout
Voláním této členské funkce přepíšete výchozí počet sekund, který povolíte před vypršením časového limitu následných operací v připojeném zdroji dat.
void SetQueryTimeout(DWORD dwSeconds);
Parametry
dwSeconds
Počet sekund, které se mají povolit, než vyprší časový limit pokusu o dotaz.
Poznámky
Kvůli problémům se síťovým přístupem, nadměrnému zpracování dotazů atd. může dojít k vypršení časového limitu operace. Pokud SetQueryTimeout
chcete změnit hodnotu časového limitu dotazu, Update
zavolejte před otevřením sady záznamů nebo před voláním sady AddNew
záznamů nebo Delete
členských funkcí. Nastavení ovlivní všechny následující Open
, AddNew
, Update
a Delete
volání všech sad záznamů přidružených k tomuto CDatabase
objektu. Změna hodnoty časového limitu dotazu pro sadu záznamů po otevření nezmění hodnotu sady záznamů. Například následující Move
operace nepoužívají novou hodnotu.
Výchozí hodnota časových limitů dotazu je 15 sekund. Ne všechny zdroje dat podporují možnost nastavit hodnotu časového limitu dotazu. Pokud nastavíte hodnotu časového limitu dotazu 0, nedojde k žádnému vypršení časového limitu; komunikace se zdrojem dat může přestat reagovat. Toto chování může být užitečné při vývoji. Pokud zdroj dat nepodporuje časový limit, získáte výstup trasování, ale ne výjimku.