資料庫巨集和全域
以下所列的巨集和全域資料適用於採用 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
CDynLinkLibrary
在一般 MFC DLL 的內容中建立 物件,使其連線到CDynLinkLibrary
一般 MFC DLL 的物件鏈結中。
需求
Header:<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
來呼叫 SQLColumns
ODBC API 函式,此函式會傳回 由 命名 strTableName
之數據表中的數據行清單。 請注意 的 nRetCode
宣告,以及使用 recordset 數據成員將參數傳遞至 函式。 此範例也說明如何使用 來檢查 呼叫 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 參數。 在 MFC 4.2 之前的版本中,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
。
請注意,MFC 4.2 中已變更的實作 AFX_SQL_SYNC
。 因為不再需要檢查伺服器狀態, 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