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

Объекты-агрегаты

Для вычисления агрегатных выражений для всех записей набора данных используются объекты класса TAggregate. Индексированный список этих объектов содержится в свойстве Aggregates. Прямым предком класса TAggregates является класс TCollection, поэтому для него можно использовать все основные приемы работы с коллекциями.

Для создания нового агрегата необходимо щелкнуть на кнопке свойства в Инспекторе объектов и, в появившемся Редакторе агрегатов, выбрать пункт Add во всплывающем меню или щелкнуть на кнопке Add New.

Новый агрегат может быть добавлен и динамически:

var NewAgg: TAggregate;

NewAgg := ClientDataSet.Aggregates.Add;

Рассмотрим свойства класса TAggregate.

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

Если пользователь редактирует набор данных, то для всех включенных агрегатов (Active = True) возвращаемое значение автоматически пересчитывается.

Видимость агрегата в визуальных компонентах управляется свойством Visible.

Агрегатные поля

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

Агрегатные поля не отображаются вместе со всеми полями в компонентах TDBGrid, в Редакторе полей они расположены в отдельном списке. Для представления значения агрегатного поля можно воспользоваться одним из компонентов отображения данных, который визуализирует значение одного поля (например, TDBText или TDBEdit) или свойствами самого поля:

LabelI.Caption := MyDataSetAGGRFIELDl.AsString;

Класс TAggregateField предназначен для инкапсуляции свойств и методов агрегатных полей. Его свойство Expression задает вычисляемое выражение.

Вычисление значения проводится только для тех агрегатных полей, свойство Active которых имеет значение True.

Вычисление включенных свойством Active агрегатных полей выполняется только в том случае, если свойство AggregatesActive клиентского компонента набора данных имеет значение True. По умолчанию экземпляр класса TAggregateField создается со свойством Visible = False.

Группировка и использование индексов

Каждый агрегат (объект или поле) имеет свойство GroupingLevel, которое задает уровень группировки полей набора данных при вычислении. При значении 0 расчет проводится для всех записей набора данных. При значении 1 записи группируются по первому полю набора данных, и расчет осуществляется для каждой группы. При значении 2 записи разбиваются на группы по первому и второму полям и т. д.

Однако группировка по уровням выше нулевого возможна, только если в наборе данных используется индекс по группирующим полям. Например, если свойство GroupingLevel = 2 и набор данных начинается с полей CustNo и OrderNo, в свойстве IndexName компонента TClientDataSet и свойств property IndexName: String; агрегата (объекта или поля) должно быть имя индекса, включающего оба эти поля.