3.4 Aggregation
Delphi定义了一种特别的字段称为Aggregate字段,从Aggregate的名称便可以了解它的目的是用来计算客户端数据集中数据的各种特别数值的。程序员可以使用Aggregate来计算客户端数据集中数据的总计数值、平均值或是计算最大值和最小值。Aggregate字段对象允许程序员使用表达式,并且使用Aggregate已经预先定义好的一些操作数来帮助程序员进行计算工作,这些已经预先定义的操作数定义在表3-5中。
表3-5
|
操作数 |
使用意义 |
|
Sum |
计算数值字段的总和 |
|
Avg |
计算数值字段或是日期字段的平均值 |
|
Count |
计算字段非空白数值的总数值 |
|
Min |
取得数值、日期或是字符串字段的最小数值 |
|
Max |
取得数值、日期或是字符串字段的最大数值 |
代表Aggregate字段的类型是TAggregate类型对象,TAggregate类型中有一个特性值Expression,在Expression中程序员便可以使用表3-5中定义的操作数来进行计算工作。要使用Aggregate字段非常地简单。要使用Aggregate字段,程序员只需要遵照下面的两个步骤即可:
n 使用字段编辑器定义Aggregate字段。
n 在Aggregate字段的Expression特性值中使用操作数输入要执行的表达式。
之后,程序员就可以在程序代码中存取Aggregate字段,就像存取一般的字段一样。一旦存取Aggregate字段,Aggregate字段就会执行它的Expression特性值中定义的表达式,执行的结果就会成为Aggregate字段的数值。
现在让我们继续使用上一节的范例来说明如何使用Aggregate字段,我们除了为每一位员工计算加薪之后的薪资之外,还希望得到所有的加薪数值。这就可以使用Aggregate字段轻易地做到,因为Aggregate字段提供了sum操作数可以计算Salary字段的加总数值。
因此,我们先点击客户端数据集控件,接着在对象查看器中点击Aggregates特性值启动Aggregate编辑器,然后加入一个新的Aggregate字段,如图3-19所示。
接着在Aggregate字段的Expression特性值中输入如下的表达式:
Sum(Salary)

图3-19 计算字段执行的状态
这个表达式使用了Aggregate字段提供的sum操作数来计算Salary字段数值的总和。接着我们只需要在程序代码中直接存取这个Aggregate字段,就像存取一般的字段即可取得Aggregate字段代表的Salary字段的所有数值的总和:
procedure TfrmPerfMain.bbtnAdjustClick(Sender: TObject);
begin
dmDBExpress.cdsTest.Edit;
dmDBExpress.cdsTest.Cancel;
Self.ledtTotalAdjustedSalary.Text :=
dmDBExpress.cdsTest.Aggregates.Items[0].Value;
end;
最后我们再次执行上一小节的范例,当我们输入加薪的百分比之后,下方的TEdit控件就可以把显示Aggregate字段计算出来,代表所有加薪总和的数值了(见图3-20)。

图3-20 计算字段执行的状态
Aggregate字段是Delphi提供的简易表达式的功能,并且允许程序员把计算的信息临时以字段的形式储存在数据集中。不过程序员如果需要比较复杂的计算,那么仍然应该使用Object Pascal程序代码或是计算字段来解决复杂的应用。






