キーセット カーソルは、静的カーソルと動的カーソルの間で変更を検出する機能を提供します。 静的カーソルと同様に、結果セットのメンバーシップと順序の変更が常に検出されるとは限りません。 動的カーソルと同様に、結果セット内の行の値に対する変更が検出されます。
キーセットドリブン カーソルは、キーセットと呼ばれる一意の識別子 (キー) のセットによって制御されます。 キーは、結果セット内の行を一意に識別する一連の列から作成されます。 キーセットは、クエリ ステートメントによって返されるすべての行のキー値のセットです。
キーセットドリブン カーソルを使用すると、カーソル内の各行に対してキーがビルドされて保存され、クライアント ワークステーションまたはサーバーに格納されます。 各行にアクセスすると、格納されているキーを使用して、データ ソースから現在のデータ値がフェッチされます。 キーセット駆動カーソルでは、キーセットが完全に構築されると、結果セットのメンバーが固定されます。 その後、メンバーシップに影響を与える追加または更新は、再度開くまで結果セットの一部ではありません。
ユーザーが結果セットをスクロールすると、(キーセット所有者または他のプロセスによって行われた) データ値への変更が表示されます。 (他のプロセスによって) カーソルの外側に行われた挿入は、カーソルが閉じて再度開かれた場合にのみ表示されます。 カーソル内から行われた挿入は、結果セットの末尾に表示されます。
キーセットドリブン カーソルが削除された行を取得しようとすると、その行は結果セットに "穴" として表示されます。 行のキーはキーセットに存在しますが、その行は結果セットに存在しなくなりました。 行のキー値が更新されると、行は削除されて挿入されたと見なされるため、このような行は結果セットの穴としても表示されます。 キーセット駆動カーソルは、他のプロセスによって削除された行を常に検出できますが、必要に応じて、自分自身が削除した行のキーを削除することができます。 これを行うキーセットドリブン カーソルは、証拠が取り除かれているため、自分自身の削除を検出できません。
キー列の更新は、古いキーを削除した後、新しいキーを挿入した場合と同様に動作します。 カーソルを介して更新が行われなかった場合、新しいキー値は表示されません。 カーソルを介して更新が行われた場合、新しいキー値は結果セットの末尾に表示されます。
キーセットドリブンの標準カーソルと呼ばれるキーセットドリブン カーソルにはバリエーションがあります。 キーセット駆動型の標準カーソルでは、結果セット内の行のメンバーシップと行の順序はカーソルのオープン時に固定されますが、カーソル所有者によって行われた値と他のプロセスによって行われたコミットされた変更に対する変更は表示されます。 変更がメンバーシップの行の資格を失うか、行の順序に影響を与える場合、カーソルを閉じて再度開かない限り、行は消えたり移動したりしません。 挿入されたデータは表示されませんが、行がフェッチされると、既存のデータに対する変更が表示されます。
キーセットドリブン カーソルは、データの変更に対する感度が、前述のようにさまざまな状況に依存するため、正しく使用するのが困難です。 ただし、アプリケーションが同時更新に関心を持っていなくても、プログラムによって不適切なキーを処理でき、特定のキー付き行に直接アクセスする必要がある場合は、keyset ドリブン カーソルが機能する可能性があります。 adOpenKeyset CursorTypeEnum を使用して、ADO でキーセット カーソルを使用することを示します。