共用方式為


資料庫巨集和全域

以下所列的巨集和全域資料適用於採用 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_SYNCSQLFunc

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

另請參閱

宏和全域