Condividi tramite


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_EXECUTINGpiù .
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_EXECUTINGpiù .

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 SQLSetConnectOptionAPI 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 SQLSetConnectOptionAPI 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 CRecordsetesistenteCDatabase.

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

Vedi anche

Macro e globali