次の方法で共有


カーソルとは

適用先: Access 2013、Office 2013

リレーショナル データベースの操作は、完全な行セットに対して行われます。 SELECT ステートメントが返す行セットには、ステートメントの WHERE 句の条件を満たす行がすべて含まれます。 ステートメントから返されるこの完全な行セットは、結果セットと呼ばれます。 アプリケーション、特に対話型アプリケーションおよびオンライン アプリケーションでは、結果セット全体を 1 つの単位として効率的に処理できるとは限りません。 このようなアプリケーションには、一時点で 1 行または小さい行ブロックを処理する機構が必要です。 カーソルは、このような機構を提供する、結果セットの拡張機能です。

カーソルは、カーソル ライブラリによって実装されます。 カーソル ライブラリは、しばしばデータベース システムまたはデータ アクセス API の一部として実装されるソフトウェアで、データ ソース (結果セット) から返されるデータの属性を管理するために使用されます。 これらの属性には、同時実行管理、結果セット内の位置、返される行数、結果セット内を前方と後方のいずれかまたは両方に移動できるかどうか (スクロール機能) などがあります。

カーソルは、結果セット内の位置を記録するため、元のテーブルに結果を返すかどうかに関係なく、結果セットに対して 1 行ずつ複数の操作を実行できます。 つまり、カーソルは、概念的にはデータベース内のテーブルに基づいて結果セットを返します。 カーソルと呼ばれるのは、コンピューター画面上のカーソルが現在の位置を示すのと同じように、結果セット内の現在の位置を示すためです。

ADO でのカーソルの使用方法を習得する前に、カーソルの概念に精通しておく必要があります。

カーソルを使用すると、次の処理を実行できます。

  • 結果セット内の特定の行の位置を指定します。

  • 現在の結果セットの位置に基づいて 1 行または 1 つの行ブロックを取得します。

  • 結果セット内の現在の位置にある行のデータを変更します。

  • 他のユーザーによるデータ変更の検出レベルを定義できます。

たとえば、潜在的なお客様に購入可能な製品の一覧を表示するアプリケーションを考えてみます。 お客様は一覧をスクロールして、製品の詳細と価格を確認し、購入する製品を最後に選択します。 さらにスクロールして、一覧の他の製品を選択することもできます。 お客様にとっては、製品が 1 つずつ表示されていますが、アプリケーションではスクロール可能なカーソルを使用して、結果セット内を上下に移動することで製品を表示しています。

カーソルは、次のようなさまざまな方法で使用できます。

  • 行なしで使用

  • 1 つのテーブル内にある一部またはすべての行と共に使用

  • 論理的に結合された複数のテーブル内にある一部またはすべての行と共に使用

  • カーソル レベルまたはフィールド レベルの読み取り専用カーソルまたは更新可能カーソルとして使用

  • 前方のみカーソルまたは完全にスクロール可能なカーソルとして使用

  • サーバー上にあるカーソル キーセットと共に使用

  • 他のアプリケーションによる、基になるテーブルの変更 (メンバーシップ、並べ替え、挿入、更新、および削除) に合わせて使用

  • サーバー側またはクライアント側での使用

読み取り専用カーソルを使用すると、結果セットの参照に便利で、読み取り/書き込みカーソルを使用すると、個別の行の更新を実行できます。 ベース テーブルの行を指すキーセットを持つ、複雑なカーソルを定義することもできます。 前方に移動する読み取り専用カーソルもあれば、前方と後方の両方に移動し、他のアプリケーションによるデータベースの変更に基づいて結果セットを動的に更新できるカーソルもあります。

カーソルを使用しなくても、データのアクセスまたは更新が可能なアプリケーションもあります。 カーソルを使用して行を直接更新することが不要なクエリもあります。 データの取得にカーソルを使用するかどうかは、慎重に検討する必要があり、カーソルを使用する場合は、影響が最も少ないカーソルを選択する必要があります。 ストアド プロシージャを使用して結果セットを作成した場合、カーソルの編集メソッドまたは更新メソッドを使用してその結果セットを更新することはできません。

同時実行

マルチユーザー アプリケーションでは、エンド ユーザーにできる限り最新のデータを提供することが非常に重要な場合があります。 そのようなシステムの典型的な例は、航空券予約システムで、特定のフライトの同じ座席、つまり 1 つのレコードに対して多数のユーザーが競合する可能性があります。 このような場合、アプリケーションは、1 つのレコードに対する複数の同時操作を処理できるように設計する必要があります。

同時実行がそれほど重要ではないアプリケーションもあります。 そのような場合、データを常に最新の状態に保つために負荷をかける必要はありません。

Position

カーソルでは、結果セット内の現在位置の記録も行われます。 カーソルの位置は、配列内の特定の位置にある値を指す配列インデックスのような、現在のレコードへのポインターと考えてください。

スクロール機能

The type of cursor employed by your application also affects the ability to move forward and backward through the rows in a result set; this is sometimes called scrollability. 結果セット を前後に 移動する機能により、カーソルの複雑さが増し、実装にコストがかかります。 For this reason, you should ask for a cursor with this functionality only when necessary.