Datenbankmakros und globale Variablen

Die unten aufgeführten Makros und Globalen gelten für ODBC-basierte Datenbankanwendungen. Sie werden nicht mit DAO-basierten Anwendungen verwendet.

Vor MFC 4.2 haben die Makros AFX_SQL_ASYNC und AFX_SQL_SYNC asynchrone Vorgänge die Möglichkeit gegeben, Zeit für andere Prozesse zu liefern. Ab MFC 4.2 wurde die Implementierung dieser Makros geändert, da die MFC ODBC-Klassen nur synchrone Vorgänge verwendet haben. Das Makro AFX_ODBC_CALL war neu bei MFC 4.2.

Datenbankmakros

Name Beschreibung
AFX_ODBC_CALL Ruft eine ODBC-API-Funktion auf, die zurückgegeben wird SQL_STILL_EXECUTING. AFX_ODBC_CALL ruft die Funktion wiederholt auf, bis sie nicht mehr zurückgegeben wird SQL_STILL_EXECUTING.
AFX_SQL_ASYNC Ruft AFX_ODBC_CALL.
AFX_SQL_SYNC Ruft eine ODBC-API-Funktion auf, die nicht zurückgegeben wird SQL_STILL_EXECUTING.

Datenbank-Globalen

Name Beschreibung
AfxDbInitModule Fügt Datenbankunterstützung für eine normale MFC-DLL hinzu, die dynamisch mit MFC verknüpft ist.
AfxGetHENV Ruft ein Handle für die ODBC-Umgebung ab, die derzeit von MFC verwendet wird. Sie können dieses Handle in direkten ODBC-Aufrufen verwenden.

AfxDbInitModule

Fügen Sie für die Unterstützung der MFC-Datenbank (oder DAO) von einer regulären MFC-DLL, die dynamisch mit MFC verknüpft ist, einen Aufruf dieser Funktion in der Funktion der regulären MFC-DLL CWinApp::InitInstance hinzu, um die MFC-Datenbank-DLL zu initialisieren.

Syntax

void AFXAPI AfxDbInitModule( );

Hinweise

Stellen Sie sicher, dass dieser Aufruf vor einem Basisklassenaufruf oder einem hinzugefügten Code auftritt, der auf die MFC-Datenbank-DLL zugreift. Die MFC-Datenbank-DLL ist eine MFC-Erweiterungs-DLL; Damit eine MFC-Erweiterungs-DLL in eine CDynLinkLibrary Kette verkabelt werden kann, muss sie ein CDynLinkLibrary Objekt im Kontext jedes Moduls erstellen, das es verwendet. AfxDbInitModule erstellt das CDynLinkLibrary Objekt im Kontext Ihrer regulären MFC-DLL, sodass es in die CDynLinkLibrary Objektkette der regulären MFC-DLL verkabelt wird.

Anforderungen

Header:<afxdll_.h>

AFX_ODBC_CALL

Verwenden Sie dieses Makro, um eine beliebige ODBC-API-Funktion aufzurufen, die zurückgegeben SQL_STILL_EXECUTINGwerden kann.

AFX_ODBC_CALL(SQLFunc)

Parameter

SQLFunc
Eine ODBC-API-Funktion. Weitere Informationen zu ODBC-API-Funktionen finden Sie im Windows SDK.

Hinweise

AFX_ODBC_CALL ruft die Funktion wiederholt auf, bis sie nicht mehr zurückgegeben wird SQL_STILL_EXECUTING.

Vor dem Aufrufen AFX_ODBC_CALLmüssen Sie eine Variable nRetCodevom Typ RETCODE deklarieren.

Beachten Sie, dass die MFC ODBC-Klassen jetzt nur synchrone Verarbeitung verwenden. Um einen asynchronen Vorgang auszuführen, müssen Sie die ODBC-API-Funktion SQLSetConnectOptionaufrufen. Weitere Informationen finden Sie im Thema "Asynchrones Ausführen von Funktionen" im Windows SDK.

Beispiel

In diesem Beispiel wird AFX_ODBC_CALL die SQLColumns ODBC-API-Funktion aufgerufen, die eine Liste der Spalten in der tabelle mit dem Namen zurückgibt strTableName. Beachten Sie die Deklaration und nRetCode die Verwendung von Recordset-Datenmbern, um Parameter an die Funktion zu übergeben. Das Beispiel veranschaulicht auch die Überprüfung der Ergebnisse des Aufrufs mit Checkeiner Memberfunktion der Klasse CRecordset. Die Variable prs ist ein Zeiger auf ein CRecordset Objekt, das an anderer Stelle deklariert wird.

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

Anforderungen

Header: afxdb.h

AFX_SQL_ASYNC

Die Implementierung dieses Makros wurde in MFC 4.2 geändert.

AFX_SQL_ASYNC(prs, SQLFunc)

Parameter

Prs
Ein Zeiger auf ein CRecordset Objekt oder ein CDatabase Objekt. Ab MFC 4.2 wird dieser Parameterwert ignoriert.

SQLFunc
Eine ODBC-API-Funktion. Weitere Informationen zu ODBC-API-Funktionen finden Sie im Windows SDK.

Hinweise

AFX_SQL_ASYNC ruft einfach das Makro AFX_ODBC_CALL auf und ignoriert den prs-Parameter . In MFC-Versionen vor 4.2 wurde verwendet, um ODBC-API-Funktionen aufzurufen, AFX_SQL_ASYNC die zurückgegeben SQL_STILL_EXECUTINGwerden können. Wenn eine ODBC-API-Funktion zurückgegeben SQL_STILL_EXECUTINGwurde, wird dies AFX_SQL_ASYNC aufgerufen prs->OnWaitForDataSource.

Hinweis

Die MFC ODBC-Klassen verwenden jetzt nur synchrone Verarbeitung. Um einen asynchronen Vorgang auszuführen, müssen Sie die ODBC-API-Funktion SQLSetConnectOptionaufrufen. Weitere Informationen finden Sie im Thema "Asynchrones Ausführen von Funktionen" im Windows SDK.

Anforderungen

Header afxdb.h

AFX_SQL_SYNC

Das AFX_SQL_SYNC Makro ruft einfach die Funktion SQLFuncauf.

AFX_SQL_SYNC(SQLFunc)

Parameter

SQLFunc
Eine ODBC-API-Funktion. Weitere Informationen zu diesen Funktionen finden Sie im Windows SDK.

Hinweise

Verwenden Sie dieses Makro, um ODBC-API-Funktionen aufzurufen, die nicht zurückgegeben SQL_STILL_EXECUTINGwerden.

Vor dem Aufrufen AFX_SQL_SYNCmüssen Sie eine Variable nRetCodevom Typ RETCODE deklarieren. Sie können den Wert nach nRetCode dem Makroaufruf überprüfen.

Beachten Sie, dass die Implementierung von AFX_SQL_SYNC geänderten Änderungen in MFC 4.2. Da die Überprüfung des Serverstatus nicht mehr erforderlich war, AFX_SQL_SYNC weist sie einfach einen Wert zu nRetCode. Statt z. B. den Anruf zu tätigen

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

Sie können die Aufgabe einfach vornehmen.

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

Anforderungen

Header afxdb.h

AfxGetHENV

Sie können das zurückgegebene Handle in direkten ODBC-Aufrufen verwenden, aber Sie dürfen das Handle nicht schließen oder davon ausgehen, dass das Handle noch gültig und verfügbar ist, nachdem vorhandene CDatabaseoder CRecordsetabgeleitete Objekte zerstört wurden.

HENV AFXAPI AfxGetHENV();

Rückgabewert

Das Handle für die ODBC-Umgebung, die derzeit von MFC verwendet wird. Kann seinSQL_HENV_NULL, wenn keine CDatabase-Objekte und keine CRecordset-Objekte verwendet werden.

Anforderungen

Header afxdb.h

Siehe auch

Makros und Globalen