Thema: Delphi Lookupfeld zur Laufzeit

Einzelnen Beitrag anzeigen

needatip

Registriert seit: 11. Jan 2004
246 Beiträge
 
Delphi 10.4 Sydney
 
#1

Lookupfeld zur Laufzeit

  Alt 20. Feb 2010, 16:12
Datenbank: SQLServer • Version: 2008 • Zugriff über: ADO
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?
  Mit Zitat antworten Zitat