Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2_Komponent_TClientDataSet.doc
Скачиваний:
6
Добавлен:
25.08.2019
Размер:
79.87 Кб
Скачать

Сохранение набора данных в файлах

Клиентское приложение может использовать одну очень удобную функцию компонента TClientDataSet. Представим, что соединение между сервером и клиентом обладает малой пропускной способностью и к тому же часто обрывается. Что в этом случае делать пользователю, который внес много изменений и не может сохранить их на сервере? В этом случае можно сохранить набор данных клиента в файле на локальном диске, а при удобной возможности — загрузить обратно и переслать на сервер.

Для сохранения данных в файле используется метод SaveToFile(const FileName: string = ''; Format: TDataPacketFormat=dfBinary), причем, если параметр FileName пуст, имя файла берется из свойства FileName.

Также можно передать данные в поток SaveToStream(Stream: TStream; Format: TDataPacketFormat=dfBinary);

Формат, в котором данные будут сохранены, определяется параметром Format.

type TDataPacketFormat = (dfBinary, dfXML, dfXMLUTFS);

где dfBinary — бинарный вид, dfXML — формат XML, dfXMLUTFS — формат XML в кодировке UTF8.

Обратная загрузка данных, соответственно, выполняется методами:

LoadFromFile(const FileName: string = '') и procedure LoadFromStreamfStream: TStream).

После загрузки набор данных полностью готов к работе:

if OpenDialog.Execute then 

begin

ClientDataSet.LoadFromFile (LoadFileDialog.FileName);

ClientDataSet.Open; 

end;

Работа с данными типа blob

Если набор данных сервера содержит большие поля (например, изображения), передача данных по медленному каналу займет очень много времени, что, несомненно, снизит эффективность приложения. Простейшее решение проблемы — передача клиенту данных типа BLOB только в том случае, когда это ему действительно необходимо — т. е. исключительно по его запросу.

В компоненте TClentDataSet процессом передачи полей типа BLOB можно управлять, используя свойство FetchOnDemand. По умолчанию оно равно значению True и клиентский набор данных "выкачивает" данные BLOB по мере необходимости автоматически. Это означает, что приложение будет останавливаться и заново получать данные при любом просмотре данных, прокрутке и т. д. Если свойство имеет значение False, для получения данных клиент должен явно вызвать метод FetchBlobs;

Но, кроме этого, в свойстве options компонента-провайдера TDataSetProvider обязательно должно быть установлено значение: poFetchBlobsOnDemand := True;

Представление данных в формате XML

Набор данных клиента легко можно представить в формате XML. Для этого достаточно использовать свойство XMLData, которое возвращает данные, содержащиеся в буфере Data в бинарном виде, в формате XML. Например, клиентский набор данных можно сохранить в файле формата XML:

if SaveDialog.Execute then

with TFileStream.Create(SaveDialog.FileName, fmCreate) do 

try

Write(Pointer(ClientDataSet.XMLData)^, Length(ClientDataSet.XMLData));

finally

Free ; 

end;

Агрегаты

Наличие локального буфера данных позволяет компоненту TClientDataSet реализовать ряд дополнительных функций, основанных на использовании агрегатных функций применительно к полям всего набора данных, загруженного в локальный буфер.

К агрегатным функциям относятся:

  • AVG — вычисляет среднее значение;

  • COUNT — возвращает число записей;

  • MIN — вычисляет минимальное значение;

  • МАХ — вычисляет максимальное значение;

  • SUM — вычисляет сумму.

Для применения агрегатных функций в компоненте TClientDataSet предусмотрены:

  •  индексированный список объектов, инкапсулирующих агрегатные выражения — агрегаты;

  •  агрегатные поля, обеспечивающие получение новых значений подобно вычисляемым полям, но с группированием записей на основе использования агрегатных функций.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]