Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   TDBLookupComboBox... items (https://www.delphipraxis.net/183835-tdblookupcombobox-items.html)

JRichmann 7. Feb 2015 19:51

TDBLookupComboBox... items
 
Hallo zusammen,

ich habe eine vermutlich sehr einfache Frage:

Ich habe eine TDBLookupComboBox welche derzeit ganz einfach gefüllt wird.

"Select id, Name from Tabelle"

In der Tabelle sind (als Beispiel) 3 Einträge

id: Name
1: rot
2: grün
3: gelb

Der User kann einen der 3 Einträge wählen.


mein Problem / Frage ist nun folgende:

In dem Datensatz in welchem die TDBLookupComboBox verwendet wird gibt es ein weiteres Feld.
Anhand von diesem Feld wird bestimmt welche der der 3 Einträge zu Auswhal zur Verfügung stehen.

Anders formuliert: Das Feld besagt, das der User nicht eins der 3 Items wählen kann, sondern nur 2 vorgeschalgen werden dürfen.

Wie kann man das machen ?

In UI ist es so, dass der User zunächst das Feld füllt, welches bestimmt was er wählen darf (im gleichen Record).
Dann klickt er auf die TDBLookupComboBox...

...und jetzt muss die TDBLookupComboBox gefiltert werden, da nicht mehr alle Einträge erlaubt sind.

Wie kann man so etwas machen ?


Grüße und Danke...


...Jörg

mkinzler 7. Feb 2015 20:07

AW: TDBLookupComboBox... items
 
Diese Bedingung mit in das select-Statement mit aufnehmen.

Perlsau 7. Feb 2015 21:21

AW: TDBLookupComboBox... items
 
@JRichmann:

Wenn ich dich richtig verstanden habe, möchtest irgendwie in der DB speichern, welche Einträge deiner Subtabelle für jeden Eintrag in der Haupttabelle zur Auswahl stehen dürfen. Um das zu erreichen, gibt es meiner Erfahrung nach zwei Wege:

1. CSV-String in Spalte
Du könntest in einer zusätzlichen Spalte deiner Haupttabelle angeben, welche Einträge verfügbar sind. Der String sähe dann z.B. so aus: '1;3'

2. Du legst eine 1:1-Tabelle an
In dieser Verknüpfungstabelle speicherst die Id des Haupttabellen-Records und die Id der Farbentabelle. Dort steht dann z.B.:

Id_MainId_Farbe
11
13

Im zweiten Fall würde es sich anbieten, ein View (Sicht, vordefiniertes Select mit Join) in der DB zu hinterlegen, so daß du dieses View ganz leicht in mit einer TDBLookupComboBox darstellen kannst. Ich selbst verwende vorwiegend die zweite Lösung und biete dem Benutzer, der die verfügbaren Subeinträge (hier: Farben) auswählen können soll, eine TCheckListBox an, mit der er die 1:1-Tabelle bearbeiten kann. Alternativ legst du ein Lookup-Feld in der TQuery an, die deine 1:1-Tabelle enthält. Beim Scrollen der Haupttabelle (AfterScroll) setzt du dann den Filter für deine 1:1-Tabelle und gut ist.

Sir Rufo 7. Feb 2015 21:27

AW: TDBLookupComboBox... items
 
@Perlsau

Ich glaube den TE so zu verstanden haben, dass er weiß welche Daten und wie die zusammengehören. Es fehlt ihm bei "Wie sage ich das jetzt der ComboBox" :)

Perlsau 7. Feb 2015 21:35

AW: TDBLookupComboBox... items
 
Aber genau das erkläre ich ihm doch!

Wenn er alle Einträge der Farben-Tabelle in der ComboBox haben wollte, wär's einfach. Aber genau das will er ja offenbar nicht. Er will, soweit ich ihn verstanden habe, für jeden Eintrag in der Haupttabelle festlegen, welche Farben überhaupt möglich sind. Bei drei Farben können also 1 bis drei Einträge notwendig sein, um festzulegen, welche Farbe für den jeweiligen Record der Haupttabelle überhaupt erlaubt ist. Mit der ComboBox will er am Ende ja nur einen Eintrag auswählen können, aber eben nicht aus allen verfügbaren, sondern nur aus allen erlaubten Farben. Wie würdest du das lösen?

Und weil ich dich grad "an der Strippe" habe: Wie ging das nochmal mit der Tabellendarstellung im BBCode? In der Hilfe steht nur, wie man eine Tabelle beginnt und beendet, nicht jedoch, wie man gleich breite Spalten festlegt ...

Sir Rufo 7. Feb 2015 21:41

AW: TDBLookupComboBox... items
 
Er schreibt ja, dass er da ein Feld hat, an dem er das festmachen kann welche Einträge in die Combobox müssen, also impliziere ich mal auf der Datenseite ist er fertig. Wie Markus gesagt hat, er muss diese Bedingung in den Select für die ComboBox-Daten aufnehmen und natürlich noch einen Refresh.

Bzgl. der Tabelle:

Einfach diesen Beitrag hier zitieren, dann siehst du den Code ;)
Id_MainId_Farbe
11
13

Perlsau 7. Feb 2015 21:53

AW: TDBLookupComboBox... items
 
Naja, ich weiß nicht, was in diesem Feld der Haupttabelle, das die erlaubten Einträge beinhaltet, genau steht, denn dieses Feld hat er nicht näher umschrieben. Doch davon ist die Lösung eigentlich schon abhängig. Stehen da Ziffern (z.B. 1;3), Farben (Rot;Blau), Kürzel (R;B) oder was kryptisches? Wenn er ins Select der Combobox aufnehmen will, welche Farben erlaubt sind, benötigt er den PK der gewünschen Farbeneinträge. Mir ist nicht so recht klar, was du hier kritisierst :?:

Weil mir ähnliche Problemstellungen schon öfters begegnet sind, habe ich eine aus meiner Sicht grundsätzliche Lösung gepostet. Was ist daran auszusetzen?

Danke für die BBCode-Tabellen-Nachhilfe, habs für spätere Verwendung gesichert :thumb:

Uwe Raabe 7. Feb 2015 22:09

AW: TDBLookupComboBox... items
 
Zitat:

Zitat von Sir Rufo (Beitrag 1289179)
Wie Uwe gesagt hat

Hat Markus einen zweiten Vornamen?

Sir Rufo 7. Feb 2015 22:56

AW: TDBLookupComboBox... items
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1289182)
Zitat:

Zitat von Sir Rufo (Beitrag 1289179)
Wie Uwe gesagt hat

Hat Markus einen zweiten Vornamen?

Ihr seid auch nicht irgendwie verwandt? - Scheint wohl ein Fehler in der Matrix zu sein :stupid:


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:35 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