数据库宏和全局函数
下面所列的宏和全局适用于基于 ODBC 的数据库应用程序。 它们不适用于基于 DAO 的应用程序。
在 MFC 4.2 版之前,宏 AFX_SQL_ASYNC
和 AFX_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
和使用记录集数据成员会将参数传递给函数。 该示例还演示如何使用 Check
(CRecordset
类的成员函数)检查调用的结果。 变量 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 调用中使用返回的句柄,但不得关闭句柄,也不得假定在已销毁任何由 CDatabase
或 CRecordset
派生的现有对象后该句柄仍然有效且可用。
HENV AFXAPI AfxGetHENV();
返回值
MFC 当前正在使用的 ODBC 环境的句柄。 如果 CDatabase 对象和 CRecordset 都未在使用,则可以是 SQL_HENV_NULL
。
要求
标头:afxdb.h