Databasmakron och globaler

Anmärkning

Biblioteket För Microsoft Foundation-klasser (MFC) stöds fortfarande. Vi lägger dock inte längre till funktioner eller uppdaterar dokumentationen.

Makron och globalerna som anges nedan gäller för ODBC-baserade databasprogram. De används inte med DAO-baserade program.

Före MFC 4.2 gav makrona AFX_SQL_ASYNC och AFX_SQL_SYNC asynkrona åtgärder en möjlighet att ge tid till andra processer. Från och med MFC 4.2 ändrades implementeringen av dessa makron eftersom MFC ODBC-klasserna endast använde synkrona åtgärder. Makrot AFX_ODBC_CALL var nytt för MFC 4.2.

Databasmakron

Namn Description
AFX_ODBC_CALL Anropar en ODBC API-funktion som returnerar SQL_STILL_EXECUTING. AFX_ODBC_CALL anropar funktionen upprepade gånger tills den inte längre returnerar SQL_STILL_EXECUTING.
AFX_SQL_ASYNC Anropar AFX_ODBC_CALL.
AFX_SQL_SYNC Anropar en ODBC API-funktion som inte returnerar SQL_STILL_EXECUTING.

Databasglober

Namn Description
AfxDbInitModule Lägger till databasstöd för en vanlig MFC DLL som är dynamiskt länkad till MFC.
AfxGetHENV Hämtar ett handtag till ODBC-miljön som för närvarande används av MFC. Du kan använda den här handtaget i direkta ODBC-anrop.

AfxDbInitModule

För stöd för MFC-databas (eller DAO) från en vanlig MFC DLL som är dynamiskt länkad till MFC lägger du till ett anrop till den här funktionen i din vanliga MFC DLL-funktion för att initiera MFC-databasens CWinApp::InitInstance DLL.

Syntax

void AFXAPI AfxDbInitModule( );

Anmärkningar

Kontrollera att det här anropet inträffar före ett basklassanrop eller någon extra kod som kommer åt MFC-databasens DLL. MFC-databas-DLL:en är ett MFC-tilläggs-DLL; För att ett MFC-tilläggs-DLL ska kunna kopplas till en CDynLinkLibrary kedja måste det skapa ett CDynLinkLibrary objekt i kontexten för varje modul som ska använda den. AfxDbInitModule skapar objektet CDynLinkLibrary i din vanliga MFC DLL-kontext så att det kopplas in i objektkedjan för CDynLinkLibrary den vanliga MFC-DLL:en.

Kravspecifikation

Huvudet:<afxdll_.h>

AFX_ODBC_CALL

Använd det här makrot för att anropa alla ODBC API-funktioner som kan returnera SQL_STILL_EXECUTING.

AFX_ODBC_CALL(SQLFunc)

Parameterar

SQLFunc
En ODBC API-funktion. Mer information om ODBC API-funktioner finns i Windows SDK.

Anmärkningar

AFX_ODBC_CALL anropar upprepade gånger funktionen tills den inte längre returnerar SQL_STILL_EXECUTING.

Innan du anropar AFX_ODBC_CALLmåste du deklarera en variabel, nRetCode, av typen RETCODE.

Observera att MFC ODBC-klasserna nu endast använder synkron bearbetning. För att kunna utföra en asynkron åtgärd måste du anropa funktionen SQLSetConnectOptionODBC API . Mer information finns i avsnittet "Kör funktioner asynkront" i Windows SDK.

Example

I det här exemplet används AFX_ODBC_CALL för att anropa SQLColumns funktionen ODBC API, som returnerar en lista över kolumnerna i tabellen med namnet av strTableName. Observera deklarationen av nRetCode och användningen av postuppsättningsdatamedlemmar för att skicka parametrar till funktionen. Exemplet illustrerar också att kontrollera resultatet av anropet med Check, en medlemsfunktion för klassen CRecordset. Variabeln prs är en pekare till ett CRecordset objekt som deklareras någon annanstans.

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"));
}

Kravspecifikation

Rubrik: afxdb.h

AFX_SQL_ASYNC

Implementeringen av makrot ändrades i MFC 4.2.

AFX_SQL_ASYNC(prs, SQLFunc)

Parameterar

Prs
En pekare till ett CRecordset objekt eller ett CDatabase objekt. Från och med MFC 4.2 ignoreras det här parametervärdet.

SQLFunc
En ODBC API-funktion. Mer information om ODBC API-funktioner finns i Windows SDK.

Anmärkningar

AFX_SQL_ASYNC anropar bara makrot AFX_ODBC_CALL och ignorerar prs-parametern . I versioner av MFC före 4.2 AFX_SQL_ASYNC användes för att anropa ODBC API-funktioner som kan returnera SQL_STILL_EXECUTING. Om en ODBC API-funktion returnerade SQL_STILL_EXECUTINGanropar prs->OnWaitForDataSourceden AFX_SQL_ASYNC .

Anmärkning

MFC ODBC-klasserna använder nu endast synkron bearbetning. För att kunna utföra en asynkron åtgärd måste du anropa funktionen SQLSetConnectOptionODBC API . Mer information finns i avsnittet "Kör funktioner asynkront" i Windows SDK.

Kravspecifikation

Sidhuvud afxdb.h

AFX_SQL_SYNC

Makrot AFX_SQL_SYNC anropar helt enkelt funktionen SQLFunc.

AFX_SQL_SYNC(SQLFunc)

Parameterar

SQLFunc
En ODBC API-funktion. Mer information om dessa funktioner finns i Windows SDK.

Anmärkningar

Använd det här makrot för att anropa ODBC API-funktioner som inte returnerar SQL_STILL_EXECUTING.

Innan du anropar AFX_SQL_SYNCmåste du deklarera en variabel, nRetCode, av typen RETCODE. Du kan kontrollera värdet nRetCode för efter makroanropet.

Observera att implementeringen av AFX_SQL_SYNC ändrade i MFC 4.2. Eftersom det inte längre krävdes AFX_SQL_SYNC någon kontroll av serverstatusen tilldelar du bara ett värde till nRetCode. I stället för att till exempel göra anropet

AFX_SQL_SYNC(::SQLGetInfo(m_dbCust.m_hdbc, SQL_ODBC_SQL_CONFORMANCE,
   &nValue, sizeof(nValue), &cbValue));

du kan helt enkelt göra tilldelningen

nRetCode = ::SQLGetInfo(m_dbCust.m_hdbc, SQL_ODBC_SQL_CONFORMANCE,
   &nValue, sizeof(nValue), &cbValue);

Kravspecifikation

Sidhuvud afxdb.h

AfxGetHENV

Du kan använda det returnerade handtaget i direkta ODBC-anrop, men du får inte stänga handtaget eller anta att handtaget fortfarande är giltigt och tillgängligt efter att befintliga CDatabase- eller CRecordset-härledda objekt har förstörts.

HENV AFXAPI AfxGetHENV();

Returvärde

Handtaget till ODBC-miljön som för närvarande används av MFC. Kan vara SQL_HENV_NULL om det inte finns några CDatabase-objekt och inga CRecordset-objekt används.

Kravspecifikation

Sidhuvud afxdb.h

Se även

Makro och globala variabler