Курсор набора данных
Для набора данных 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 позволяет узнать, какой метод вызвал это перемещение.