SQl Filter in einer DBLookupComboBox



  • Hallo, ich habe ein Problem mit einer SQL Abfrage.
    Und zwar habe ich eine Datenbank in der es eine Spalte "Hersteller" gibt. Diese Spalte lasse ich mit einer DBLookupComboBox darstellen. Da bei den ganzen Datensätzen ein Hersteller doppelt oder noch öfter vorkommt möchte ich das in meiner DBLookupComboBox der Name aber nur einmal vorkommt und nicht mehrfach. Wie kann ich das Filtern



  • Wenn es um SQL geht:
    Entweder DISTINCT oder GROUP BY verwenden.

    SELECT DISTINCT
    Hersteller
    FROM ...
    

    oder

    SELECT
    Hersteller
    FROM...
    GROUP BY Hersteller
    

    Beides führt zum gewünschten Ergebnis.



  • Soweit hat alles funktioniert. Nur ich habe immernoch ein kleines Problem. Ich möchte in meinem Projekt 2 DBLookupComboBox haben. Die eine heißt wie gesagt Hersteller und die 2. Kunde.
    Erstelle ich das Programm und den SQL Filter nur mit einer funktioniert alles wunderbar aber nehme ich ein 2. dazu und benutze folgenden Quelltext, dann wird die Gruppierung nicht mehr richtig gemacht

    Query1->Close();
    Query1->SQL->Clear();
    Query1->SQL->Add("Select Hersteller, Kunde from Tabelle1 where Hersteller like ... group by Hersteller, Kunde");
    Query1->ExecSQL();
    Query1->Open();
    

    Ich habe mir erst gedacht das es vielleicht an "group by Herstelle, Kunde" liegen könnte, da ich 2 Gruppierungen mache, aber wenn ich nur Hersteller gruppiere dann funktioniert die Anwendung nicht.



  • Vorab, das ExecSQL() ist da fehl am Platz. Schau mal in der Hilfe, wofür das da ist.

    Und was heißt funktioniert nicht?



  • Die Datensätze werden in der DBLookupComboBox nicht mehr gruppiert, sondern ganz normal auch doppelte Datensätze angezeigt. Was muss ich denn anstelle von ExecSQL verwenden?



  • Was macht denn ein ExecSQL() und was macht ein Open()?

    Und natürlich hast Du doppelte Datensätze drin, wenn Du nach 2 Kriterien gruppierst. Was hast Du erwartet?



  • Stimmt. Aber ich kenn mich mit SQl nicht so sehr aus. Was mache ich denn damit das ganze auch so funktioniert wie ich das möchte?



  • SQL lernen. 😉
    Verwende jeweils eine eigen Query.



  • Wenn ich jeweils eine eigene Query verwende, sieht dann mein Quelltext so aus?

    Query1->Close();
    Query1->SQL->Clear();
    Query1->SQL->Add("Select Hersteller from Tabelle1 where Hersteller like ... group by Hersteller");
    Query1->ExecSQL();
    Query1->Open(); 
    
    Query2->Close();
    Query2->SQL->Clear();
    Query2->SQL->Add("Select Kunde from Tabelle1 where Hersteller like ... group by Kunde");
    Query2->ExecSQL();
    Query2->Open();
    

    Das dürfte nämlich nicht funktionieren, da ich jeweils und nicht beide Suchkriterien auswerte.

    Bitte noch ein letztes mal um Hilfe!!!



  • Hallo,

    Bitte lass das ExexSQL hier weg. Open reicht völlig. ExecSQL wird nur bei SQL-Befehlen verwendet, welche die Datenbank ändern, für Select nimmt man Open. Aber nie beide zusammen.
    Du schreibst hier "dürfte nicht funktionieren". Was soll das nun bedeuten? Geht es oder geht es nicht und wenn nicht, welcher Fehler tritt auf?


Anmelden zum Antworten