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