SQLCompleteAsync 関数
準拠
導入されたバージョン: ODBC 3.8 標準コンプライアンス: なし
まとめ
SQLCompleteAsync を使用すると、通知ベースまたはポーリング ベースの処理を使用して、非同期関数が完了したタイミングを判断できます。 非同期操作の詳細については、「 非同期実行」を参照してください。
SQLCompleteAsync は ODBC ドライバー マネージャーでのみ実装されます。
通知ベースの非同期処理モードでは、ドライバー マネージャーが通知に使用されるイベント オブジェクトを生成した後に SQLCompleteAsync を呼び出す必要があります。 SQLCompleteAsync は非同期処理を完了し、非同期関数は戻りコードを生成します。
ポーリング ベースの非同期処理モードでは、元の非同期関数呼び出しで引数を指定しなくても、元の非同期関数を呼び出す代わりに SQLCompleteAsync が使用されます。 SQLCompleteAsync は、ODBC カーソル ライブラリが有効になっているかどうかに関係なく使用できます。
構文
SQLRETURN SQLCompleteAsync(
SQLSMALLINT HandleType,
SQLHANDLE Handle,
RETCODE * AsyncRetCodePtr);
引数
HandleType
[入力]非同期処理を完了するハンドルの型。 有効な値は、SQL_HANDLE_DBCまたはSQL_HANDLE_STMTです。
Handle
[入力]非同期処理を完了するハンドル。 Handle が HandleType で指定された型の有効なハンドルでない場合、SQLCompleteAsync はSQL_INVALID_HANDLEを返します。
Handle が HandleType で指定された型の有効なハンドルでない場合、SQLCompleteAsync はSQL_INVALID_HANDLEを返します。
AsyncRetCodePtr
[出力]非同期 API のリターン コードを格納するバッファーへのポインター。 AsyncRetCodePtr が NULL の場合、SQLCompleteAsync はSQL_ERRORを返します。
戻り値
SQL_SUCCESS、SQL_ERROR、SQL_NO_DATA、またはSQL_INVALID_HANDLE。
診断
SQLCompleteAsync がSQL_SUCCESSを返す場合、アプリケーションは AsyncRetCodePtr が指すバッファーから非同期関数のリターン コードを取得する必要があります。 関連付けられた SQLSTATE がある場合は、HandleType が SQL_HANDLE_STMT でステートメント ハンドルまたは HandleType がSQL_HANDLE_DBCと接続ハンドルを使用して SQLGetDiagRec を呼び出すことによって取得できます。 これらの診断レコードは、この SQLCompleteAsync 関数ではなく非同期関数に関連付けられます。
SQLCompleteAsync は、 SQLCompleteAsync が正しく呼び出されていないことを示すために、SQL_SUCCESS以外のコードを返します。 この場合、SQLCompleteAsync は診断レコードをポストしません。 考えられるリターン コードは次のとおりです。
SQL_INVALID_HANDLE: HandleType および Handle で示される ハンドル が有効なハンドルではありません。
SQL_ERROR: AsyncRetCodePtr が NULL であるか、非同期処理がハンドルで有効になっていません。
SQL_NO_DATA: 通知モードでは、非同期操作が進行中ではないか、ドライバー マネージャーがアプリケーションに通知していません。 ポーリング モードでは、非同期操作は進行中ではありません。
説明
ポーリング ベースの非同期処理モードでは、SQLCompleteAsync がSQL_SUCCESSを返すときに AsyncRetCodePtr がSQL_STILL_EXECUTINGされる場合があります。 AsyncRetCodePtr がSQL_STILL_EXECUTINGされないまで、アプリケーションはポーリングを続ける必要があります。 通知ベースの非同期処理モードでは、 AsyncRetCodePtr はSQL_STILL_EXECUTINGされません。