|
Объекты-агрегаты
Для вычисления агрегатных выражений
для всех записей набора данных используются объекты
класса TAggregate. Индексированный
список этих объектов содержится в свойстве
property Aggregates:
TAggregates;
компонента TClientDataSet.
Прямым предком класса TAggregates
является класс TCollection, поэтому
для него можно использовать все основные приемы работы
с коллекциями (см. гл. 7).
Для создания нового агрегата необходимо
щелкнуть на кнопке свойства в Инспекторе объектов и,
в появившемся Редакторе агрегатов, выбрать пункт
Add во всплывающем меню или щелкнуть на кнопке
Add New (рис. 22.3).
Новый агрегат может быть добавлен и
динамически:
var NewAgg: TAggregate;
NewAgg := ClientDataSet.Aggregates.Add;
Рис. 22.3. Редактор
агрегатов компонента TClientDataSet
Рассмотрим свойства класса TAggregate.
Имя агрегата содержится в свойстве
property AggregateName:
string;
которое может быть использовано при
отображении агрегата в визуальных компонентах.
Вычисляемое выражение с применением
агрегатных функций должно находиться в свойстве
property Expression:
String;
Например, для таблицы COUNTRY.DB из
демонстрационной базы данных Delphi можно вычислять
общую площадь государств Северной и Южной Америки (площадь
государства содержится в поле Area):
ClientDataSet.Aggregates[Somelndex].Expression
:= 'SUM(Area)';
Вычислением агрегата управляет свойство
property Active:
Boolean;
а вычисленное значение возвращает функция
function Value: Variant;
Если пользователь редактирует набор
данных, то для всех включенных агрегатов
(Active = True) возвращаемое значение автоматически
пересчитывается.
Например, после сохранения изменений
в наборе данных можно визуализировать новое значение
агрегата:
SomeLabel.Caption
:= ClientDataSet.Aggregates[0].AggregateName;
SomeEdit.Text :=
ClientDataSet.Aggregates[0].Value;
Для проверки активности агрегата, помимо
проверки значения свойства Active,
можно также использовать свойство
property InUse: Boolean;
Если оно возвращает значение
True — вычисляемое выражение агрегата рассчитывается.
Видимость агрегата в визуальных компонентах
управляется свойством
property Visible:
Boolean;
Для того чтобы снизить вычислительную
нагрузку на набор данных, можно отключить все агрегаты
одновременно. Для этого свойству
property AggregatesActive:
Boolean;
необходимо присвоить значение False.
Если же AggregatesActive
= True, вычисляются только активные агрегаты,
для которых свойство Active имеет
значение True.
Если вам необходимо использовать все
активные агрегаты, то вместо их последовательного перебора
с проверкой свойства Active можно
использовать свойство
property ActiveAggs[Index:
Integer] : TList;
компонента TClientDataSet,
которое представляет собой список активных агрегатов.
|