![]() |
dblookupcombobox
In einer DBlookupcombobox biete ich via AdoQuery die Daten einer SQL-Server Tabelle in der Listsource/DropdownListe (name,vorname) zur Auswahl an. Listfiled ist name;vorname. Die Selektion klappt solange der Name in der Tabelle nur einmal vorkommt. Da der Name "Meier" aber mehrfach vorkommt, werden bei Eingabe von "M", gleich alle "Meier" markiert. In diesem Fall ist eine weitere Selektion z.B. des 2. "Meier" per Tastatur überhaupt nicht möglich. Auch durch Mausklick auf den 2. Meier gibt Query.FieldByName immer den ersten Meier zurück!? Wie und wo kann ich abfragen, welchen Datensatz genau ich per Maus angeklickt habe? Eine genaue Auswahl per Tastatur geht wohl nicht?
|
AW: dblookupcombobox
Liste der Anhänge anzeigen (Anzahl: 1)
keiner ne Idee?
Sieht so aus, als würde das Problem nur bei der Ersten Auswahl auftreten. Also bei klick auf Meier Horst (3.Meier) gibt Query.FieldByName Meier Willi (1.Meier) zurück!? Ab dem zweiten Auswahlversuch scheint scheint die Zuweisung sicher zu klappen. Was mach ich da falsch, fehlt da eine Initialisierung? Ich kann doch nicht immer den Maier Horst zweimal auswählen, weil beim ertsen Versuch immer der Meier Willi erkannt wird? Wie kann ich sicher abfragen, welchen Datensatz genau ich per Maus angeklickt habe? Siehe Anlage |
AW: dblookupcombobox
|
AW: dblookupcombobox
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Bummi,
ja habe ich nochmal eingestellt. Komme aber leider nicht recht weiter!? |
AW: dblookupcombobox
Hat die Tabelle einen PK? Wie ist KeyField gesetzt?
Ich habe das bei mir eben mit einem DevExpress MemData ausprobiert. Weiterhin habe ich ein TDBGRid auf die Form geklatscht und das mit dem Lookup-Dataset verknüpft, damit ich den Datensatzzeiger sehe. Es ist ja schon mal klar, das alle drei Meier selektiert ist, denn das ist nun einmal der selektierte Eintrag. Ich gehe mal davon aus, das das KeyField='Name' ist. Dann ist das nämlich zwingend. Wenn die Lookup-Tabelle einen PK hat, dann sollte in der Original-Tabelle ein FK definiert sein. Dann wäre die Selektion eindeutig. So aber nicht. |
AW: dblookupcombobox
Liste der Anhänge anzeigen (Anzahl: 2)
Je nachdem welches das Keyfield ist wird passend dargestellt.
Sel1='ID', Sel2='Name'. EDIT Furtbichler war schneller ;-( |
AW: dblookupcombobox
Ich glaube, du erwartest von dem Control ein Verhalten, für das es nicht gemacht ist. Du möchtest in der DBLookupCombobox offenbar den aktuellen Datensatz auswählen. Das ist aber nicht das, wofür es gemacht ist (dazu siehe Doku). Das musst du anders lösen.
|
AW: dblookupcombobox
@Uwe Raabe durch das "unsaubere" Verhalten einer DBLookup-Combobox kann sich ein Anfänger IMHO dazu verleiten lassen sich auf die Auswahl des Satzes in der Lookupmenge zu verlassen.
|
AW: dblookupcombobox
Zitat:
|
AW: dblookupcombobox
Hallo Uwe Raabe, genau das hatte ich gehofft, dass ich mit der dblookupcombobox den ausgewählten Satz zurück bekomme. Wie ich dich verstanden habe, geht das wohl damit nicht?
|
AW: dblookupcombobox
Das DBLookup-Control macht alles richtig. Wenn Du als 'KeyField' den Namen auswählst, und dann 'Meier' auswählst (oder 'Me' eintippst), dann wird genau das gemacht, was Du willst. Es wird der Name 'Meier' ausgewählt.
Wenn Du im KeyField allerdings den PK angibst, funktioniert alles. |
AW: dblookupcombobox
@Furtbichler man sollte sich nicht darauf verlassen dass der Satz dort steht wo man es der Anzeige nach vermutzen würde, auch wenn man den PK verwendet, lass beispielsweise mehrere Lookups auf das Dataset zugreifen. IMHO ist ein Zugriff über Keyvalue (bei Verwendung des PK) Pflicht .
|
AW: dblookupcombobox
Hallo Bummi,
das richtige setzen des KeyField ist das Stichwort. Hatte ich ignoriert. Passt jetzt. Danke! |
AW: dblookupcombobox
@Bummi: Hab nicht genau verstanden, was Du meinst, sry. Wenn ich ein TDBGrid zur Kontrolle an das Lookup-Dataset hänge, dann kann ich damit ja den aktuellen Datensatz verschieben. Am LookupCombo ändert sich gar nichts. Sobald ich das aufklappe, positioniert sich das Lookupfeld auf den ersten Datensatz und markiert alle Einträge, für die gilt: ListSource.KeyField=DataSource.DataField.
Und wenn -wie hier- drei DS markiert sind, dann kann ich nicht wissen, wo sich der aktuelle Datensatz befindet. Es handelt sich schließlich um eine Menge, und da kann jeder der Datensätze gerade der aktuelle sein: Genau das zeigt das Combo-Teil ja auch. Nebenbei: Mit dieser Konfiguration kann man mit dem Cursor (Pfeil hoch/runter) nicht durch alle Datensätze durchwandern, eben weil die Einträge nicht eindeutig sind. |
AW: dblookupcombobox
@Furtbichler mir ist klar dass Du Dich nicht auf auf die Satzposition eines Lookupdatasets, auch nach einem Lookup über den PK verlassen würdest. Mit weniger Erfahrung könnte es passieren dass man es tut und nicht berücksichtigt dass gegf. andere Datasets ebenfalls dieses Dataset als Lookupsource verwenden und er Satz dann sonst wo steht.
Ein Beispiel währe Masterdataset mit Lookup über ID auf Adressen und Detaildataset mit 1:n Ansprechpartnern mit ebenfalls verwendeten Lookups auf dasselbe Dataset. |
AW: dblookupcombobox
Stimmt.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:54 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