文を実行して結果セットを操作する 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』の「 SQLSetStmtAttr」を参照してください。
次のフラグメントは、読み込み専用のスクロール可能カーソルを要求します。
SQLAllocHandle( SQL_HANDLE_STMT, dbc, &stmt ); SQLSetStmtAttr( stmt, SQL_ATTR_CURSOR_SCROLLABLE, SQL_SCROLLABLE, SQL_IS_UINTEGER ); |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |