property HasAppServer: Boolean; автоматически принимает значение True.

Теперь компонент готов к приему данных. При использовании метода

procedure Среп; или свойства

property Active: Boolean;

компонент получает от провайдера первый пакет данных. Размер пакета определяется свойством

property PacketRecords: Integer;

которое задает число записей, передаваемое в одном пакете. Если свойство имеет значение -1 (это значение по умолчанию), передаются все записи набора данных. Если оно равно 0 - клиенту передаются только метаданные о наборе данных.

Если соединение клиента с сервером медленное, число записей в пакете можно уменьшить, но желательно так, чтобы при использовании компонентов TDBGrid полученные в одном пакете записи полностью заполняли рабочую область этого компонента.

Одновременно разработчик имеет возможность управлять доставкой следующих пакетов. Для этого используется метод

function GetNextPacket: Integer;

Например, это можно сделать следующим образом:

procedure TDataModulel.ClientDataSetAfterScroll(DataSet: TDataSet);
begin
if ClientDataSet.roF then ClientDataSet.GetNextPacket;
end;

Свойство

property FetchOnDemand: Boolean;

должно иметь значение False. При значении True оно разрешает компоненту получать новые пакеты данных по мере надобности, например, при необходимости прокрутки записей в компоненте TDBGrid

До и после получения очередного пакета соответственно выполняются обработчики событий:

type

TRemoteEvent = procedure(Sender: IDbject;
var CwnerData: OleVariant) of object;
property Be foreGetRecords: IRemoteEvent;
property AfterGetRecords: IRartfceEvent;

Содержимое очередного пакета представлено свойством

property Data: OleVariant;

Данные в нем хранятся в транспортном формате, готовые для пересылки. Причем его можно использовать не только для чтения, но и для записи, формируя пакет данных для отправки провайдеру:

var CwnerData: OleVariant;
MaxErrors, ErrorCount: Integer;
MaxErrors := 0;
ResultDataSet.Data := SourceDataSet.AppServer .AS ApplyUpdates (' ', sourceDataSet. Delta, MaxErrors, ErrorCount, OwnerUata);

Метод AS_ApplyUpdates передает данные, содержащиеся в буфере Delta, провайдеру на сервер и возвращает записи, сохранить которые не удалось. Подробнее о методе AS_ApplyUpdates см. табл. 21.1.

Размер буфера Data в байтах возвращает свойство

property DataSize: Integer;

Кэширование и редактирование данных

После получения записей от провайдера набор данных сохраняется в локальном буфере памяти. И все вносимые изменения после применения метода Post также сохраняются локально и не пересылаются на сервер. Буфер изменений доступен при помощи свойства

property Delta: OleVariant;

Для передачи изменений на сервер используется метод

function ApplyUpdates (MaxErrors: Integer);
Integer;
virtual;

где параметр MaxErrors задает число ошибок, которые игнорируются при сохранении данных на сервере. Если параметр равен - 1, сохранение на сервере прерывается при первой же ошибке. Метод возвращает число сохраненных записей.

После выполнения метода ApplyUpdates все записи, сохранить которые не удалось, возвращаются клиенту в локальный буфер Delta.


⇐ Предыдущая страница| |Следующая страница ⇒

Программирование в Delphi 7



Новости за месяц

  • Октябрь
    2017
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс