2

Delphi の TAdoTable にプログラムでフィールドを追加する方法に基づいて、すべてのフィールドを FibPlus データセット (TDataSet の子孫である可能性があります) に動的に追加しようとしています。各フィールドは変数として宣言されます。宣言部分

  TForm4 = class(TForm)
    pFIBDatabase1: TpFIBDatabase;
    pFIBTransaction1: TpFIBTransaction;
    ds1: TpFIBDataSet;
    DataSource1: TDataSource;
    DBGrid1: TDBGrid;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
   iVERField : TFIBIntegerField;//I need that all fields to be represented by a variable
    { Public declarations }
  end;

formcreate イベントでは、すべてのフィールドを作成し、必要なプロパティを設定して、それらすべてをデータセットに動的に追加します。

procedure TForm4.FormCreate(Sender: TObject);
var i:Integer;
    fieldDef :TFieldDef;
begin
 ds1.SQLs.SelectSQL.Text := 'select ver from ver';

 ds1.Fields.Clear;
 ds1.FieldDefs.Clear;
 ds1.FieldDefs.update;

 iVERField := TFIBIntegerField.Create(ds1);
 iVERField.FieldName := 'VER';
 iVERField.DisplayLabel := 'VER';
 iVERField.Name := 'iVERField';
 iVERField.DataSet := ds1;
 ds1.Fields.Add(iVERField);

 ds1.Open;
end;

私の問題は、フィールドがdbgridで重複して表示されることです

ここに画像の説明を入力

LE: フィールドが 2 回表示される理由:

 iVERField.DataSet := ds1; //one 
 ds1.Fields.Add(iVERField);//two

LE1: これは、すべてのフィールドを変数としてデータセットに追加する方法ですか?

4

1 に答える 1

2

D7 では (それ以降は変更されていないと思います)、TField の SetDataSet メソッドは既にデータセットの Ffields.Add メソッドを呼び出しているため、明示的な ds1.Fields.Add が 2 回目に追加するため、フィールドが重複します。

于 2014-01-30T14:13:45.557 に答える