Share via


キーセット カーソル

適用先: Access 2013、Office 2013

キーセット カーソルの変更検出機能は、静的カーソルと動的カーソルの中間です。 静的カーソルと同様、キーセット カーソルでは、結果セットのメンバーシップと順序に対する変更が常に検出されるわけではありません。 一方、結果セット内の行の値に対する変更は、動的カーソルと同様に検出されます。

キーセット ドリブン カーソルは、キーセットと呼ばれる一意の識別子 (キー) のセットによって制御されます。 キーは、結果セット内の行を一意に識別する列のセットで構成されます。 キーセットは、クエリ ステートメントによって返されたすべての行のキー値のセットです。

キーセット ドリブン カーソルを使用すると、行ごとにキーが作成されてカーソル内に保存され、クライアント ワークステーション、またはサーバー上に格納されます。 各行にアクセスすると、格納されたキーを使用してデータ ソースから現在のデータがフェッチされます。 キーセット ドリブン カーソルでは、キーセットがすべて読み込まれた時点で、結果セットのメンバーシップが凍結されます。 それ以降にメンバーシップに影響する追加や更新が行われても、結果セットを再度開かない限り、結果セットには反映されません。

キーセットの所有者または他のプロセスによってデータ値が変更されると、ユーザーが結果セット内をスクロールすると同時に、その変更が反映されます。 カーソルの外側で (他のプロセスによって) 行われた挿入は、カーソルが閉じられ、再度開かれたときに初めて反映されます。 カーソル内で行われた挿入は、結果セットの末尾に追加されます。

キーセット ドリブン カーソルが、削除された行を取得しようとすると、その行は結果セット内で "穴" として表されます。 その行のキーはキーセット内に存在しますが、行は結果セット内に存在しません。 行内のキー値が更新された場合、その行はいったん削除されてから挿入されたと見なされるため、これも結果セット内で穴として表されます。 キーセット ドリブン カーソルは、他のプロセスによって削除された行を必ず検出できますが、自身が削除した行のキーを削除するかどうかはオプションです。 キーセット ドリブン カーソルでこの処理を行う場合、行が存在した証拠が消失してしまうため、カーソルは自身が行った削除を検出できません。

キー列を更新すると、前のキーを削除してから新しいキーを挿入した場合と同様の処理が行われます。 更新がカーソルを通じて実行されない限り、新しいキーは反映されません。 更新がカーソルを通じて実行された場合、新しいキーは結果セットの末尾に追加されます。

キーセット ドリブン カーソルの一種として、キーセット ドリブン標準カーソルと呼ばれるものがあります。 キーセット ドリブン標準カーソルでは、結果セット内の行のメンバーシップ、および行の順序が、カーソルが開かれたときの状態で固定されますが、カーソルの所有者が値を変更した場合や、他のプロセスによって行われた変更がコミットされた場合は、その変更が反映されます。 変更によって、行がメンバーシップの条件に適合しなくなったり、行の順序が変化したりしても、カーソルが閉じられて再度開かれない限り、その行が削除または移動されることはありません。 挿入されたデータは反映されませんが、既存のデータに対する変更は、行のフェッチと同時に反映されます。

これまで述べてきたように、データの変更による影響は多くのさまざまな状況によって左右されるため、キーセット ドリブン カーソルを正しく使用するには注意が必要です。 しかし、アプリケーションにおいて同時更新による影響が少なく、誤ったキーをプログラム上で処理でき、キーで指定された特定の行に直接アクセスする必要がある場合は、キーセット ドリブン カーソルが最適です。 ADO でキーセット カーソルを使用することを示すには、 adOpenKeysetCursorTypeEnum を使用します。