ClientDataSet1的SQL是Select a,b,c From Test_M现在想动态增加一个计算字段e,是integer类型
Test_M的字段b,c也是integer类型,增加计算字段的目的是:e=b*c
在ClientDataSet1CalcFields事件得出e的值。
求助高手帮助。

解决方案 »

  1.   

    这个直接双击ClientDataSet1,在参数中增加一个计算字段e,设为integer.
    在ClientDataSet1CalcFields中直接计算就行了
      

  2.   

    必需自己继承ClientDataSet控件才能实现,我以前做过的.
      

  3.   

    procedure TForm1.FormCreate(Sender: TObject);
    var
      NewField:TField;
      i:integer;
    begin
    //表中有两字段SName,Birth,现在我们动态生成一个计算字段Age,显示出年龄
      NewField:=TStringField.Create(ADOTable);
      //创建一个TStringField类型的字段
      ADOTable.Close;
      for i:=0 to ADOTable.Fields.Count-1 do
        ADOTable.Fields[0].Free;//释放所有的静态字段
      for i:=0 to ADOTable.FieldDefs.Count-1 do
        ADOTable.FieldDefs.Items[i].CreateField(ADOTable);
     //根据FieldDefs的字段信息动态的生成静态字段 
      NewField.Size:=5;
      NewField.FieldName:='Age';
      NewField.FieldKind:=fkCalculated;
     //设置这个这字段为计算字段
      NewField.DataSet:=ADOTable;
     //把这个字段加到ADOTable上
      ADOTable.Open;
    end; procedure TForm1.ADOTableCalcFields(DataSet: TDataSet);
    var
      YY1,YY2,MM,DD:Word;
      TmpDate:TDate;
    begin
      DecodeDate(Date,YY1,MM,DD);
      TmpDate:=DataSet.FieldByName('Birth').AsDateTime;
      DecodeDate(TmpDate,YY2,MM,DD);
      DataSet.FieldByName('Age').AsString:=IntToStr(YY1-YY2)+'岁';
      //在OnCalField中显示出年龄
    end;