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されません。

参照

非同期実行 (ポーリング メソッド)