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

Consulte también

Macros y globales