Macro e funzioni globali di database
Le macro e le globalità elencate di seguito si applicano alle applicazioni di database basate su ODBC. Non vengono usate con applicazioni basate su DAO.
Prima di MFC 4.2, le macro AFX_SQL_ASYNC
e AFX_SQL_SYNC
offrirono alle operazioni asincrone l'opportunità di restituire tempo ad altri processi. A partire da MFC 4.2, l'implementazione di queste macro è cambiata perché le classi ODBC MFC utilizzavano solo operazioni sincrone. La macro AFX_ODBC_CALL
è stata una novità di MFC 4.2.
Macro di database
Nome | Descrizione |
---|---|
AFX_ODBC_CALL | Chiama una funzione API ODBC che restituisce SQL_STILL_EXECUTING . AFX_ODBC_CALL chiamerà ripetutamente la funzione fino a quando non restituisce SQL_STILL_EXECUTING più . |
AFX_SQL_ASYNC | Chiama AFX_ODBC_CALL . |
AFX_SQL_SYNC | Chiama una funzione API ODBC che non restituisce SQL_STILL_EXECUTING . |
Database Globals
Nome | Descrizione |
---|---|
AfxDbInitModule | Aggiunge il supporto del database per una normale DLL MFC collegata dinamicamente a MFC. |
AfxGetHENV | Recupera un handle per l'ambiente ODBC attualmente in uso da MFC. È possibile usare questo handle nelle chiamate ODBC dirette. |
AfxDbInitModule
Per il supporto del database MFC (o DAO) da una normale DLL MFC collegata dinamicamente a MFC, aggiungere una chiamata a questa funzione nella funzione della DLL MFC normale per inizializzare la DLL del CWinApp::InitInstance
database MFC.
Sintassi
void AFXAPI AfxDbInitModule( );
Osservazioni:
Assicurarsi che questa chiamata venga eseguita prima di qualsiasi chiamata di classe base o qualsiasi codice aggiunto che accede alla DLL del database MFC. La DLL del database MFC è una DLL di estensione MFC; affinché una DLL di estensione MFC venga cablata in una CDynLinkLibrary
catena, deve creare un CDynLinkLibrary
oggetto nel contesto di ogni modulo che lo usa. AfxDbInitModule
crea l'oggetto CDynLinkLibrary
nel contesto della DLL MFC regolare in modo che venga collegato alla CDynLinkLibrary
catena di oggetti della NORMALE DLL MFC.
Requisiti
Header:<afxdll_.h>
AFX_ODBC_CALL
Utilizzare questa macro per chiamare qualsiasi funzione API ODBC che può restituire SQL_STILL_EXECUTING
.
AFX_ODBC_CALL(SQLFunc)
Parametri
SQLFunc
Funzione API ODBC. Per altre informazioni sulle funzioni API ODBC, vedere Windows SDK.
Osservazioni:
AFX_ODBC_CALL
chiama ripetutamente la funzione fino a quando non restituisce SQL_STILL_EXECUTING
più .
Prima di richiamare AFX_ODBC_CALL
, è necessario dichiarare una variabile, nRetCode
, di tipo RETCODE.
Si noti che le classi ODBC MFC ora usano solo l'elaborazione sincrona. Per eseguire un'operazione asincrona, è necessario chiamare la funzione SQLSetConnectOption
API ODBC . Per altre informazioni, vedere l'argomento "Esecuzione asincrona di funzioni" in Windows SDK.
Esempio
Questo esempio usa AFX_ODBC_CALL
per chiamare la SQLColumns
funzione API ODBC, che restituisce un elenco delle colonne nella tabella denominata da strTableName
. Si noti la dichiarazione di e l'uso dei nRetCode
membri dati del recordset per passare i parametri alla funzione. Nell'esempio viene illustrato anche il controllo dei risultati della chiamata con Check
, una funzione membro della classe CRecordset
. La variabile è un puntatore prs
a un CRecordset
oggetto, dichiarato altrove.
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"));
}
Requisiti
Intestazione: afxdb.h
AFX_SQL_ASYNC
L'implementazione di questa macro è stata modificata in MFC 4.2.
AFX_SQL_ASYNC(prs, SQLFunc)
Parametri
Prs
Puntatore a un oggetto CRecordset
o a un oggetto CDatabase
. A partire da MFC 4.2 il valore di questo parametro viene ignorato.
SQLFunc
Funzione API ODBC. Per altre informazioni sulle funzioni API ODBC, vedere Windows SDK.
Osservazioni:
AFX_SQL_ASYNC
chiama semplicemente la macro AFX_ODBC_CALL e ignora il parametro prs . Nelle versioni di MFC precedenti alla 4.2, AFX_SQL_ASYNC
viene utilizzato per chiamare funzioni API ODBC che potrebbero restituire SQL_STILL_EXECUTING
. Se una funzione API ODBC restituisse SQL_STILL_EXECUTING
, AFX_SQL_ASYNC
chiamerebbe prs->OnWaitForDataSource
.
Nota
Le classi ODBC MFC utilizzano ora solo l'elaborazione sincrona. Per eseguire un'operazione asincrona, è necessario chiamare la funzione SQLSetConnectOption
API ODBC . Per altre informazioni, vedere l'argomento "Esecuzione asincrona di funzioni" in Windows SDK.
Requisiti
Intestazione afxdb.h
AFX_SQL_SYNC
La AFX_SQL_SYNC
macro chiama semplicemente la funzione SQLFunc
.
AFX_SQL_SYNC(SQLFunc)
Parametri
SQLFunc
Funzione API ODBC. Per altre informazioni su queste funzioni, vedere Windows SDK.
Osservazioni:
Utilizzare questa macro per chiamare le funzioni API ODBC che non restituiscono SQL_STILL_EXECUTING
.
Prima di chiamare AFX_SQL_SYNC
, è necessario dichiarare una variabile, nRetCode
, di tipo RETCODE. È possibile controllare il valore di nRetCode
dopo la chiamata di macro.
Si noti che l'implementazione di AFX_SQL_SYNC
è stata modificata in MFC 4.2. Poiché il controllo dello stato del server non è più necessario, AFX_SQL_SYNC
assegna semplicemente un valore a nRetCode
. Ad esempio, anziché effettuare la chiamata
AFX_SQL_SYNC(::SQLGetInfo(m_dbCust.m_hdbc, SQL_ODBC_SQL_CONFORMANCE,
&nValue, sizeof(nValue), &cbValue));
è sufficiente effettuare l'assegnazione
nRetCode = ::SQLGetInfo(m_dbCust.m_hdbc, SQL_ODBC_SQL_CONFORMANCE,
&nValue, sizeof(nValue), &cbValue);
Requisiti
Intestazione afxdb.h
AfxGetHENV
È possibile utilizzare l'handle restituito nelle chiamate ODBC dirette, ma non è necessario chiudere l'handle o presupporre che l'handle sia ancora valido e disponibile dopo l'eliminazione definitiva di qualsiasi oggetto derivato o CRecordset
esistenteCDatabase
.
HENV AFXAPI AfxGetHENV();
Valore restituito
Handle per l'ambiente ODBC attualmente in uso da MFC. Può essere SQL_HENV_NULL
se non sono presenti oggetti CDatabase e nessun oggetto CRecordset in uso.
Requisiti
Intestazione afxdb.h