2014-01-30 6 views
0

How to add a field programatically to a TAdoTable in Delphi을 기반으로 모든 필드를 FibPlus 데이터 세트에 동적으로 추가하려고합니다 (모든 TDataSet 자손이 될 수 있음). 각 필드는 변수로 선언됩니다. 선언 Delphi - 동적으로 모든 필드를 추가하여 데이터 집합에 중복 생성

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 이벤트에 일부

, 나는 모든 필드, 필요한 속성을 설정하고 내 데이터 세트에 동적으로 그들 모두를 추가를 만들 수 있습니다. 필드가 두 번 표시하는 이유 :

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

LE1 :

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에 중복으로 표시이다이 방법입니다 I 모든 필드를 변수로 데이터 세트에 추가해야합니까?

답변

0

D7에서는 TField의 SetDataSet 메서드가 이미 데이터 집합의 Ffields.Add 메서드를 호출하므로 명시 적 ds1.Fields.Add가 두 번째로 추가되므로 중복 된 필드가 추가됩니다.

+0

나는 이미 첫 번째 LE에서 그렇게 말했어. 고마워. – RBA

+0

미안, 내가 "LE : 왜 필드가 두 번 나타 났는지 : [...]"라고 묻는 이유는 "ds1.Fields.Add (iVERField); " 필드의 두 번째 인스턴스를 추가합니다. 당신이 그 뜻이 아니라면, 당신은 무엇을 의미 했습니까 (누군가가 당신에게 더 나은 대답을 줄 것을 요구하고 있습니다)? 그러나 어쨌든, 그 단계를 뺀다. 네, 각 필드에 인스턴스 변수를 추가하고 필요에 따라 필드의 FieldKind를 설정하는 방법입니다. – MartynA

+0

지적 해 주셔서 감사합니다. 주석 처리 된 코드에 따라 첫 번째 및 두 번째 필드가 나타날 때도 분명합니다. 좀 더 명시 적이어야합니다. 동시에 LE1을 추가 했으므로 첫 번째 LE – RBA

관련 문제