M Y D E L P H I 7 . R U Самоучитель программирования  
 
  • Главная
  •  

     

    Курсор набора данных

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