共用方式為


資料庫巨集和全域

以下所列的巨集和全域資料適用於採用 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 物件。 AfxDbInitModuleCDynLinkLibrary在一般 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 呼叫中使用傳回的句柄,但不得關閉句柄,或假設句柄在任何現有 CDatabaseCRecordset衍生物件終結之後仍然有效且可供使用。

HENV AFXAPI AfxGetHENV();

傳回值

MFC 目前使用的 ODBC 環境的句柄。 如果沒有任何 CDatabase 物件,而且沒有使用中的 CRecordset 物件,則可以是 SQL_HENV_NULL

需求

標頭 afxdb.h

另請參閱

宏和全域