Sdílet prostřednictvím


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

Jméno 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

Jméno 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. AfxDbInitModuleCDynLinkLibrary 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_CALLproměnnou typu nRetCodeRETCODE.

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 SQLSetConnectOptionrozhraní 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_ASYNCjednoduš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 SQLSetConnectOptionrozhraní 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_SYNCje nutné deklarovat proměnnou nRetCodetypu 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 CDatabasenebo CRecordsetodvozených objektů.

HENV AFXAPI AfxGetHENV();

Vrácená 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

Viz také

Makra a globální objekty