データベース マクロとデータベース グローバル関数
以下に示すマクロとグローバルは、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_ASYNC
は prs->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