Q:如何在執行時期建立欄位物件?
A:要動態建立欄位物件,可以呼叫 TField 的 Create 方法,我們不會真的建立 TField
,而是由他的衍生類別來建立欄位物件,例如:TStringField。建立好之後還要設定下
列屬性:
FieldName 在資料集中的欄位名稱
Name 欄位物件的名稱
Index 欄位物件在 Fields 屬性中的位置
DataSet 相連結的 TTable 或 TQuery
以下程式碼示範如何建立及刪除一個 TStringField 物件:
// create a field object
procedure TForm1.Button1Click(Sender: TObject);
var
T: TStringField;
begin
Query1.Close;
T := TStringField.Create(Self);
T.FieldName := 'CompanyName';
T.Name := Query1.Name + T.FieldName; // T.Name := 'Query1CompanyName'
T.Index := Query1.FieldCount;
T.DataSet := Query1;
Query1.FieldDefs.Update;
Query1.Open;
end;
// delete a field object
// 注意: 釋放欄位物件之前要先把相連的資料集關閉
procedure TForm1.Button2Click(Sender: TObject);
var
TC: TComponent;
begin
TC := FindComponent('Query1CompanyName');
if not (TC = nil) then
begin
Query1.Close;
TC.Free;
Query1.Open;
end;
end;
// 建立計算欄位
procedure AddCalculatedStringField(ADataSet: TDataSet; const FldName: string);
var
i: integer;
f: TField;
begin
if ADataSet.FindField(FldName) <> nil then
Exit;
ADataSet.Close;
f := TStringField.Create(ADataSet);
f.Name := ADataSet.Name + FldName;
f.FieldName := FldName;
f.DisplayLabel := FldName;
f.FieldKind := fkCalculated;
f.Calculated := True;
f.DataSet := ADataSet;
end;
               (
geocities.com/huanlin_tsai)