Delphi - 在运行时动态添加所有字段在数据集中生成重复项

标签 delphi dataset delphi-xe fibplus

基于How to add a field programatically to a TAdoTable in Delphi我正在尝试将所有字段动态添加到 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 上显示为重复

enter image description here

LE:为什么字段出现两次:

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

LE1:这是我应该将所有字段作为变量添加到数据集的方式吗?

最佳答案

在 D7 中(我怀疑此后它是否已更改),TField 的 SetDataSet 方法已经调用数据集的 Ffields.Add 方法,因此您的显式 ds1.Fields.Add 会第二次添加它,因此会出现重复的字段。

关于Delphi - 在运行时动态添加所有字段在数据集中生成重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21457253/

相关文章:

Delphi TClientDataSet 使用 LIKE 和 foCaseInsensitive 进行过滤

string - 在 Delphi XE4 中使用 AnsiString 之类的数组字节

delphi - Delphi 的 Teamcity 插件

mysql - 在 MySQL 主从表对中插入记录的最佳方式

.net - 即使在 TableAdapter.Update 运行后立即,DataSet.HasChanges 也为 true

Java hdf5 库安装

delphi - Copy 有 ANSI 版本吗?

delphi - 目录名称 '.' 和 '..' 是什么意思以及 faDirectory 是什么意思?

scala - 循环遍历 Map Spark Scala

双显示器中的 Delphi XE Form 和 Source