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