![]() |
Datenbank: Firebird • Version: 2.1 • Zugriff über: TIBDatabase
LookUp feld zur laufzeit erstellen
Hallo Leute,
ich habe ein objekt in welchem ich dynamisch alle komponenten erzeuge die man für den zugriff auf eine Datenbank benötigt. Soweit funktioniert das auch ganz gut, und ich kann die Daten in einem Grid ausgeben. Nun möchte ich in dem DataSet, welches im grid abgebildet wird, mehrere LookUp felder einfügen, so wie man das äußerst easy zur Entwurfszeit machen kann. Aktuell bin ich soweit:
Delphi-Quellcode:
nur leider bringt er mir den fehler das er "INFOID" nicht finden kann.
f := TStringField.Create(DSetDaten);
with f do begin Name := DSetDaten.Name + FieldName; Size := 50; DisplayLabel := 'FieldNachschlagen'; DisplayWidth := 21; FieldName := 'FieldNachschlagen'; FieldKind := fkLookup; Lookup:=True; LookupDataSet := DSetInfos; KeyFields := 'INFOID'; LookupKeyFields := 'ID'; LookupResultField := 'Info'; DataSet := DSetDaten; Index := 2; end; Woran könnte das liegen, denn dieses Feld existiert, und zur Entwurfszeit in der komponente konfiguriert funktioniert es auch. gibt es evtl. einen einfacheren weg ein lookup feld in ein dataset zu bekommen? |
AW: LookUp feld zur laufzeit erstellen
Auf den ersten Blick fallen zwei Dinge auf, die allerdings nicht zwingend dein Problem beheben:
|
AW: LookUp feld zur laufzeit erstellen
danke für den hinweis, ergibt sinn :oops:
habe nun beides geändert wie erwartet behebt es das Problem leider nicht. |
AW: LookUp feld zur laufzeit erstellen
Zitat:
|
AW: LookUp feld zur laufzeit erstellen
In welcher Datenbank-Tabelle gibt es das Feld 'INFOID' in DSetDaten(KeyFields) oder in DSetInfos( LookupKeyFields)?
|
AW: LookUp feld zur laufzeit erstellen
|
AW: LookUp feld zur laufzeit erstellen
INFOID befindet sich in der DSetDaten und beinhaltet die ID welche in DSetInfos als PK hinterlegt ist.
Rein von dieser Konfiguration her sollte das korrekt sein, da ich dies 1:1 wie zur Entwurfszeit in der Komponente gemacht habe. Die Komponente zur Entwurfszeit dient dabei nur zu meiner Orientierung. Danke für den Link. Hab mir das angeschaut und umgesetzt. Leider will er das FieldDefs.Add nicht schlucken. |
AW: LookUp feld zur laufzeit erstellen
Zitat:
|
AW: LookUp feld zur laufzeit erstellen
Zitat:
|
AW: LookUp feld zur laufzeit erstellen
ich hab das fehlende Bindeglied gefunden :dancer:
Man muss die Tabelle erst persistent machen, danach kann man sein LookUpfield auch zur Laufzeit erzeugen. dies macht man für dieses Beispiel wie folgt:
Delphi-Quellcode:
danke für eure Anregungen Lösungsansätze :)procedure TFMain.CreatePersistentFields; var i: Integer; begin DSetDaten.FieldDefs.Update; DSetDaten.Close; for I := 0 to DSetDaten.FieldDefs.Count - 1 do if DSetDaten.FindField(DSetDaten.FieldDefs[i].Name) = Nil then DSetDaten.FieldDefs.Items[i].CreateField(DSetDaten); end; procedure TFMain.SetLookUp; begin CreatePersistentFields; with TStringField.Create(DSetDaten) do begin Name := 'FieldNachschlagen'; FieldName := 'FieldNachschlagen'; DisplayLabel := 'Info'; FieldKind := fkLookup; DataSet := DSetDaten; LookupDataSet := DSetInfos; KeyFields := 'INFOID'; LookupKeyFields := 'ID'; LookupResultField := 'Info'; end; DSetDaten.Open; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:11 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 by Thomas Breitkreuz