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