Поделиться через


Курсоры наборов ключей

Область применения: Access 2013, Office 2013

Курсор набора ключей предоставляет функциональные возможности между статическим и динамическим курсорами в его способности обнаруживать изменения. Как и статический курсор, он не всегда обнаруживает изменения членства и порядка результирующих наборов. Как и динамический курсор, он обнаруживает изменения значений строк в результирующем наборе.

Курсоры, управляемые набором ключей, управляются набором уникальных идентификаторов (ключей), известных как набор ключей. Ключи создаются из набора столбцов, которые однозначно идентифицируют строки в результирующем наборе. Набор ключей — это набор значений ключей из всех строк, возвращаемых инструкцией запроса.

С помощью курсоров, управляемых набором ключей, ключ создается и сохраняется для каждой строки курсора и сохраняется на клиентской рабочей станции или на сервере. При доступе к каждой строке сохраненный ключ используется для получения текущих значений данных из источника данных. В управляемом набором ключей курсоре членство в результирующем наборе замораживаются при полном заполнении набора ключей. После этого дополнения или обновления, влияющие на членство, не входят в результирующий набор, пока он не будет повторно открыт.

Изменения значений данных (внесенные владельцем набора ключей или другими процессами) видны при прокрутке результирующих наборов. Вставки, выполненные за пределами курсора (другими процессами), видны только в том случае, если курсор закрыт и вновь открыт. Вставки, выполненные внутри курсора, видны в конце результирующих наборов.

Когда курсор, управляемый набором ключей, пытается получить строку, которая была удалена, строка отображается как "дыра" в результирующем наборе. Ключ для строки существует в наборе ключей, но строка больше не существует в результирующем наборе. Если значения ключей в строке обновляются, считается, что строка была удалена, а затем вставлена, поэтому такие строки также отображаются как отверстия в результирующем наборе. Хотя курсор, управляемый набором ключей, всегда может обнаруживать строки, удаленные другими процессами, он может при необходимости удалить ключи для строк, которые он удаляет сам. Курсоры, управляемые набором ключей, которые делают это, не могут обнаруживать собственные удаления, так как доказательства были удалены.

Обновление ключевого столбца выполняется так же, как удаление старого ключа, за которым следует вставка нового ключа. Новое значение ключа не отображается, если обновление не было выполнено с помощью курсора. Если обновление было выполнено с помощью курсора, новое значение ключа отображается в конце результирующих наборов.

Существует вариант курсоров, управляемых набором ключей, который называется стандартными курсорами на основе набора ключей. В стандартном курсоре, управляемом набором ключей, членство строк в результирующем наборе и порядок строк фиксируются во время открытия курсора, но изменения значений, внесенные владельцем курсора и зафиксированные изменения, внесенные другими процессами, видны. Если изменение дисквалифицирует строку для членства или влияет на порядок строки, строка не исчезает и не перемещается, если курсор не будет закрыт и вновь открыт. Вставленные данные не отображаются, но изменения существующих данных отображаются при получении строк.

Курсор, управляемый набором ключей, трудно использовать правильно, так как чувствительность к изменениям данных зависит от многих различных обстоятельств, как описано выше. Однако если приложение не связано с одновременными обновлениями, может программно обрабатывать неправильные ключи и должно напрямую обращаться к определенным строкам, управляемый набором ключей, может работать курсор, управляемый набором ключей. Используйте adOpenKeysetCursorTypeEnum , чтобы указать, что вы хотите использовать курсор набора ключей в ADO.