Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Auswahl von QueryItems mit Komponente (DBComboBox) (https://www.delphipraxis.net/197114-auswahl-von-queryitems-mit-komponente-dbcombobox.html)

Ykcim 18. Jul 2018 13:29

Datenbank: MySQL • Version: 5 • Zugriff über: UniDac

Auswahl von QueryItems mit Komponente (DBComboBox)
 
Hallo Zusammen,

ich habe in einer Query alle Mitarbeiternamen und ID's. Jetzt möchte ich mit einer DB-Komponente, die ähnlich einer DBComboBox funktioniert die Mitarbeiter auswählen.

Kann mir jemand sagen, welche Komponente ich dafür benötige? DBComboBox und DBLookupComboBox sind dafür glaube ich nicht richtig... oder ich nur nicht in der Lage, es richtig zu machen...

Vielen Dank
Patrick

mkinzler 18. Jul 2018 13:32

AW: Auswahl von QueryItems mit Komponente (DBComboBox)
 
Grundsätzlich mal das Zweitere. Aber ohne zu Wissen, was Du genau willst ist das schwer zu sagen.

Ykcim 18. Jul 2018 13:37

AW: Auswahl von QueryItems mit Komponente (DBComboBox)
 
Ich dachte, ich hätte es gesagt...

Wenn ich in der Komponente einen Mitarbeiter ausgewählt habe, dann möchte ich, dass er in der Query auch ausgewählt ist. Wenn ich dann in der Query auf das Feld
Delphi-Quellcode:
Query.FieldByName('TelefonNr').AsString
zugreife, dass dann die Telefonnummer von dem in der Komponente ausgewählten Mitarbeiter ausgegeben wird...

Ist das Problem jetzt nachvollziehbarer geworden?

Vielen Dank
Patrick

Uwe Raabe 18. Jul 2018 13:45

AW: Auswahl von QueryItems mit Komponente (DBComboBox)
 
Zitat:

Zitat von Ykcim (Beitrag 1407684)
Ist das Problem jetzt nachvollziehbarer geworden?

Nicht wirklich.

Zitat:

Wenn ich in der Komponente einen Mitarbeiter ausgewählt habe, dann möchte ich, dass er in der Query auch ausgewählt ist.
Was für eine Query? Wie lautet der SQL-Text? Wie ist die Datenbank aufgebaut und welche Struktur haben die Tabellen. Wie ist die Komponente mit der Query verknüpft bzw. wie soll sie es sein?

Du setzt zu viel voraus, was für dich vielleicht selbstverständlich ist, weil du es aus deinem Kontext her siehst. Wir haben den nicht.

Ykcim 18. Jul 2018 14:20

AW: Auswahl von QueryItems mit Komponente (DBComboBox)
 
Ok, sorry!

Ich versuche es genauer zu beschreiben.

MySQL mit Tabelle aller Benutzer
Query (TUniQuery) mit SQL Statement:
Delphi-Quellcode:
FQuery_Vertreter.SQL.Clear;
   FQuery_Vertreter.SQL.Add('select UserID, concat(vorname, '+QuotedStr(' ')+', name) as Name from benutzer '+
                            'where employed=1 ' );
   if FQuery_UserRechte.FieldByName('intern').AsInteger=0 then begin
      FQuery_Vertreter.SQL.Add('and abteilungsid= :abteilung ');
      FQuery_Vertreter.ParamByName('abteilung').AsInteger:=FQuery_Benutzer.FieldByName('abteilungsid').AsInteger;
   end;
   FQuery_Vertreter.SQL.Add('order by Name ');
   FQuery_Vertreter.Open;
Ergebnis: UserID, Name aller User aus der jeweiligen Abteilung
1; Klaus Müller
2; Max Muster
3; Tanja Mann
...

Mich interessiert die UserID.

Denn in der DB-Komponente, die ich suche, sollen alle User aus der Query mit Namen aufgelistet sein:
Klaus Müller
Max Muster
Tanja Mann
...

Abweichend von oben hätte ich aber nur die Namen und nicht die ID angezeigt.

Ziel des Ganzen ist, dass ich Max Muster in der Komponente auswähle und dann die Query automatisch zu dem Datensatz springt. Denn dann habe ich ja auch die UserID, mit der ich weiterarbeite.
Es gibt übrigens mehrere Stellen im Programm, wo ich den User auswählen kann und wenn ich das mit einer datensensitiven Komponente mache, dann zeigen alle immer dasselbe an...

Habe ich den Kontext jetzt nachvollziehbarer darstellen können?

Vielen Dank
Patrick

Jumpy 18. Jul 2018 14:45

AW: Auswahl von QueryItems mit Komponente (DBComboBox)
 
Ich glaube da brauchst du zwei Queries, oder?

Mit der ersten füllst du eine DB(Lookup)Combobox, Feldwert ist die ID Anzeigewert ist der Name.
Im OnChange der Combobox springst du in der zweiten Query, die alle Daten der User enthält, zu dem Datensatz mit der entsprechenden ID.

Du kannst mMn nicht mit nur einer Query arbeiten und die Combobox zur Datensatznavigation benutzen.

Frickler 18. Jul 2018 14:52

AW: Auswahl von QueryItems mit Komponente (DBComboBox)
 
Wenn die UserID eine Zahl ist, geht auch ne normale ComboBox:
Schleife über alle Datensätze der Query und mit
Delphi-Quellcode:
cbox.AddItem(username, TObject(userID))
die einzelnen User hinzufügen.

Wenn ein Eintrag ausgwählt wurde, kann man dann mit
Delphi-Quellcode:
integer(cbox.Items.Objects[cbox.ItemIndex])
die userID zurück bekommen.

Uwe Raabe 18. Jul 2018 15:16

AW: Auswahl von QueryItems mit Komponente (DBComboBox)
 
Zitat:

Zitat von Ykcim (Beitrag 1407694)
Ziel des Ganzen ist, dass ich Max Muster in der Komponente auswähle und dann die Query automatisch zu dem Datensatz springt. Denn dann habe ich ja auch die UserID, mit der ich weiterarbeite.

Ich denke, so könnte es gehen:

Platziere eine TDBLookupComboBox auf dem Form.
Ich vermute, du hast bereits eine DataSource mit deiner Query verlinkt. Setze das ListSource-Property der TDBLookupComboBox auf diese DataSource.
Setze KeyField auf UserID und ListField auf Name.

Damit die Combobox nach dem Öffnen der Query auch den richtigen Eintrag anzeigt, fügst du folgenden Code in das AfterOpen Event der Query ein:

Delphi-Quellcode:
  DBLookupComboBox1.KeyValue := FQuery_Vertreter.FieldByName('UserID').Value; // oder wie auch immer die DBLookupComboBox heißt

Ykcim 18. Jul 2018 17:07

AW: Auswahl von QueryItems mit Komponente (DBComboBox)
 
Hallo Zusammen,

vielen Dank für die Antworten. Ich habe es mit einer TDBLUCombo (TMS-Komponente) gelöst. Ich arbeite viel mit den TMS-Komponenten und einfach solange probiert, bis ich eine passende gefunden hatte... Sonst hätte ich es doch versucht mit der TDBLookupComboBox Komponente das zu lösen, aber die finde ich recht schwierig...

Delphi-Quellcode:
   Combo_Start_Vertreter.DataSource:=MySQL.DS_Vertreter;
   Combo_Start_Vertreter.DataField:='Name';
   Combo_Start_Vertreter.DataLookup:=true;
   Combo_Start_Vertreter.LookUpMode:=lmGoto;
Mit diesen Einstellungen macht sie genau das, was ich haben wollte. Und da ich davon mehrere habe, aber alle am gleichen DataSource hängen, zeigen immer alle das gleiche an...

Bei dieser Lösung fand ich es charmant, dass ich kein Event benötige und die Datensätze nicht von Hand auswählen muss...

Vielen Dank für die Unterstützung

Patrick

p80286 18. Jul 2018 19:43

AW: Auswahl von QueryItems mit Komponente (DBComboBox)
 
Zitat:

Zitat von Frickler (Beitrag 1407699)
Wenn die UserID eine Zahl ist, geht auch ne normale ComboBox:
Schleife über alle Datensätze der Query und mit
Delphi-Quellcode:
cbox.AddItem(username, TObject(userID))
die einzelnen User hinzufügen.

Wenn ein Eintrag ausgwählt wurde, kann man dann mit
Delphi-Quellcode:
integer(cbox.Items.Objects[cbox.ItemIndex])
die userID zurück bekommen.

Was aber nur funktioniert, wenn der Index der Checkbox der UserId der Datenbank entspricht.

Gruß
K-H


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:22 Uhr.
Seite 1 von 2  1 2      

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