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

以下に示すマクロとグローバルは、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 を初期化するために、通常の MFC DLL の CWinApp::InitInstance 関数でこの関数の呼び出しを追加します。

構文

void AFXAPI AfxDbInitModule( );

解説

この呼び出しは、基底クラスの呼び出しまたは MFC データベース DLL にアクセスする追加されたコードの前に発生することを確認します。 MFC データベース DLL は MFC 拡張 DLL です。MFC 拡張 DLL を CDynLinkLibrary チェーンにワイヤードするには、それを使用するすべてのモジュールのコンテキストで CDynLinkLibrary オブジェクトを作成する必要があります。 AfxDbInitModule では、通常の MFC DLL のコンテキストに CDynLinkLibrary オブジェクトが作成され、通常の MFC DLL の CDynLinkLibrary オブジェクト チェーンにワイヤードされます。

要件

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の宣言と、関数にパラメーターを渡すレコードセット データ メンバーの使用に注意してください。 この例では、クラス 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"));
}

要件

Header: 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_ASYNCprs->OnWaitForDataSourceを呼び出します。

Note

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

要件

Header 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);

要件

Header afxdb.h

AfxGetHENV

返されたハンドルは直接 ODBC 呼び出しで使用できますが、ハンドルを閉じたり、既存の CDatabaseまたは CRecordset派生オブジェクトが破棄された後もハンドルがまだ有効で使用可能であると想定したりすることはできません。

HENV AFXAPI AfxGetHENV();

戻り値

MFC で現在使用されている ODBC 環境へのハンドル。 CDatabase オブジェクトがなく、使用中の CRecordset オブジェクトがない場合にSQL_HENV_NULLできます。

要件

Header afxdb.h

関連項目

マクロとグローバル