Компонент TClientDataSet. Получение данных от компонента – провайдера.
Размер пакета определяется свойством:
property PacketRecords: Integer;
…которое задает число записей, передаваемое в одном пакете. Если свойство имеет значение -1 (это значение по умолчанию), передаются все записи набора данных. Если оно равно 0 – клиенту передаются только метаданные о наборе данных.
Если соединение клиента с сервером медленное, число записей в пакете можно уменьшить, но желательно так, чтобы при использовании компонентов TDBGrid полученные в одном пакете записи полностью заполняли рабочую область этого компонента.
Одновременно разработчик имеет возможность управлять доставкой следующих пакетов. Для этого используется метод:
function GetNextPacket: Integer;
Например, это можно сделать следующим образом:
procedure TDataModulel.ClientDataSetAfterScroll(DataSet: TDataSet); begin if ClientDataSet.EOF then ClientDataSet.GetNextPacket; end;
Свойство:
property FetchOnDemand: Boolean;
…должно иметь значение False. При значении True оно разрешает компоненту получать новые пакеты данных по мере надобности, например, при необходимости прокрутки записей в компоненте TDBGrid.
До и после получения очередного пакета соответственно выполняются обработчики событий:
type TRemoteEvent = procedure(Sender: TObject; var OwnerData: OleVariant) of object; property BeforeGetRecords: TRemoteEvent; property AfterGetRecords: TRemoteEvent;
Содержимое очередного пакета представлено свойством:
property Data: OleVariant;
Данные в нем хранятся в транспортном формате, готовые для пересылки. Причем его можно использовать не только для чтения, но и для записи, формируя пакет данных для отправки провайдеру:
var OwnerData: OleVariant; MaxErrors, ErrorCount: Integer; MaxErrors: = 0; ResultDataSet.Data: = SourceDataSet.AppServer.AS_ApplyUpdates ('', SourceDataSet.Delta, MaxErrors, ErrorCount, OwnerData);
Метод AS_AppiyUpdates передает данные, содержащиеся в буфере Delta, провайдеру на сервер и возвращает записи, сохранить которые не удалось. Подробнее о методе AS_ApplyUpdates см. табл. 21.1.
Размер буфера Data в байтах возвращает свойство:
property DataSize: Integer;