首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何销毁运行时定义的TClientDataSet TFields?

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

Stack Overflow用户
提问于 2014-10-01 14:08:51
回答 1查看 722关注 0票数 2

我有一个TClientDataSet,它与字段编辑器中定义的所有字段耦合到查询中。

在运行时,我添加三个fkInternalCalc字段:

代码语言:javascript
复制
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;

我使用这些附加字段进行一些计算,更新一个“真实”字段,然后我就完成了:

代码语言:javascript
复制
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”错误(可能其他两个也是错误的)。

TClientDataSet连接到TDBGrid。

我在移除这三个字段(或之前)时做错了什么?

阅读优秀的Cary Jensen文章对我没有帮助;我有设计时和运行时字段的混合情况。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-01 14:19:28

啊,这其中的一件事-)

我不仅在计算期间使用筛选器设置,而且还使用属性IndexFieldNames。最后一个IndexFieldNames内容包含TT_SORTSTRING。

我的TearDown例程也必须重新设置:

代码语言:javascript
复制
IndexFieldNames := '';
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26143378

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档