13.8.2 ODBC関数の非同期実行の手順
ODBC関数を非同期に実行する場合の手順を次に示します。
<手順>
-
特定のhstmt(ステートメントハンドル)だけで非同期実行を有効にするオプションSQL_ASYNC_ENABLEを使用して,SQLSetStmtOption※1を呼び出します。hdbc(接続ハンドル)について,関連するすべてのhstmtで非同期実行を有効にする場合は,オプションSQL_ASYNC_ENABLEを使用してSQLSetConnectOption※2を呼び出します。
-
非同期実行が有効となっているhstmtを使用して非同期実行できるODBC関数※1を呼び出すと,ODBCドライバはその関数の非同期実行を開始し,SQL_STILL_EXECUTINGを返します(非同期実行とならなかった場合,又はエラーが発生した場合は,SQL_SUCCESSやSQL_ERRORなどの同期実行時のコードを返します)。
-
ODBC関数が非同期実行されている間に,アプリケーションプログラムはほかの処理を実行できます。非同期実行しているhstmtと,それに関連するhdbcでアプリケーションプログラムが呼び出せる関数は,SQLAllocStmt,SQLCancel,又はSQLGetFunctionsだけです。そのほかの関数(非同期実行中の関数を除く)を呼び出すと,ドライバマネージャからシーケンスエラーが返されます。
-
アプリケーションプログラムは非同期実行のODBC関数を呼び出して,その関数の実行が終了したかどうかを確認します。関数が引き続き実行状態の場合はSQL_STILL_EXECUTINGが返され,処理が終了している場合はSQL_SUCCESSやSQL_ERRORなどのリターンコードが返されます。
確認のために関数を呼び出す場合,hstmt以外の引数は指定しても無視されます(ただし,不当なアドレス,指定値はエラーとなる可能性があるため,有効な値でなければなりません)。例えば,INSERT文でSQLExecDirectを非同期実行し,再度SQLExecDirectを呼び出す場合に,UPDATE文を指定していても戻り値はINSERT文実行の状態が返ります。
- 注
-
特定のhstmtだけで非同期実行を無効にする場合も,オプションSQL_ASYNC_ENABLEを使用してSQLSetStmtOptionを呼び出します。hdbcについて,関連するすべてのhstmtで非同期実行を無効にする場合は,オプションSQL_ASYNC_ENABLEを使用してSQLSetConnectOptionを呼び出します。
- 注※1
-
SQLSetStmtOptionでの設定内容を次に示します。
fOption
設定内容
SQL_ASYNC_ENABLE
SQL_ASYNC_ENABLE_OFF,又はSQL_ASYNC_ENABLE _ON
SQL_BIND_TYPE
設定できません。
SQL_MAX_LENGTH
サーバの制限値,又はユーザの指定値
SQL_NOSCAN (Default=FALSE)
SQL_NOSCAN_OFF,又はSQL_NOSCAN_ON
SQL_QUERY_TIMEOUT
設定できません。
SQL_MAX_ROWS
サーバの制限値,又はユーザの指定値
- 注※2
-
SQLSetConnectOptionでの設定内容を次に示します。
fOption
設定内容
SQL_ACCESS_MODE
SQL_MODE_READ_WRITE固定
SQL_AUTOCOMMIT
SQL_AUTOCOMMIT_OFF,又は SQL_AUTOCOMMIT_ON
SQL_LOGIN_TIMEOUT
設定できません。
SQL_OPT_TRACE
0(Off)固定。
ODBCドライバマネージャから返されるオプションです。
SQL_OPT_TRACEFILE
NULL固定。
ODBCドライバマネージャから返されるオプションです。
SQL_TRANSLATE_DLL
設定できません。
SQL_TRANSLATE_OPTION
設定できません。
SQL_TXN_ISOLATION
SQL_TXN_READ_UNCOMMITED
SQL_ASYNC_ENABLE
SQL_ASYNC_ENABLE_OFF,又はSQL_ASYNC_ENABLE _ON