gpt4 book ai didi

delphi - 如何销毁运行时定义的 TClientDataSet TFields?

转载 作者:行者123 更新时间:2023-12-02 08:00:12 26 4
gpt4 key购买 nike

我有一个 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;

但是,在最后的“Open”语句中,我收到 TT_SORTSTRING 字段的“未找到”错误(可能其他两个也错误)。

TClientDataSet 连接到 TDBGrid。

删除这三个字段(或更早的字段)时我做错了什么?

阅读the excellent Cary Jensen article没有帮助我;我有设计时和运行时字段的混合情况。

最佳答案

哇哦,其中之一;-)

我不仅在计算过程中使用了过滤器设置,而且还使用了属性 IndexFieldNames。最后一个 IndexFieldNames 内容包含 TT_SORTSTRING。
我的 TearDown 例程也必须重置它:

IndexFieldNames := '';

关于delphi - 如何销毁运行时定义的 TClientDataSet TFields?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26143378/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com