Hallo,
ich erstelle zusätzlich zu meinen bestehenden Feldern ein Lookup-Feld zur Laufzeit.
Dies mache ich im AfterOpen Event des Datasets, da ich überprüfe ob das Feld bereits existiert.
Dazu muss ich aber erst das Dataset schließen und dann wieder öffnen, so daß dann wieder das AfterOpen Event aufgerufen würde.
Delphi-Quellcode:
procedure DSetBieterAfterOpen(DataSet: TDataSet);
var
i: integer;
f: TField;
begin
// Feld Flagge für Land hinzufügen
with DSetBieter do
if FindField('Flagge') = nil then
begin
FieldDefList.Update;
Close; // hier muss ich das Dataset schließen, damit ich ein neues Feld hinzufügen kann.
for i := 0 to FieldDefList.Count - 1 do
if FindField(FieldDefList[i].Name) = nil then
FieldDefList.FieldDefs[i].CreateField(DSetBieter);
f := TStringField.Create(DSetBieter);
f.Size := 10;
f.Name := 'Flagge';
f.FieldName := 'Flagge';
f.DisplayLabel := 'Flagge';
f.FieldKind := fkLookUp;
f.DataSet := DSetBieter;
f.LookupDataSet := DSetLaender;
f.KeyFields := 'LAND';
f.LookupKeyFields := 'ID';
f.LookupResultField := 'ID';
f.LookupCache := true;
end;
end;
Im BeforOpen Event kann ich ja das nicht machen, da ich dann noch nicht weiß ob die übrigen Felder vorhanden sind.
Wie kann man das elegant lösen?