基于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上显示为重复
LE:为什么字段出现两次:
iVERField.DataSet := ds1; //one
ds1.Fields.Add(iVERField);//two
LE1:这是我将所有字段作为变量添加到数据集的方式吗?
答案 0 :(得分:2)
在D7中(我怀疑它已经改变了),TField的SetDataSet方法已经调用了数据集的Ffields.Add方法,所以你的显式ds1.Fields.Add第二次添加它,因此重复的字段。