数据库宏和全局函数

下面所列的宏和全局适用于基于 ODBC 的数据库应用程序。 它们不适用于基于 DAO 的应用程序。

在 MFC 4.2 版之前,宏 AFX_SQL_ASYNCAFX_SQL_SYNC 为异步操作提供了为其他进程让出时间的机会。 从 MFC 4.2 开始,这些宏的实现已改变,因为 MFC ODBC 类仅使用同步操作。 宏 AFX_ODBC_CALL 是 MFC 4.2 中新增的。

数据库宏

名称 描述
AFX_ODBC_CALL 调用返回 SQL_STILL_EXECUTING 的 ODBC API 函数。 AFX_ODBC_CALL 将反复调用该函数,直到不再返回 SQL_STILL_EXECUTING
AFX_SQL_ASYNC 调用 AFX_ODBC_CALL
AFX_SQL_SYNC 调用不返回 SQL_STILL_EXECUTING 的 ODBC API 函数。

数据库全局

名称 描述
AfxDbInitModule 为动态链接到 MFC 的常规 MFC DLL 添加数据库支持。
AfxGetHENV 检索 MFC 当前正在使用的 ODBC 环境的句柄。 您可以在直接 ODBC 调用中使用此句柄。

AfxDbInitModule

对于来自动态链接到 MFC 的常规 MFC DLL 的 MFC 数据库(或 DAO),请在常规 MFC DLL 的 CWinApp::InitInstance 函数中调用此函数来初始化 MFC 数据库 DLL。

语法

void AFXAPI AfxDbInitModule( );

备注

请确保在任何基类调用或任何访问 MFC 数据库 DLL 的已添加代码之前进行此调用。 MFC 数据库 DLL 是 MFC 扩展 DLL;为了使 MFC 扩展 DLL 连接到 CDynLinkLibrary 链,它必须在将使用它的每个模块的上下文中创建一个 CDynLinkLibrary 对象。 AfxDbInitModule 在常规 MFC DLL 上下文中创建 CDynLinkLibrary 对象,以便将其连接到常规 MFC DLL 的 CDynLinkLibrary 对象链中。

要求

标头:<afxdll_.h>

AFX_ODBC_CALL

使用此宏调用可能返回 SQL_STILL_EXECUTING 的任何 ODBC API 函数。

AFX_ODBC_CALL(SQLFunc)

参数

SQLFunc
ODBC API 函数。 有关 ODBC API 函数的详细信息,请参阅 Windows SDK。

注解

AFX_ODBC_CALL 会反复调用该函数,直到不再返回 SQL_STILL_EXECUTING

在调用 AFX_ODBC_CALL 之前,必须声明类型为 RETCODE 的变量 nRetCode

请注意,MFC ODBC 类现在只能使用同步处理。 若要执行异步操作,必须调用 ODBC API 函数 SQLSetConnectOption。 有关详细信息,请参阅 Windows SDK 中的“异步执行函数”主题。

示例

此示例使用 AFX_ODBC_CALL 来调用 ODBC API 函数 SQLColumns,该函数返回由 strTableName 命名的表中的列列表。 请注意,声明 nRetCode 和使用记录集数据成员会将参数传递给函数。 该示例还演示如何使用 CheckCRecordset 类的成员函数)检查调用的结果。 变量 prs 是指向在其他位置声明的 CRecordset 对象的指针。

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"));
}

要求

标头:afxdb.h

AFX_SQL_ASYNC

此宏的实现在 MFC 4.2 中发生更改。

AFX_SQL_ASYNC(prs, SQLFunc)

参数

prs
指向 CRecordset 对象或 CDatabase 对象的指针。 从 MFC 4.2 开始,将忽略此参数值。

SQLFunc
ODBC API 函数。 有关 ODBC API 函数的详细信息,请参阅 Windows SDK。

备注

AFX_SQL_ASYNC 只会调用宏 AFX_ODBC_CALL 并忽略 prs 参数。 在 4.2 之前的 MFC 版本中,AFX_SQL_ASYNC 用于调用可能返回 SQL_STILL_EXECUTING 的 ODBC API 函数。 如果 ODBC API 函数返回 SQL_STILL_EXECUTING,则 AFX_SQL_ASYNC 将调用 prs->OnWaitForDataSource

注意

MFC ODBC 类现在只能使用同步处理。 若要执行异步操作,必须调用 ODBC API 函数 SQLSetConnectOption。 有关详细信息,请参阅 Windows SDK 中的“异步执行函数”主题。

要求

标头:afxdb.h

AFX_SQL_SYNC

AFX_SQL_SYNC 宏只会调用 SQLFunc 函数。

AFX_SQL_SYNC(SQLFunc)

参数

SQLFunc
ODBC API 函数。 有关这些函数的详细信息,请参阅 Windows SDK。

注解

使用此宏可调用不会返回 SQL_STILL_EXECUTING 的 ODBC API 函数。

在调用 AFX_SQL_SYNC 之前,必须声明类型为 RETCODE 的变量 nRetCode。 可在宏调用后检查 nRetCode 的值。

请注意,AFX_SQL_SYNC 的实现在 MFC 4.2 中已更改。 由于不再需要检查服务器状态, AFX_SQL_SYNC 只需将值赋给 nRetCode。 例如,你只需进行分配,

AFX_SQL_SYNC(::SQLGetInfo(m_dbCust.m_hdbc, SQL_ODBC_SQL_CONFORMANCE,
   &nValue, sizeof(nValue), &cbValue));

无需进行调用

nRetCode = ::SQLGetInfo(m_dbCust.m_hdbc, SQL_ODBC_SQL_CONFORMANCE,
   &nValue, sizeof(nValue), &cbValue);

要求

标头:afxdb.h

AfxGetHENV

可在直接 ODBC 调用中使用返回的句柄,但不得关闭句柄,也不得假定在已销毁任何由 CDatabaseCRecordset 派生的现有对象后该句柄仍然有效且可用。

HENV AFXAPI AfxGetHENV();

返回值

MFC 当前正在使用的 ODBC 环境的句柄。 如果 CDatabase 对象和 CRecordset 都未在使用,则可以是 SQL_HENV_NULL

要求

标头:afxdb.h

另请参阅

宏和全局函数