Macros y variables globales de base de datos
Las macros y variables globales que se enumeran a continuación se aplican a las aplicaciones de base de datos basadas en ODBC. No se utilizan con aplicaciones basadas en DAO.
Antes de MFC 4.2, las macros AFX_SQL_ASYNC
and AFX_SQL_SYNC
permitían que las operaciones asincrónicas pudieran ceder tiempo a otros procesos. A partir de MFC 4.2, la implementación de estas macros cambió porque las clases ODBC de MFC solo usaban operaciones sincrónicas. La macro AFX_ODBC_CALL
era nueva en MFC 4.2.
Macros de base de datos
Nombre | Descripción |
---|---|
AFX_ODBC_CALL | Llama a una función de la API de ODBC que devuelve SQL_STILL_EXECUTING . AFX_ODBC_CALL llamará repetidamente a la función hasta que deje de devolver SQL_STILL_EXECUTING . |
AFX_SQL_ASYNC | Llama a AFX_ODBC_CALL . |
AFX_SQL_SYNC | Llama a una función de la API de ODBC que no devuelve SQL_STILL_EXECUTING . |
Variables globales de base de datos
Nombre | Descripción |
---|---|
AfxDbInitModule | Agrega compatibilidad con la base de datos para un archivo DLL de MFC normal que está vinculado dinámicamente a MFC. |
AfxGetHENV | Recupera un identificador para el entorno ODBC que MFC usa actualmente. Puede usar este identificador en llamadas ODBC directas. |
AfxDbInitModule
Para la compatibilidad con la base de datos MFC (o DAO) desde un archivo DLL de MFC normal que está vinculado dinámicamente a MFC, agregue una llamada a esta función en la función CWinApp::InitInstance
del archivo DLL de MFC normal a fin de inicializar este archivo.
Sintaxis
void AFXAPI AfxDbInitModule( );
Comentarios
Asegúrese de que esta llamada se produzca antes que cualquier llamada de clase base o cualquier código agregado que acceda al archivo DLL de base de datos MFC. El archivo DLL de base de datos MFC es un archivo DLL de extensión MFC; para que un archivo DLL de extensión MFC se conecte a una cadena CDynLinkLibrary
, debe crear un objeto CDynLinkLibrary
en el contexto de cada módulo que lo utilizará. AfxDbInitModule
crea el objeto CDynLinkLibrary
en el contexto de la DLL de MFC normal para que se conecte a la cadena de objetos CDynLinkLibrary
de la DLL de MFC normal.
Requisitos
Encabezado:<afxdll_.h>
AFX_ODBC_CALL
Use esta macro para llamar a cualquier función de la API de ODBC que pueda devolver SQL_STILL_EXECUTING
.
AFX_ODBC_CALL(SQLFunc)
Parámetros
SQLFunc
Una función de la API de ODBC. Para más información sobre la funciones de la API de ODBC, consulte Windows SDK.
Comentarios
AFX_ODBC_CALL
llama repetidamente a la función hasta que deje de devolver SQL_STILL_EXECUTING
.
Antes de invocar a AFX_ODBC_CALL
, debe declarar una variable, nRetCode
, de tipo RETCODE.
Tenga en cuenta que las clases ODBC de MFC ahora solo usan el procesamiento sincrónico. Si desea realizar una operación asincrónica, debe llamar a la función SQLSetConnectOption
de la API de ODBC. Para más información, consulte el tema "Ejecución asincrónica de funciones" en Windows SDK.
Ejemplo
En este ejemplo, se usa AFX_ODBC_CALL
para llamar a la función SQLColumns
de la API de ODBC, que devuelve una lista de las columnas de la tabla nombrada por strTableName
. Tenga en cuenta la declaración de nRetCode
y el uso de miembros de datos del conjunto de registros para pasar parámetros a la función. En el ejemplo siguiente, también se ilustra cómo comprobar los resultados de la llamada con Check
, una función miembro de la clase CRecordset
. La variable prs
es un puntero a un objeto CRecordset
, declarado en otro lugar.
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"));
}
Requisitos
Encabezado: afxdb.h
AFX_SQL_ASYNC
La implementación de esta macro cambió en MFC 4.2.
AFX_SQL_ASYNC(prs, SQLFunc)
Parámetros
Prs
Puntero a un objeto CRecordset
o a un objeto CDatabase
. A partir de MFC 4.2, se omite este valor de parámetro.
SQLFunc
Una función de la API de ODBC. Para más información sobre la funciones de la API de ODBC, consulte Windows SDK.
Comentarios
AFX_SQL_ASYNC
simplemente llama a la macro AFX_ODBC_CALL y omite el parámetro prs. En las versiones de MFC anteriores a la versión 4.2, AFX_SQL_ASYNC
se usaba para llamar a funciones de la API de ODBC que podían devolver SQL_STILL_EXECUTING
. Si una función de la API de ODBC sí devolvía SQL_STILL_EXECUTING
, AFX_SQL_ASYNC
hubiera llamado a prs->OnWaitForDataSource
.
Nota:
Las clases ODBC de MFC ahora solo usan el procesamiento sincrónico. Si desea realizar una operación asincrónica, debe llamar a la función SQLSetConnectOption
de la API de ODBC. Para más información, consulte el tema "Ejecución asincrónica de funciones" en Windows SDK.
Requisitos
Encabezado: afxdb.h
AFX_SQL_SYNC
La macro AFX_SQL_SYNC
simplemente llama a la función SQLFunc
.
AFX_SQL_SYNC(SQLFunc)
Parámetros
SQLFunc
Una función de la API de ODBC. Para más información sobre estas funciones, consulte Windows SDK.
Comentarios
Use esta macro para llamar a funciones de la API de ODBC que no devolverán SQL_STILL_EXECUTING
.
Antes de llamar a AFX_SQL_SYNC
, debe declarar una variable, nRetCode
, de tipo RETCODE. Puede comprobar el valor de nRetCode
después de la llamada a la macro.
Tenga en cuenta que la implementación de AFX_SQL_SYNC
cambió en MFC 4.2. Como ya no se requería comprobar el estado del servidor, AFX_SQL_SYNC
simplemente asigna un valor a nRetCode
. Por ejemplo, en lugar de realizar la llamada,
AFX_SQL_SYNC(::SQLGetInfo(m_dbCust.m_hdbc, SQL_ODBC_SQL_CONFORMANCE,
&nValue, sizeof(nValue), &cbValue));
simplemente puede realizar la asignación.
nRetCode = ::SQLGetInfo(m_dbCust.m_hdbc, SQL_ODBC_SQL_CONFORMANCE,
&nValue, sizeof(nValue), &cbValue);
Requisitos
Encabezado: afxdb.h
AfxGetHENV
Puede usar el identificador devuelto en las llamadas ODBC directas, pero no debe cerrar el identificador ni suponer que el identificador sigue siendo válido y estando disponible después de que se hayan destruido cualquier objeto derivado de CDatabase
o de CRecordset
existente.
HENV AFXAPI AfxGetHENV();
Valor devuelto
Un identificador para el entorno ODBC que MFC usa actualmente. Puede ser SQL_HENV_NULL
si no hay ningún objeto CDatabase ni ningún objeto CRecordset en uso.
Requisitos
Encabezado: afxdb.h