2
我有一个TClientDataSet耦合到一个查询,在Fields编辑器中定义了所有的字段。如何销毁运行时定义的TClientDataSet TFields?
在运行时我添加三个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;
然而,在最后的'Open'声明中,我得到了TT_SORTSTRING字段的“not found”错误(可能其他两个错误也是错误的)。
TClientDataSet连接到TDBGrid。
我在删除三个字段(或更早)时做错了什么?
阅读the excellent Cary Jensen article没有帮助我;我的设计时间和运行时间字段混杂不清。
我想你NEDD到'CDS.Fields.Remove(lCalcIntField)的调用;'等 – 2014-10-01 14:24:14
@Hugh在这种情况下,我的设置与重用lCalcIntField会很错了;-)是吗? – 2014-10-01 14:30:45
我明白你的意思了 - 这是有点错误,是的,但只在理论上,风格上......我的观点是你可能需要'删除()'字段。虽然我看到你有答案。 – 2014-10-01 14:33:57