Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi DB Combobox nur ItemIndex in DB (https://www.delphipraxis.net/206835-db-combobox-nur-itemindex-db.html)

haentschman 3. Feb 2021 07:27

DB Combobox nur ItemIndex in DB
 
Hallöle...:P

Meine Controls stelle ich irgendwann auf "ohne DB" um. Jetzt haben ich den Fall daß eine Combobox einen "Text Wert" anzeigen soll. In der Datenbank soll aber ein Index gespeichert werden (Enumeration/ItemIndex).

Ich habe 2 Varianten:
1. Normale ComboBox wo ich den ItemIndex aus der Datenmenge manuell setze.
2. DB ComboBox die sich (ItemIndex) selbst setzt? :gruebel:

Gibt es einen Trick den ich noch nicht weiß? :gruebel:

DeddyH 3. Feb 2021 07:46

AW: DB Combobox nur ItemIndex in DB
 
Ich persönlich mache das so, dass ich ID und Textwert abfrage, eine normale Combobox nehme, die ID hart zu TObject caste und das dann per AddObject zu den Items der ComboBox hinzufüge. Umd die gewählte ID zu bekommen, muss ich dann nur das TObject wieder zurück casten.
Delphi-Quellcode:
  cbbBla.Items.AddObject(Data.Text, TObject(Data.ID));

  ...

  ID := Integer(cbbBla.Items.Objects[cbbBla.ItemIndex]);

haentschman 3. Feb 2021 08:00

AW: DB Combobox nur ItemIndex in DB
 
Danke...:P

Quasi Variante 1. Ich hatte auf ein Hintertürchen gehofft, damit ich nicht mischen muß. :cry:

Blup 3. Feb 2021 08:14

AW: DB Combobox nur ItemIndex in DB
 
Es ist keine gute Idee den ItemIndex zu speichern.
Wenn bei einem späteren Update der Softwsre Items hinzukommen oder entfallen, passt der gespeicherte Itemindex nicht mehr.
Der Anwender wundert sich warum seine Software nicht mehr funktioniert, obwohl er nichts geändert hat.
Die Folge sind Hotlinekosten, im schlimmsten Fall für jeden Anwender der das Update installiert.

Deshalb besser für jeden Eintrag der Liste eine ID definieren und die ID des ausgewählten Items speichern.

haentschman 3. Feb 2021 08:28

AW: DB Combobox nur ItemIndex in DB
 
Zitat:

Es ist keine gute Idee den ItemIndex zu speichern.
:P weiß ich... Ich hänge die "Enumeration" an das Item an... Auch wegen der Umsortierung der Items etc.

Für die Frage war das nicht relevant. :zwinker:

himitsu 3. Feb 2021 08:40

AW: DB Combobox nur ItemIndex in DB
 
Naja, den Text zu speichern ist aber auch keine gute Idee,
wegen Lokalisierung und so. :lol:



Entweder man nehme eine LookupComboBox, denn die speichert was Anderes, als man sieht. :zwinker:
Quasi fast sowas wie in #2.
PS, wegen Integer<>TObject braucht man keine Angst zu haben, denn die ListBox/ComboBox kennen intern eh nur Pointer/Integer.

Oder bau dir doch selber?
TDBEdit schnappen, sich dort die paar Zeilen Code rausschnappen, welche für das DB zuständig sind (ist wirklich nicht viel), Dieses dann in einen andere Nicht-DB-Komponente übernehmen und speichern/laden was immer zu willst.
Bzw. die TDBComboBox kopieren/ableiten und dort das Speichern/Laden der Daten entsprechend abändern. (Text zu ItemIndex und umgekehrt)

Uwe Raabe 3. Feb 2021 09:14

AW: DB Combobox nur ItemIndex in DB
 
Du kannst eine normale TDBComboBox nehmen und dort die möglichen Text-Werte in Items ablegen. Dann machst du für das entsprechende DB-Feld zwei Events für OnGetText und OnSetText. Im OnGetText kannst du dann aus dem Sender.AsInteger den Text-Wert ermitteln und zurückgeben, während im OnSetText der umgekehrte Weg programmiert werden muss.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:20 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz