Иллюстрированный самоучитель по Delphi 7 для профессионалов

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

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

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.