Delphi中运行期间在TClientDataSet中实现统计字段和计算字段

1、统计字段的实现
   第一步用如下格式创建TClientDataSet
      with ClientDataSet1 do
      Begin
           with FieldDefs.AddFieldDef do
    Begin
         DataType=ftInteger;
  Name='A';
    End;
           with FieldDefs.AddFieldDef do
    Begin
         DataType=ftInteger;
  Name='B';
    End;
           with FieldDefs.AddFieldDef do
    Begin
         DataType=ftInteger;
  Name='C';
    End;
    CreateDataSet;
    Active:=true;
      End;
    第二步、定义统计字段的计算方法
        Function GetAggVale(CDS:TClientDataSetp;const AggExpression:String;const AggField:String;
    const AggGroupLevel:Integer=0):Variant;
 var
    AddUp:TAggregate;
 Begin
    Addup:=TAggregate.Create(CDS.Aggregates,CDS);
    try   
       Addup.Expression:=Format(AggExpression,[AggField]);
       AddUp.GroupingLevel:=AggGroupLevel;
       Addup.active:=True;
       Result:=Addup.Value;
    Finally
       Addup.Free;
    End;
 End;
      在ClientDataSet1的AfterPost事件中实现
         ShowMessage(GetAddValue(ClientDataSet1,'Sum(%s)','A',0);
      以上是简单说明了一下统计字段的简单运用,实际上在Delphi中的TClientDataSet还可以实现很多中统计。譬如说分组等等。

2、运行期计算字段的实现
      建立如下关系
      DBGrid1.DataSource:=DataSource1;
      DataSource1.DataSet:=ClientDataSet1;
      ClientDataSet1.ProvideName:='DataSetProvider1';
      DataSetProvider1.DataSet:=ClientDataSet2;
      因为在ClientDataSet2的FieldsDefs中不能直接定义FieldKind所以用了一个ClientData1转接了一下
      在代码中实现
      with ClientDataSet2 do
      Begin
           with FieldDefs.AddFieldDef do
    Begin
         DataType=ftInteger;
  Name='A';
    End;
           with FieldDefs.AddFieldDef do
    Begin
         DataType=ftInteger;
  Name='B';
    End;
           with FieldDefs.AddFieldDef do
    Begin
         DataType=ftInteger;
  Name='C';
    End;
    CreateDataSet;
    Active:=true;
     End;
     with ClientDataSet1 do
     Begin
   tmpField:=TIntegerField.Create(ClientDataSet1);
   tmpField.FieldName:='A';
   tmpField.DataSet:=ClientDataSet1;
   tmpField.FieldKind:=fkData;

   tmpField:=TIntegerField.Create(ClientDataSet1);
   tmpField.FieldName:='B';
   tmpField.DataSet:=ClientDataSet1;
   tmpField.FieldKind:=fkData;

   tmpField:=TIntegerField.Create(ClientDataSet1);
   tmpField.FieldName:='C';
   tmpField.DataSet:=ClientDataSet1;
   tmpField.FieldKind:=fkCalculated;

   Active:=true;
     End;
     DBGrid1.Columns[0].FieldName:='A';
     DBGrid1.Columns[0].FieldName:='B';
     DBGrid1.Columns[0].FieldName:='C';

     接下来的就是在ClientDataSet1的OnCalcFields事件中实现计算算法了如下:
     ClientDataSet['C']:=ClientDataSet['A']+ClientDataSet['B'];

转载于:https://www.cnblogs.com/Wu50Feng/archive/2005/11/22/281826.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值