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;

    Source: geocities.com/huanlin_tsai/faq

               ( geocities.com/huanlin_tsai)