AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Auswahl von QueryItems mit Komponente (DBComboBox)

Auswahl von QueryItems mit Komponente (DBComboBox)

Ein Thema von Ykcim · begonnen am 18. Jul 2018 · letzter Beitrag vom 19. Jul 2018
Antwort Antwort
Seite 1 von 2  1 2   
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
579 Beiträge
 
Delphi XE5 Professional
 
#1

Auswahl von QueryItems mit Komponente (DBComboBox)

  Alt 18. Jul 2018, 14:29
Datenbank: MySQL • Version: 5 • Zugriff über: UniDac
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
Patrick
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
38.971 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#2

AW: Auswahl von QueryItems mit Komponente (DBComboBox)

  Alt 18. Jul 2018, 14:32
Grundsätzlich mal das Zweitere. Aber ohne zu Wissen, was Du genau willst ist das schwer zu sagen.
Markus Kinzler
  Mit Zitat antworten Zitat
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
579 Beiträge
 
Delphi XE5 Professional
 
#3

AW: Auswahl von QueryItems mit Komponente (DBComboBox)

  Alt 18. Jul 2018, 14:37
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 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
Patrick
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
6.338 Beiträge
 
Delphi 10.2 Tokyo Architect
 
#4

AW: Auswahl von QueryItems mit Komponente (DBComboBox)

  Alt 18. Jul 2018, 14:45
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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
579 Beiträge
 
Delphi XE5 Professional
 
#5

AW: Auswahl von QueryItems mit Komponente (DBComboBox)

  Alt 18. Jul 2018, 15:20
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
Patrick
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.503 Beiträge
 
Delphi 6 Enterprise
 
#6

AW: Auswahl von QueryItems mit Komponente (DBComboBox)

  Alt 18. Jul 2018, 15:45
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.
Ralph
  Mit Zitat antworten Zitat
Frickler

Registriert seit: 6. Mär 2007
Ort: Osnabrück
150 Beiträge
 
Delphi XE6 Enterprise
 
#7

AW: Auswahl von QueryItems mit Komponente (DBComboBox)

  Alt 18. Jul 2018, 15:52
Wenn die UserID eine Zahl ist, geht auch ne normale ComboBox:
Schleife über alle Datensätze der Query und mit
cbox.AddItem(username, TObject(userID)) die einzelnen User hinzufügen.

Wenn ein Eintrag ausgwählt wurde, kann man dann mit
integer(cbox.Items.Objects[cbox.ItemIndex]) die userID zurück bekommen.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
6.338 Beiträge
 
Delphi 10.2 Tokyo Architect
 
#8

AW: Auswahl von QueryItems mit Komponente (DBComboBox)

  Alt 18. Jul 2018, 16:16
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:

  DBLookupComboBox1.KeyValue := FQuery_Vertreter.FieldByName('UserID').Value; // oder wie auch immer die DBLookupComboBox heißt
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
579 Beiträge
 
Delphi XE5 Professional
 
#9

AW: Auswahl von QueryItems mit Komponente (DBComboBox)

  Alt 18. Jul 2018, 18:07
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
Patrick

Geändert von Ykcim (18. Jul 2018 um 18:10 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286
Online

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.138 Beiträge
 
Delphi 7 Personal
 
#10

AW: Auswahl von QueryItems mit Komponente (DBComboBox)

  Alt 18. Jul 2018, 20:43
Wenn die UserID eine Zahl ist, geht auch ne normale ComboBox:
Schleife über alle Datensätze der Query und mit
cbox.AddItem(username, TObject(userID)) die einzelnen User hinzufügen.

Wenn ein Eintrag ausgwählt wurde, kann man dann mit
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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:37 Uhr.
Powered by vBulletin® Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2018 by Daniel R. Wolf