Вычисление значения проводится только для тех агрегатных полей, свойство property Active: Boolean;
которых имеет значение True.
Вычисление включенных свойством Active агрегатных полей выполняется только в том случае, если булевское свойство AggregatesActive клиентского компонента набора данных имеет значение True.
По умолчанию экземпляр класса TAggregateFieid создается со свойством
Visible = False.
Группировка и использование индексов
Каждый агрегат (объект или поле) имеет свойство
property GroupingLevel: Integer;
которое задает уровень группировки полей набора данных при вычислении. При значении 0 расчет проводится для всех записей набора данных. При значении 1 записи группируются по первому полю набора данных и расчет осуществляется для каждой группы. При значении 2 записи разбиваются на группы по первому и второму полям и т. д.
Однако группировка по уровням выше нулевого возможна, только если в наборе данных используется индекс по группирующим полям. Например, еСЛИ (ЖМСГЮ GroupingLevel = 2 И Набор даРШЬГХ начинается С ПОЛеЙ CustNo И OrderNo, В свойстве IndexName компонента TClientDataSet И СЮЙСТВг
property IndexName: String;
агрегата (объекта или поля) должно быть имя индекса, включающего оба эти поля.
Вложенные наборы данных
В гл. 14 рассматривался вопрос организации между таблицами отношения "один-ко-многим", когда через одинаковое значение поля внешнего ключа одна запись главной таблицы связывается с несколькими записями подчиненной таблицы. Этот широко распространенный в практике программирования приложений БД механизм реализован и в компоненте TClientDataSet. ДЛЯ ЭТОГО ИСПОЛЬЗУЮТСЯ класс ПОЛЯ TDataSetField.
На стороне клиента для создания отношения "один-ко-многим" необходимо использовать как минимум два компонента TClientDataSet, главный из которых инкапсулирует основной набор данных, а подчиненный - вложенный набор данных.
Итак, на стороне сервера есть два табличных компонента, связанных отношением 'ОДИН-КаМНОгаМ" при ШШЩ СКЖЗВ MasterSource И MasterFields (см. гл. 14). Также это могут быть и два компонента запросов SQL, связанные параметрами подчиненного запроса с одноименными полями главного запроса И (Ж)ЙСТЮМ DataSource.
Теперь на стороне клиента необходимо при помощи компонента-провайдера связать компонент TClientDataSet с главным серверным компонентом отношения "один-ко-многим" и создать для него статические объекты для всех полей. Для этого достаточно дважды щелкнуть на компоненте и в окне Редактора полей (см. рис. 22.3) из всплывающего меню выбрать пункт Add Field. В результате в окне Редактора полей появятся имена объектов для всех полей серверного набора данных, а также еще одно дополнительное поле объектного типа TDataSetFieid. Его имя совпадает с именем подчиненного серверного компонента отношения "один-ко-многим".
Это поле связано с подчиненным компонентом на сервере. Чтобы убедиться в этом, достаточно просмотреть значение его свойства только для чтения
property NestedDataSet: TDataSet;
Индексированный список всех полей, передаваемых из серверного подчиненного компонента, содержится в свойстве только для чтения