Databázová makra a globální prvky
Makra a globální objekty uvedené níže platí pro databázové aplikace založené na rozhraní ODBC. Nepoužívají se s aplikacemi založenými na dao.
Před MFC 4.2 makra AFX_SQL_ASYNC
a AFX_SQL_SYNC
poskytla asynchronním operacím příležitost získat čas jiným procesům. Od MFC 4.2 se implementace těchto maker změnila, protože třídy MFC ODBC používaly pouze synchronní operace. Makro AFX_ODBC_CALL
bylo v prostředí MFC 4.2 novinkou.
Databázová makra
Název | Popis |
---|---|
AFX_ODBC_CALL | Volá funkci rozhraní ODBC API, která vrací SQL_STILL_EXECUTING . AFX_ODBC_CALL bude opakovaně volat funkci, dokud se už nevrátí SQL_STILL_EXECUTING . |
AFX_SQL_ASYNC | Zavolá metodu AFX_ODBC_CALL . |
AFX_SQL_SYNC | Volá funkci rozhraní ODBC API, která nevrací SQL_STILL_EXECUTING . |
Globální databáze
Název | Popis |
---|---|
AfxDbInitModule | Přidá podporu databáze pro běžnou knihovnu MFC DLL, která je dynamicky propojená s knihovnou MFC. |
AfxGetHENV | Načte popisovač do prostředí ODBC, které aktuálně používá mfc. Tento popisovač můžete použít v přímých voláních ODBC. |
AfxDbInitModule
Pro podporu databáze MFC (nebo rozhraní DAO) z běžné knihovny MFC DLL, která je dynamicky propojena s mfc, přidejte volání této funkce do běžné funkce KNIHOVNY MFC DLL CWinApp::InitInstance
pro inicializaci knihovny MFC database DLL.
Syntaxe
void AFXAPI AfxDbInitModule( );
Poznámky
Ujistěte se, že k tomuto volání dochází před voláním základní třídy nebo jakýmkoli přidaným kódem, který přistupuje k knihovně DLL databáze MFC. Knihovna DLL databáze MFC je rozšiřující knihovna DLL knihovny MFC; Aby knihovna DLL rozšíření MFC dostala kabel do řetězu CDynLinkLibrary
, musí vytvořit CDynLinkLibrary
objekt v kontextu každého modulu, který ho bude používat. AfxDbInitModule
CDynLinkLibrary
vytvoří objekt v normálním kontextu knihovny MFC DLL tak, aby byl připojen k CDynLinkLibrary
řetězci objektů běžné knihovny MFC DLL.
Požadavky
Header:<afxdll_.h>
AFX_ODBC_CALL
Toto makro použijte k volání jakékoli funkce rozhraní ODBC API, která může vrátit SQL_STILL_EXECUTING
.
AFX_ODBC_CALL(SQLFunc)
Parametry
SQLFunc
Funkce rozhraní ODBC API. Další informace o funkcích rozhraní ODBC API naleznete v sadě Windows SDK.
Poznámky
AFX_ODBC_CALL
opakovaně volá funkci, dokud se už nevrátí SQL_STILL_EXECUTING
.
Před vyvoláním je nutné deklarovat AFX_ODBC_CALL
proměnnou typu nRetCode
RETCODE.
Všimněte si, že třídy MFC ODBC nyní používají pouze synchronní zpracování. Chcete-li provést asynchronní operaci, musíte volat funkci SQLSetConnectOption
rozhraní ODBC API . Další informace najdete v tématu Provádění funkcí asynchronně v sadě Windows SDK.
Příklad
Tento příklad používá AFX_ODBC_CALL
k volání SQLColumns
funkce rozhraní ODBC API, která vrací seznam sloupců v tabulce pojmenované podle strTableName
. Všimněte si deklarace datových nRetCode
členů sady záznamů a použití datových členů sady záznamů k předání parametrů do funkce. Příklad také ukazuje kontrolu výsledků volání pomocí Check
členské funkce třídy CRecordset
. Proměnná prs
je ukazatel na CRecordset
objekt deklarovaný jinde.
RETCODE nRetCode;
AFX_ODBC_CALL(::SQLColumns(prs->m_hstmt, (SQLTCHAR*)NULL, SQL_NTS, (SQLTCHAR*)NULL,
SQL_NTS, (SQLTCHAR*)strTableName.GetBuffer(), SQL_NTS, (SQLTCHAR*)NULL, SQL_NTS));
if (!prs->Check(nRetCode))
{
AfxThrowDBException(nRetCode, prs->m_pDatabase, prs->m_hstmt);
TRACE(_T("SQLColumns failed\n"));
}
Požadavky
Hlavička: afxdb.h
AFX_SQL_ASYNC
Implementace tohoto makra se změnila v prostředí MFC 4.2.
AFX_SQL_ASYNC(prs, SQLFunc)
Parametry
prs
Ukazatel na CRecordset
objekt nebo CDatabase
objekt. Počínaje mfc 4.2 se tato hodnota parametru ignoruje.
SQLFunc
Funkce rozhraní ODBC API. Další informace o funkcích rozhraní ODBC API naleznete v sadě Windows SDK.
Poznámky
AFX_SQL_ASYNC
jednoduše zavolá makro AFX_ODBC_CALL a ignoruje parametr prs. Ve verzích MFC starších než 4.2 bylo AFX_SQL_ASYNC
použito k volání funkcí rozhraní ODBC API, které by mohly vrátit SQL_STILL_EXECUTING
. Pokud se funkce rozhraní API ODBC vrátila SQL_STILL_EXECUTING
, pak AFX_SQL_ASYNC
by volala prs->OnWaitForDataSource
.
Poznámka:
Třídy MFC ODBC teď používají pouze synchronní zpracování. Chcete-li provést asynchronní operaci, musíte volat funkci SQLSetConnectOption
rozhraní ODBC API . Další informace najdete v tématu Provádění funkcí asynchronně v sadě Windows SDK.
Požadavky
Header afxdb.h
AFX_SQL_SYNC
Makro AFX_SQL_SYNC
jednoduše volá funkci SQLFunc
.
AFX_SQL_SYNC(SQLFunc)
Parametry
SQLFunc
Funkce rozhraní ODBC API. Další informace o těchto funkcích najdete v sadě Windows SDK.
Poznámky
Toto makro použijte k volání funkcí rozhraní API ROZHRANÍ ODBC, které nebudou vráceny SQL_STILL_EXECUTING
.
Před voláním AFX_SQL_SYNC
je nutné deklarovat proměnnou nRetCode
typu RETCODE. Můžete zkontrolovat hodnotu nRetCode
po volání makra.
Všimněte si, že implementace AFX_SQL_SYNC
změny v prostředí MFC 4.2. Vzhledem k tomu, že kontrola stavu serveru již nebyla požadována, AFX_SQL_SYNC
jednoduše přiřadí hodnotu nRetCode
. Například místo volání
AFX_SQL_SYNC(::SQLGetInfo(m_dbCust.m_hdbc, SQL_ODBC_SQL_CONFORMANCE,
&nValue, sizeof(nValue), &cbValue));
zadání můžete jednoduše provést.
nRetCode = ::SQLGetInfo(m_dbCust.m_hdbc, SQL_ODBC_SQL_CONFORMANCE,
&nValue, sizeof(nValue), &cbValue);
Požadavky
Header afxdb.h
AfxGetHENV
Vrácený popisovač můžete použít v přímých voláních ODBC, ale nesmíte zavřít popisovač nebo předpokládat, že popisovač je stále platný a dostupný po zničení všech existujících CDatabase
nebo CRecordset
odvozených objektů.
HENV AFXAPI AfxGetHENV();
Návratová hodnota
Popisovač prostředí ODBC, které aktuálně používá mfc. Může být SQL_HENV_NULL
, pokud neexistují žádné CDatabase objekty a žádné CRecordset objekty, které se používají.
Požadavky
Header afxdb.h