您好我想要计算字段“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;
答案 0 :(得分:0)
//(使用FieldDefs.Add从原始错误建议修改)
//尝试使用AddfieldDef,它返回一个TFieldDef
var
fieldDef: TFieldDef;
//
fieldDef := FieldDefs.AddFieldDef;
fieldDef.DataType := ftFloat;
fieldDef.InternalCalcField := true;
fieldDef.Name := 'OrdAll';