![]() |
Datenbank: SQLServer • Version: 2008 • Zugriff über: ADO
Lookupfeld zur Laufzeit
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:
Im BeforOpen Event kann ich ja das nicht machen, da ich dann noch nicht weiß ob die übrigen Felder vorhanden sind.
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; Wie kann man das elegant lösen? |
Re: Lookupfeld zur Laufzeit
nimm doch QueryPerformanceCounter/QueryPerformanceFrequency und mache ne Funktion für das Ausführen des Querys. Dann sagst du dem Programm immer da, wo du die Laufzeit gerne hättest, dass es diese Funktion nehmen soll und lass Windows/Delphi die Laufzeit berechnen. Ist meiner Meinung nach einfacher.
Bernhard |
Re: Lookupfeld zur Laufzeit
Was soll denn das mit der Performance?
Ich möchte doch nur, daß das AfterOpent Event nicht nochmal aufgerufen wird. |
Re: Lookupfeld zur Laufzeit
![]() Bernhard |
Re: Lookupfeld zur Laufzeit
Ok, aber was hat das mit meiner Frage zu tun ?????
|
Re: Lookupfeld zur Laufzeit
Wie wäre es mit einer Bool' schen Variablen? Wenn Du das Feld einfügst, setzt Du diese auf true und wertest sie am Prozeduranfang aus. Ist sie true, wird sie nur auf false gesetzt, ansonsten Dein jetziger Code ausgeführt. Falls das jetzt zu kompliziert ausgedrückt war:
Delphi-Quellcode:
procedure ...;
begin if ReOpened then //Variable (oder privates Feld) auswerten ReOpened := false else begin //Dein jetziger Code ReOpened := true; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:52 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz