首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Delphi -在运行时动态添加所有字段在数据集中生成副本

Delphi -在运行时动态添加所有字段在数据集中生成副本
EN

Stack Overflow用户
提问于 2014-01-30 20:59:15
回答 1查看 9.6K关注 0票数 2

基于How to add a field programatically to a TAdoTable in Delphi,我尝试将所有字段动态添加到一个FibPlus数据集(可以是任何TDataSet子集)。每个字段都声明为一个变量。声明部分

代码语言:javascript
复制
  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事件上,我创建了所有字段,设置了所需的属性,并动态地将它们全部添加到我的数据集中。

代码语言:javascript
复制
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:为什么字段出现两次:

代码语言:javascript
复制
 iVERField.DataSet := ds1; //one 
 ds1.Fields.Add(iVERField);//two

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-30 22:13:46

在D7中(我怀疑它后来有没有改变),TField的SetDataSet方法已经调用了dataset的Ffields.Add方法,所以显式的ds1.Fields.Add第二次添加了它,因此出现了重复的字段。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21457253

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档