Курсор набора данных
Для набора данных ADO в зависимости от его назначения можно выбрать тип и местоположение используемого курсора. Местоположение курсора задается свойством:
type TCursorLocation = (clUseServer, clUseClient); property CursorLocation: TCursorLocation;
Курсор может находиться на сервере (CIUseServer) или на клиенте (CIUseClient).
- Серверный курсор используется при работе с большими наборами данных, которые нецелесообразно пересылать клиенту целиком. При этом несколько снижается скорость работы клиентского набора данных.
- Клиентский курсор обеспечивает передачу набора данных клиенту. Это положительно сказывается на быстродействии, но такой курсор разумно использовать только для небольших наборов данных, не загружающих канал связи с сервером.
При использовании клиентского курсора необходимо дополнительно установить свойство:
TMarshalOption = (moMarshalAll, moMarshalModifiedOnly); property MarshalOptions: TmarshalOption
…которое управляет обменом данных клиента с сервером. Если соединение с сервером быстрое, можно использовать значение moMarshalAll, разрешающее возврат серверу всех записей набора данных. В противном случае для ускорения работы компонента можно применить свойство moMarshalModifiedOnly, обеспечивающее возврат только модифицированных клиентом записей.
Тип курсора определяется свойством:
TCursorType = (ctUnspecified, CtOpenForwardOnly, ctKeyset, ctDynamic, ctStatic); property CursorType: TCursorType;
Где:
- ctunspecified – курсор не задан, тип курсора определяется возможностями источника данных;
- ctOpenForwardOnly – однонаправленный курсор, допускающий перемещение только вперед; используется при необходимости быстрого одиночного прохода по всем записям набора данных;
- ctKeyset – двунаправленный локальный курсор, не обеспечивающий просмотр добавленных и удаленных другими пользователями записей;
- ctDynamic – двунаправленный курсор, отображает все изменения, требует наибольших затрат ресурсов;
- ctStatic – двунаправленный курсор, полностью игнорирует изменения, внесенные другими пользователями.
Примечание
Если курсор расположен на клиенте (CursorType = ciusedient), то для него доступен только один тип – ctStatic.
Соответственно до и после каждого перемещения курсора в наборе данных вызываются методы – обработчики:
TRecordsetReasonEvent = procedure(DataSet: TCustomADODataSet; const Reason: TEventReason; var EventStatus: TEventStatus) of object; property OnWillMove: TRecordsetReasonEvent;
…и:
TP.ecordsetErrorEvent = procedure(DataSet: TCustomADODataSet; const – eason: TEventReason; const Error: Error; var EventStatus: TEventStatus) if object; property OnMoveComplete: TRecordsetErrorEvent;
Где параметр Reason позволяет узнать, какой метод вызвал это перемещение.