ComboBox-Inhalt abhängig vom gewählten Eintrag der 1. ComboBox
-
Hallo,
ich habe folgendes Problem:Ich habe 2 Pulldown-Menüs (ComboBox)
1. Haendler (CBHaenlder)
2. Autohaus (CBAutohaus)Wenn der Haendler gewählt ist sollen nur noch gewisse Autohäuser ausgewählt werden.
Dies wollte ich mit der folgenden Query-Abfrage machen:void __fastcall Tfrmhwseingabe::CBAutohausEnter(TObject *Sender) { QAutohaus->SQL->Clear(); CBAutohaus->Items->Clear(); AnsiString strAutohaus=' '; QAutohaus->SQL->Add("SELECT dbo.Autohaus.Autohaus_Bezeichnung, dbo.Autohaus.Autohaus_Nr, dbo.Autohaus.Haendler_Nr"); QAutohaus->SQL->Add("FROM dbo.Autohaus INNER JOIN dbo.Autohaus ON dbo.Haendler.Haendler_Nr = dbo.Autohaus.Haendler_Nr"); QAutohaus->SQL->Add("GROUP BY dbo.Autohaus.Autohaus_Bezeichnung, dbo.Autohaus.Autohaus_Nr, dbo.Autohaus.Haendler_Nr"); QAutohaus->Open(); while (!QAutohaus->Eof) { strAutohaus=(QAutohaus->FieldByName("Autohaus_Bezeichnung")->AsString); CBAutohaus->Items->Add(strAutohaus); //Fuegt die Autohaeuser in die ComboBox QAutohaus->Next(); }Tabelle ->Spalten:
Autohaus->Autohaus_Bezeichnung,Autohaus_Nr, Haendler_Nr
Haendler->Haendler_Nr (Und weitere, ich denke hier nicht von Bedeutung)Wieso sagt mir der Builder immer Haendler_Nr ist doppelt deklariert ?
Fehlt hier nicht noch ein HAVING, damit ich mich auf den Haendler beziehen kann ?:
QAutohaus->SQL->Add("HAVING dbo.Autohaus.Haendler_Nr Like CBHaenlder->Text");
-
Reine SQL-Probleme gehören in's Datenbank-Forum hier.
Und wozu das manuelle Befüllen der ComboBox? Benutze eine DBComboBox und verbinde sie mit dem gewünschten Feld der Query.
-
Könntest Du mir bitte sagen,
wie ich das machen kann (Quelltext-mässig) ?Vielen Dank
-
So in etwa (meinte natürlich die LookupComboBox, sorry):
QAutohaus->Open(); DataSource->DataSet = QAutohaus; DBLookupComboBox->KeyField = "Autohaus_Bezeichnung";Kann man natürlich auch zur Entwurfszeit im OI setzen.
-
Hallo,
kannst Du mir denn auch bei der SQL Abfrage sagen, warum die nicht funktioniert ?Vielen Dank
(P.S: Vielleicht kann man diesen Thread ja verschieben).
-
warum machst du eigentlich das?
QAutohaus->SQL->Add("FROM dbo.Autohaus INNER JOIN dbo.Autohaus ON dbo.Haendler.Haendler_Nr = dbo.Autohaus.Haendler_Nr");
du willst hier die Ergebnisse von 2 Tabellen verbinden, nutzt aber nur eine Tabelle...
wenn deine Daten nur in einer Tabelle stehen kannst du folgendes versuchen:
QAutohaus->SQL->Add("SELECT dbo.Autohaus.Autohaus_Bezeichnung, dbo.Autohaus.Autohaus_Nr, dbo.Autohaus.Haendler_Nr"); QAutohaus->SQL->Add("FROM dbo.Autohaus where dbo.Autohaus.Haendler_Nr = :Haendler_Nr"); QAutohaus->ParamByName("Haendler_Nr")->AsString = CBHaenlder->Text;
-
Sorry, hatte einen Fehler drin:
void __fastcall Tfrmhwseingabe::CBAutohausEnter(TObject *Sender) { QAutohaus->SQL->Clear(); CBAutohaus->Items->Clear(); AnsiString strAutohaus=' '; QAutohaus->SQL->Add("SELECT dbo.Autohaus.Autohaus_Bezeichnung, dbo.Autohaus.Autohaus_Nr, dbo.Autohaus.Haendler_Nr"); QAutohaus->SQL->Add("FROM dbo.Haendler INNER JOIN dbo.Autohaus ON dbo.Haendler.Haendler_Nr = dbo.Autohaus.Haendler_Nr"); QAutohaus->SQL->Add("GROUP BY dbo.Autohaus.Autohaus_Bezeichnung, dbo.Autohaus.Autohaus_Nr, dbo.Autohaus.Haendler_Nr"); QAutohaus->Open(); while (!QAutohaus->Eof) { strAutohaus=(QAutohaus->FieldByName("Autohaus_Bezeichnung")->AsString); CBAutohaus->Items->Add(strAutohaus); //Fuegt die Autohaeuser in die ComboBox QAutohaus->Next(); }Und die Frage ob ich hier ein Having benötige ?
-
und wieder meine Frage: warum nutzt du INNER JOIN?
Und die Frage ob ich hier ein Having benötige ?
du kannst auch WHERE nehmen (siehe mein Beispiel)
-
Hallo,
nun habe ich mit Where aber folgendes Problem:
1. ComboBoxvoid __fastcall TForm1::CBHaendlerEnter(TObject *Sender) { QHaendler->SQL->Clear(); CBHaendler->Items->Clear(); AnsiString strHaendler=' '; QHaendler->SQL->Add("SELECT *"); QHaendler->SQL->Add("FROM Haendler"); QHaendler->Open(); while (!QHaendler->Eof) { strHaendler=(QHaendler->FieldByName("Haendler_Nr")->AsString); CBHaendler->Items->Add(strHaendler); //Fuegt die Haendler in die ComboBox QHaendler->Next(); } }Hier kann ich nun die Haendler_Nr auswählen, aber nicht den Namen.
2. ComboBox - Auswahl abhängig von ComboBox 1
void __fastcall TForm1::CBAutohausEnter(TObject *Sender) { QAutohaus->SQL->Clear(); CBAutohaus->Items->Clear(); AnsiString strAutohaus=' '; QAutohaus->SQL->Add("SELECT Autohaus_Bezeichnung, Autohaus_Nr, Haendler_Nr"); QAutohaus->SQL->Add("FROM Autohaus where Autohaus.Haendler_Nr = :Haendler_Nr"); QAutohaus->ParamByName("Haendler_Nr")->AsString = CBHaendler->Text; QAutohaus->Open(); while (!QAutohaus->Eof) { strAutohaus=(QAutohaus->FieldByName("Autohaus_Bezeichnung")->AsString); CBAutohaus->Items->Add(strAutohaus); //Fuegt die Autohaeuser in die ComboBox QAutohaus->Next(); } }Ich möchte aber gerne nicht die Haendler_Nr in der 1. ComboBox sehen, sondern den Namen. Und ich denke hier brauche ich dann ein Join, oder ?
-
dann versuch mal das:
void __fastcall TForm1::CBAutohausEnter(TObject *Sender) { QAutohaus->SQL->Clear(); CBAutohaus->Items->Clear(); AnsiString strAutohaus=' '; QAutohaus->SQL->Add("SELECT dbo.Autohaus.Autohaus_Bezeichnung, dbo.Autohaus.Autohaus_Nr, dbo.Autohaus.Haendler_Nr"); QAutohaus->SQL->Add("FROM dbo.Haendler INNER JOIN dbo.Autohaus ON dbo.Haendler.Haendler_Nr = dbo.Autohaus.Haendler_Nr"); QAutohaus->SQL->Add("WHERE [b]dbo.Haendler.Haendler_Name [/b]= :Haendler_name "); QAutohaus->SQL->Add("GROUP BY dbo.Autohaus.Autohaus_Bezeichnung, dbo.Autohaus.Autohaus_Nr, dbo.Autohaus.Haendler_Nr"); QAutohaus->ParamByName("Haendler_Name")->AsString = CBHaendler->Text; QAutohaus->Open(); while (!QAutohaus->Eof) { strAutohaus=(QAutohaus->FieldByName("Autohaus_Bezeichnung")->AsString); CBAutohaus->Items->Add(strAutohaus); //Fuegt die Autohaeuser in die ComboBox QAutohaus->Next(); } }bei dem dick geschriebenen mußt du allerdings deine Spaltenbezeichnung einsetzen
-

Vielen Dank ! Genauso wollte ich das auch haben.
An der Stelle nochmal ein Danke an "Jansen".