Курсор (cursor) - это совокупность данных, на которых основан объект RecordSet. Объект RecordSet — набор отобранных записей. Программист видит базу данных в терминах таблиц, состоящих из записей, где каждая строка образована полями. Однако ADO не видят таблицу, а только курсор, который содержит информацию, позволяющую представить записи для приложения в виде строк с полями. Существует четыре типа курсоров: Dynamic, Keyset, Static и Forward-Only.
Чтобы задать, какой тип курсора больше всего подходит для приложения, используйте свойство CursorType.
Его значения приведены в табл. 18.1.
Свойство CursorType задается перед открытием объекта RecordSet. Если тип курсора не задан, то по умолчанию ADO откроет Forward-Only курсор.
Свойство CursorLocation (Место расположения курсора).
В дополнение к типу курсора можно устанавливать и его место расположения, используя свойство CursorLocation. Обычно курсор открывается на сервере, но можно его открыть и на машине-клиенте. Клиентский курсор ускоряет работу приложения при условии, что нет необходимости сразу вносить изменения в базу данных. Клиентский курсор — Static, и может изменять базу данных только через пакетные изменения (приложение модифицирует RecordSet, а затем передает его на сервер).
Примечание
Пакетные изменения — это довольно сложная тема, и она не рассматривается в этой книге. Более подробную информацию о пакетных изменениях можно получить из документации по методу UpdateBatch объекта RecordSet.
Свойство LockType (Тип блокировки). Другое важное свойство объекта RecordSet -это свойство LockType, которое определяет тип блокировки записей при их редактировании. Устанавливать свойство LockType следует перед открытием объекта RecordSet. Свойство LockType может принимать одно из значений, перечисленных в табл. 18.2.
Примечание
С клиентским объектом RecordSet свойство LockType может быть установлено только в LockOptimisticBatch.
Таблица 18.1. Значения свойства CursorType
| Тип курсора | Константа | Описание | |||
| Dynamic | adOpenDynamic | RecordSet синхронизируется с записями в базе данных. Позволяет просматривать добавления, изменения и удаления, сделанные другими пользователями, и поддерживает все методы перемещения | |||
| Keyset | adOpenKeySet | Ведет себя так же, как и курсор типа Dynamic, но не позволяет видеть записи, которые другие пользователи добавили или удалили. Видны только изменения, внесенные другими пользователями в отобранные записи. Поддерживает все методы перемещения | |||
| Static | adOpenStatic | Предоставляет статическую копию отобранных записей. Поддерживает все методы перемещения, но не позволяет увидеть изменения, сделанные другими пользователями. | |||
| Forward-only | adOpenForwardOnly | Аналогичен курсору типа Dynamic, с той лишь разницей, что позволяет просматривать записи только в направлении вперед. Это улучшает производительность, если нужно сделать только один проход по RecordSet |
|
Значение |
Константа |
Описание |
|
Read-only |
adLockReadOnly |
RecordSet открывается только для чтения. Используйте этот тип блокировки, чтобы предотвратить изменения данных |
|
Pessimistic locking |
adLockPessimistic |
Предоставляет возможности, необходимые для успешного редактирования данных. Блокировка записи источника данных устанавливается немедленно после начала редактирования (т.е. вызова метода Edit — прим. ред.) |
|
Optimistic locking |
adLockOptimistic |
Блокировка включается только после вызова метода Update |
|
Optimistic batch updates |
adLockBatchOptimistic |
Используется для режима пакетных изменений |