给数据添加计算字段

{>------------------------------------------------------------
 过程功  能: 给数据添加计算字段
 修改改说明:
   增加参数: name : string
             Xtype: integer 用以指定字段类型
                    0: 为Integer 1:为String
       作用: 用以指定要添加计算字段的字段名称,有利于扩展过程的作用域
<-------------------------------------------------------------}
procedure AddCalcField(Cds: TClientDataset; aName: string; Xtype: integer);
Var
  FieldList:TList;
  FieldItem:TFieldInfo;
  FData: OleVariant;
  I:integer;
begin
  If Not Cds.Active Then
     Exit;
  FData := Cds.data;
  FieldList:=TList.Create;
  For I:=0 to Cds.FieldDefs.Count-1 Do
  Begin
    New(FieldItem);
    FieldItem^.FieldClass:=Cds.FieldDefs.Items[i].FieldClass;
    FieldItem^.FieldName :=Cds.FieldDefs.Items[i].name;
    FieldItem^.size := Cds.FieldDefs.Items[i].size;
    FieldItem^.Index := Cds.FieldDefs.Items[i].Index;
    FieldList.Add(FieldItem);
  End;
  if Cds.FindField(aName)<>nil then Exit;  //如果已创建过不再创建'GridXh'
 
  Cds.Close;
  Cds.FieldDefs.BeginUpdate ;
  {>-----------创建计算字段----------------}
  Case Xtype of
  0:
    With TIntegerField.Create(Cds) Do
    Begin
      FieldName :=aName;
      DisplayLabel :=aName;
      FieldKind :=fkCalculated;
      Visible:=True;
      Dataset:=Cds;
    End;
  1:
    With TStringField.Create(Cds) Do
    Begin
      FieldName :=aName;
      DisplayLabel :=aName;
      FieldKind :=fkCalculated;
      Visible:=True;
      Dataset:=Cds;
    End;
  end;//Case
  {<-------------------------------------}
  Cds.FieldDefs.EndUpdate;
  For I:=0 to FieldList.Count-1 Do
  Begin
    if Cds.FindField(TFieldInfo(FieldList.Items[i])^.FieldName)=nil then
      with TFieldInfo(FieldList.Items[i])^.FieldClass.Create(Cds) do
      begin
        FieldName := TFieldInfo(FieldList.Items[i])^.FieldName;
        size := TFieldInfo(FieldList.Items[i])^.size;
        Index := TFieldInfo(FieldList.Items[i])^.Index;
        Dataset := Cds;
        Freemem(FieldList.Items[I],Sizeof(TFieldInfo));
      end;
  End;
  FieldList.Free ;
  Cds.AppendData(Fdata, false);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值