カーソル オプションを設定する方法 (ODBC)
カーソル オプションを設定するには、カーソルの動作を制御するステートメント オプションを、SQLSetStmtAttr を呼び出して設定するか、SQLGetStmtAttr を呼び出して取得します。
属性 |
指定対象 |
---|---|
SQL_ATTR_CURSOR_TYPE |
カーソルの種類。順方向専用、静的、動的、キーセット ドリブンのいずれか |
SQL_ATTR_CONCURRENCY |
同時実行制御オプション。読み取り専用、ロック、タイムスタンプを使用するオプティミスティック、値を使用するオプティミスティックのいずれか |
SQL_ATTR_ROW_ARRAY_SIZE |
フェッチごとに取得される行数 |
SQL_ATTR_CURSOR_SENSITIVITY |
他の接続によるカーソル行の更新を、カーソルで表示するかしないか |
SQL_ATTR_CURSOR_SCROLLABLE |
カーソルを前後にスクロール可能 |
これらの属性の既定値 (順方向専用、読み取り専用、行セット サイズ 1) では、サーバー カーソルを使用しません。サーバー カーソルを使用するには、少なくともこれらの属性のいずれかを既定値以外に設定する必要があります。また、実行するステートメントを、単一の SELECT ステートメントか、単一の SELECT ステートメントを含むストアド プロシージャにする必要があります。サーバー カーソルの使用時に、サーバー カーソルによってサポートされていない句 (COMPUTE、COMPUTE BY、FOR BROWSE、および INTO) を SELECT ステートメントで使用することはできません。
使用するカーソルの種類を制御するには、SQL_ATTR_CURSOR_TYPE と SQL_ATTR_CONCURRENCY を設定するか、SQL_ATTR_CURSOR_SENSITIVITY と SQL_ATTR_CURSOR_SCROLLABLE を設定します。カーソルの動作を指定するこの 2 つの方法を組み合わせて実行しないでください。
使用例
次のサンプルでは、ステートメント ハンドルを割り当て、行のバージョンに基づくオプティミスティック同時実行を使用する動的カーソルを種類として設定してから、SELECT を実行します。
retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc1, &hstmt1);
retcode = SQLSetStmtAttr(hstmt1, SQL_ATTR_CURSOR_TYPE, (SQLPOINTER)SQL_CURSOR_DYNAMIC, SQL_IS_INTEGER);
retcode = SQLSetStmtAttr(hstmt1, SQL_ATTR_CONCURRENCY, SQLPOINTER)SQL_CONCUR_ROWVER, SQL_IS_INTEGER);
retcode = SQLExecDirect(hstmt1, SELECT au_lname FROM authors", SQL_NTS);
次のサンプルでは、ステートメント ハンドルを割り当て、スクロール可能な状態依存カーソルを設定してから、SELECT を実行します。
retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc1, &hstmt1);
// Set the cursor options and execute the statement.
retcode = SQLSetStmtAttr(hstmt1, SQL_ATTR_CURSOR_SCROLLABLE, SQLPOINTER)SQL_SCROLLABLE, SQL_IS_INTEGER);
retcode = SQLSetStmtAttr(hstmt1, SQL_ATTR_CURSOR_SENSITIVITY, SQLPOINTER)SQL_INSENSITIVE, SQL_IS_INTEGER);
retcode = SQLExecDirect(hstmt1, select au_lname from authors", SQL_NTS);