データベース マクロとデータベース グローバル関数
以下に示すマクロとグローバルは、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 | を返す ODBC API 関数を呼び出します SQL_STILL_EXECUTING 。 AFX_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_CALL
、 nRetCode
RETCODE 型の変数を宣言する必要があります。
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_ASYNC
返 SQL_STILL_EXECUTING
される可能性のある ODBC API 関数を呼び出すために使用されていました。 ODBC API 関数が返SQL_STILL_EXECUTING
された場合は、AFX_SQL_ASYNC
prs->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
前に、 nRetCode
RETCODE 型の変数を宣言する必要があります。 マクロ呼び出し後の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
関連項目
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示