Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (日本語) » SQL Anywhere サーバ - プログラミング » SQL Anywhere データ・アクセス API » SQL Anywhere ODBC API » 結果セットの処理

 

ODBC カーソル特性の選択

文を実行して結果セットを操作する ODBC 関数は、カーソルを使用してタスクを実行します。アプリケーションは SQLExecute または SQLExecDirect 関数を実行するたびに、暗黙的にカーソルを開きます。

結果セットを前方にのみ移動し、更新はしないアプリケーションの場合、カーソルの動作は比較的単純です。ODBC アプリケーションは、デフォルトではこの動作を要求します。ODBC は読み込み専用で前方専用のカーソルを定義します。この場合、SQL Anywhere ではパフォーマンスが向上するように最適化されたカーソルが提供されます。

前方専用カーソルの簡単な例については、データの取り出しを参照してください。

多くのグラフィカル・ユーザ・インタフェース・アプリケーションのように、結果セット内で前後にスクロールする必要のあるアプリケーションの場合、カーソルの動作はもっと複雑です。アプリケーションが、他のアプリケーションによって更新されたローに戻るときの動作を考えてみます。ODBC は、アプリケーションに適した動作を組み込めるように、さまざまな「スクロール可能カーソル」を定義しています。SQL Anywhere には、ODBC のスクロール可能カーソル・タイプに適合するカーソルのフル・セットが用意されています。

必要な ODBC カーソル特性を設定するには、文の属性を定義する SQLSetStmtAttr 関数を呼び出します。SQLSetStmtAttr は、結果セットを作成する文の実行前に呼び出してください。

SQLSetStmtAttr を使用すると、多数のカーソル特性を設定できます。SQL Anywhere に用意されているカーソル・タイプを決定する特性は、次のとおりです。

  • SQL_ATTR_CURSOR_SCROLLABLE   スクロール可能カーソルの場合は SQL_SCROLLABLE、前方専用カーソルの場合は SQL_NONSCROLLABLE に設定します。SQL_NONSCROLLABLE がデフォルトです。

  • SQL_ATTR_CONCURRENCY   次のいずれかの値に設定します。

    • SQL_CONCUR_READ_ONLY   更新禁止になります。SQL_CONCUR_READ_ONLY がデフォルトです。

    • SQL_CONCUR_LOCK   ローを確実に更新できるロックの最下位レベルを使用します。

    • SQL_CONCUR_ROWVER   SQLBase ROWID または Sybase TIMESTAMP などのロー・バージョンを比較して、最適の同時制御を使用します。

    • SQL_CONCUR_VALUES   値を比較して、最適の同時制御を使用します。

詳細については、Microsoft の『ODBC Programmer's Reference』の「[external link] SQLSetStmtAttr」を参照してください。

次のフラグメントは、読み込み専用のスクロール可能カーソルを要求します。

SQLAllocHandle( SQL_HANDLE_STMT, dbc, &stmt );
SQLSetStmtAttr( stmt, SQL_ATTR_CURSOR_SCROLLABLE,
      SQL_SCROLLABLE, SQL_IS_UINTEGER );