如何在Delphi中为Clientdataset创建虚拟的计算字段(ftADT)

时间:2017-01-03 14:23:45

标签: delphi

您好我想要计算字段“All.OrdAll”或内部计算,它将对每个输入值的Fields Ord ..求和。我在运行时创建clientdataset(CDS)。要对cds进行更改,我必须关闭它,但如果我关闭它,我将无法访问我需要计算的字段。请注意,它是虚拟的(ftADT)。 请帮助一些代码。

with cds do
begin
Close;
fieldDefs.Clear;
FieldDefs.Add('SN',ftInteger);
FieldDefs.Add('NAME',ftString,40);
FieldDefs.Add('ALL',ftADT,3);
FieldDefs.Add('OrdAll',ftFloat);
FieldDefs.Add('KolAll',ftFloat);
FieldDefs.Add('MinAll',ftFloat);

For i:=0 to High(Bases)
  do begin
    FieldDefs.Add(Bases[i].Name,ftADT,4);
    FieldDefs.Add('Price'+IntToStr(Bases[i].SN),ftFloat);
    FieldDefs.Add('ORD'+IntToStr(Bases[i].SN),ftFloat);
    FieldDefs.Add('Kol'+IntToStr(Bases[i].SN),ftFloat);
    FieldDefs.Add('MIN'+IntToStr(Bases[i].SN),ftFloat);
    end;
CreateDataSet;
end;
cds.close;
TADTField(cds.FieldByName('All')).Fields.FieldByName('OrdAll').
FieldKind:=fkInternalCalc;
cds.FieldDefs.Update;
cds.Open;

1 个答案:

答案 0 :(得分:0)

//(使用FieldDefs.Add从原始错误建议修改)

//尝试使用AddfieldDef,它返回一个TFieldDef

var 
  fieldDef: TFieldDef; 

// 
fieldDef := FieldDefs.AddFieldDef; 
fieldDef.DataType := ftFloat; 
fieldDef.InternalCalcField := true; 
fieldDef.Name := 'OrdAll';