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;