【发布时间】:2014-10-01 14:08:51
【问题描述】:
我有一个与查询耦合的 TClientDataSet,所有字段都在字段编辑器中定义。
在运行时我添加了三个 fkInternalCalc 字段:
class procedure TTaskIndexCalculator.Setup(AClientDataSet: TClientDataSet);
var
lCalcIntField : TIntegerField;
lCalcStrField : TStringField;
begin
CDS := AClientDataSet;
CDS.DisableControls;
CDS.Close;
lCalcIntField := TIntegerField.Create(CDS);
with lCalcIntField do
begin
Name := 'CalcFldLevel';
FieldKind := fkInternalCalc;
FieldName := 'TT_LEVEL';
DataSet := CDS;
end;
lCalcIntField := TIntegerField.Create(CDS);
with lCalcIntField do
begin
Name := 'CalcFldDateOrder';
FieldKind := fkInternalCalc;
FieldName := 'TT_DATEORDER';
DataSet := CDS;
end;
lCalcStrField := TStringField.Create(CDS);
with lCalcStrField do
begin
Name := 'CalcFldSortString';
FieldKind := fkInternalCalc;
FieldName := 'TT_SORTSTRING';
Size := 200;
DataSet := CDS;
end;
CDS.Open;
end;
我使用这些附加字段进行一些计算,更新一个“真实”字段,然后我就完成了:
class procedure TTaskIndexCalculator.TearDown;
begin
with CDS do
begin
Close;
Fields[CDS.FieldCount-1].Free;
Fields[CDS.FieldCount-1].Free;
Fields[CDS.FieldCount-1].Free;
Filter := '';
Filtered := false;
Open;
EnableControls;
end;
end;
但是,在最后的“打开”语句中,TT_SORTSTRING 字段出现“未找到”错误(可能其他两个也是错误的)。
TClientDataSet 连接到 TDBGrid。
删除三个字段(或更早)我做错了什么?
阅读the excellent Cary Jensen article 对我没有帮助;我有设计时和运行时字段的混合情况。
【问题讨论】:
-
我认为您需要致电
CDS.Fields.Remove(lCalcIntField);等 -
@Hugh 在这种情况下,我重复使用 lCalcIntField 的设置将是非常错误的 ;-) 是吗?
-
我明白你的意思 - 这有点错误,是的,但只是理论上,风格上......我的意思是你可能需要
Remove()字段。我看到你有你的答案。
标签: delphi delphi-xe2 tclientdataset