【问题标题】:How do I destroy run-time defined TClientDataSet TFields?如何销毁运行时定义的 TClientDataSet TFields?
【发布时间】: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


【解决方案1】:

哇,这些东西之一;-)

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

IndexFieldNames := '';

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-01
    • 1970-01-01
    • 2011-11-15
    • 2011-11-25
    • 1970-01-01
    相关资源
    最近更新 更多