データベース マクロとデータベース グローバル関数

以下に示すマクロとグローバルは、ODBC ベースのデータベース アプリケーションに適用されます。 DAO ベースのアプリケーションでは使用されません。

MFC 4.2 より前のマクロ AFX_SQL_ASYNCAFX_SQL_SYNC 非同期操作は、他のプロセスに時間を与える機会を与えました。 MFC 4.2 以降では、MFC ODBC クラスが同期操作のみを使用するため、これらのマクロの実装が変更されました。 このマクロ AFX_ODBC_CALL は MFC 4.2 を初めて使用しました。

データベース マクロ

名前 説明
AFX_ODBC_CALL を返す ODBC API 関数を呼び出します SQL_STILL_EXECUTINGAFX_ODBC_CALL は、関数が返されなくなるまで関数を繰り返し呼び出します SQL_STILL_EXECUTING
AFX_SQL_ASYNC AFX_ODBC_CALL.
AFX_SQL_SYNC 返されない ODBC API 関数を呼び出します SQL_STILL_EXECUTING

データベース グローバル

名前 説明
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 のオブジェクト チェーンにワイヤードされるように、通常の MFC DLL のコンテキストで CDynLinkLibrary オブジェクトを作成します。

必要条件

Header:<afxdll_.h>

AFX_ODBC_CALL

このマクロを使用して、返される可能性のある ODBC API 関数を呼び出します SQL_STILL_EXECUTING

AFX_ODBC_CALL(SQLFunc)

パラメーター

SQLFunc
ODBC API 関数。 ODBC API 関数の詳細については、Windows SDK を参照してください。

解説

AFX_ODBC_CALL 関数が返されなくなるまで関数を繰り返し呼び出します SQL_STILL_EXECUTING

呼び出す前に AFX_ODBC_CALLnRetCodeRETCODE 型の変数を宣言する必要があります。

MFC ODBC クラスでは同期処理のみが使用されるようになりました。 非同期操作を実行するには、ODBC API 関数 SQLSetConnectOptionを呼び出す必要があります。 詳細については、Windows SDK の「関数の非同期実行」を参照してください。

この例では AFX_ODBC_CALL 、ODBC API 関数を SQLColumns 呼び出します。この strTableName関数は、 関数にパラメーターを渡すレコードセット データ メンバーの宣言 nRetCode と使用に注意してください。 この例では、クラスCRecordsetのメンバー関数を使用して、呼び出しCheckの結果をチェックも示しています。 変数 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
オブジェクトまたはCDatabaseオブジェクトへのCRecordsetポインター。 MFC 4.2 以降では、このパラメーター値は無視されます。

SQLFunc
ODBC API 関数。 ODBC API 関数の詳細については、Windows SDK を参照してください。

解説

AFX_SQL_ASYNCマクロ AFX_ODBC_CALLを呼び出し、prs パラメーターを無視するだけです。 4.2 より前のバージョンの MFC では、 AFX_SQL_ASYNCSQL_STILL_EXECUTINGされる可能性のある ODBC API 関数を呼び出すために使用されていました。 ODBC API 関数が返SQL_STILL_EXECUTINGされた場合は、AFX_SQL_ASYNCprs->OnWaitForDataSource.

Note

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 を参照してください。

解説

このマクロを使用して、返されない ODBC API 関数を呼び出します SQL_STILL_EXECUTING

呼び出す AFX_SQL_SYNC前に、 nRetCodeRETCODE 型の変数を宣言する必要があります。 マクロ呼び出し後の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 環境へのハンドル。 SQL_HENV_NULL CDatabase オブジェクトがなく、使用中の CRecordset オブジェクトがない場合に使用できます。

必要条件

ヘッダー afxdb.h

関連項目

マクロとグローバル