鍵集合游標
鍵集合游標提供的功能介於靜態和動態游標之間,並能偵測變更。 如同靜態游標,它不一定會偵測結果集成員和順序的變更。 如同動態數據指標,它會偵測結果集中數據列值的變更。
鍵集合驅動的游標由稱為鍵集合的一組唯一標識符(鍵)所控制。 鍵是依據能夠唯一識別結果集中數據行的一組欄位所建立的。 索引鍵集是查詢語句所傳回所有數據列的索引鍵值集合。
使用鍵集驅動的游標時,會針對游標中的每個資料列建置並儲存鍵,並儲存在用戶端工作站或伺服器上。 當您存取每個數據列時,儲存的索引鍵會用來從數據源擷取目前的數據值。 在鍵集驅動的游標中,當鍵集完全填入時,結果集成員會凍結。 之後,任何影響會員資格的新增或更新,直到重新開啟前,皆不會包含在結果集中。
當使用者捲動結果集時,就會看到數據值變更(由索引鍵集擁有者或其他進程進行)。 只有在游標關閉後重新開啟時,由其他過程執行的游標外部插入才會顯示。 從游標內所做的插入會顯示在結果集的結尾。
當鍵集驅動的游標嘗試擷取已刪除的列時,在結果集中會顯示為一個「缺口」。 數據列的索引鍵存在於索引鍵集中,但數據列已不存在於結果集中。 如果數據列中的行索引鍵值已更新,則會將該行視為已刪除再插入,因此這類行也會顯示為結果集中的空洞。 雖然鍵集驅動的游標始終能偵測到其他程序刪除的行,但它可以選擇性地移除其自身刪除的行的鍵。 由索引鍵集驅動的游標無法偵測自己的刪除,因為證據已被移除。
索引鍵數據行的更新的運作方式就像刪除舊索引鍵,後面接著插入新索引鍵。 如果未透過游標進行更新,則看不到新的索引鍵值。 如果透過游標進行更新,則會在結果集結尾看到新的鍵值。
鍵集驅動游標有一種變體,稱為鍵集驅動標準游標。 在鍵集驅動的標準指標中,結果集中的資料列成員資格和資料列順序在指標開啟時就確定,但指標擁有者所做的值變更,以及其他進程認可的變更是可見的。 如果變更使某行失去成員資格或影響行的順序,除非游標已關閉並重新開啟,否則該行不會消失或移動。 插入的數據不會顯示,但現有數據的變更在擷取數據列時會顯示出來。
索引鍵集驅動游標難以正確使用,因為其對資料變更的敏感度取決於許多不同情況,如前述所述。 不過,如果您的應用程式與並行更新無關,可以以程式設計方式處理不正確的索引鍵,而且必須直接存取特定索引鍵數據列,則索引鍵集驅動數據指標可能適合您。 使用 adOpenKeyset CursorTypeEnum 來表示您想在 ADO 中使用鍵集游標。