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_EXECUTING
werden 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_CALL
müssen Sie eine Variable nRetCode
vom 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 SQLSetConnectOption
aufrufen. 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 Check
einer 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_EXECUTING
werden können. Wenn eine ODBC-API-Funktion zurückgegeben SQL_STILL_EXECUTING
wurde, 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 SQLSetConnectOption
aufrufen. 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 SQLFunc
auf.
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_EXECUTING
werden.
Vor dem Aufrufen AFX_SQL_SYNC
müssen Sie eine Variable nRetCode
vom 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 CDatabase
oder CRecordset
abgeleitete 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