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를
LE에 중복으로 표시이다이 방법입니다 I 모든 필드를 변수로 데이터 세트에 추가해야합니까?
나는 이미 첫 번째 LE에서 그렇게 말했어. 고마워. – RBA
미안, 내가 "LE : 왜 필드가 두 번 나타 났는지 : [...]"라고 묻는 이유는 "ds1.Fields.Add (iVERField); " 필드의 두 번째 인스턴스를 추가합니다. 당신이 그 뜻이 아니라면, 당신은 무엇을 의미 했습니까 (누군가가 당신에게 더 나은 대답을 줄 것을 요구하고 있습니다)? 그러나 어쨌든, 그 단계를 뺀다. 네, 각 필드에 인스턴스 변수를 추가하고 필요에 따라 필드의 FieldKind를 설정하는 방법입니다. – MartynA
지적 해 주셔서 감사합니다. 주석 처리 된 코드에 따라 첫 번째 및 두 번째 필드가 나타날 때도 분명합니다. 좀 더 명시 적이어야합니다. 동시에 LE1을 추가 했으므로 첫 번째 LE – RBA