Datensätze aus 2 verschiedenen TAbellen sammeln und in einem DBGrid anzeigen



  • Hallo ihr Süßen 🙂

    Ich habe ein eigentlich kleines Prob, weiß aber nich wie ichs lösen kann:

    Und zwar möchte ich Daten aus 2 verschiedenen Tabellen abfragen und in einem DBGrid anzeigen:

    GEht das?
    Wenn ja wie?
    Das funkt nich:

    TQuery *QSpiele;
    QSpiele = new TQuery (Application);
    TDataSource *DSSpiele;
    DSSpiele = new TDataSource (Application);
    
    DSSpiele->DataSet = QSpiele;
    QSpiele->DatabaseName = "spiel";
    
    QSpiele->Close();
    QSpiele->SQL->Clear();
    QSpiele->SQL->Add("select Wert1,Wert2 from Tabelle1");
    QSpiele->SQL->Add("select Wert3 from Tabelle2");
    QSpiele->Open();
    

    da funktioniert schon das abfragen nicht, wie mach ich das richtig? Und wie kann ichs dann anzeigen im DBGrid??

    Ich danke euch schonmal... 🙄



  • Ein solches Statement kann z.B. so aussehen:

    SELECT
    t1.feld1,
    t1.feld2,
    t1.feld3,
    t2.feld1,
    t2,feld2,
    t2.feld3
    FROM Tabelle1 t1, Tabelle2 t2
    WHERE (t1.feld1 = t2.feld1)
    

    Natürlich kann man auch explizite JOINs verwenden.

    Das ist aber alles Standard-SQL und wird auch in der BCB-Hilfe sehr anschaulich erklärt (unter Hilfe->C++Builder-Tools, Local SQL).



  • Ok das hab ich jetzt....aber eins hab ich auch in Hilfe nicht gefunden, und zwar Aggregatfunktion max!

    Normal funktioniert sie, aber ich brauch es ein bisschen anders..und zwar:

    Ich möchte in einer Message den Namen ausgeben der bei Wert1 den höchsten wert hat!

    ICh bin soweit gekommen:

    QCreate->SQL->Add("select max(wert1)as Punkte from Tabelle");
    

    nur da bekomm ich ja den name noch nich raus:

    anzeige wollte ich so machen:

    ShowMessage("Erster ist " + QCreate->FieldByName("Name")->AsString + " !");
    

    vielleicht kann mir noch jemand helfen!



  • versuch mal:

    QCreate->SQL->Add("select name from Tabelle where max(wert1)");
    


  • Aggregatfunktion in Where-Klausel nicht möglich, geht also nicht @ Linnea 😞

    wie könnte es denn noch gehen....



  • Vielleicht so?

    QCreate->SQL->Add("select name, max(wert1)as Punkte from Tabelle group by name");
    

    Gruß,

    Alexander



  • Alexander Kempf schrieb:

    Vielleicht so?

    QCreate->SQL->Add("select name, max(wert1)as Punkte from Tabelle group by name");
    

    Gruß,

    Alexander

    ja da bringt er keinen Fehler, aber er zeigt mir statt dem mit den meisten, den mit den wenigsten Punkten an!

    und:

    QCreate->SQL->Add("select name, max(wert1)as Punkte from Tabelle group by name DESC");
    

    geht wieder nicht, da bringt er fehler!



  • ok, andere Variante (ungetestet):

    QQuery1->SQL->Add("select name from Tabelle where wert1 = punkte in");
    QQuery1->SQL->Add("(select max(wert1) as punkte from tabelle");
    


  • Nein funktioniert auch nicht....immer Fehler! 😞

    Aber wenigstens liegt es nicht an meiner blödheit...

    Weitere vorschläge??



  • Probier doch mal das:

    select name from tabelle where wert1 = (select max(wert1) from tabelle)
    

    hatte ähnliches Problem!



  • Dann so

    QCreate->SQL->Add("select name, max(wert1)as Punkte from Tabelle group by name order by Punkte desc");
    

    ... und vielleicht mal nach einem SQL-Tutorial suchen?

    Gruß,

    Alexander



  • @ 5er1al: danke das funktioniert!!! =)))

    @Alexander: ich hab mir 2 tutorials grad angeschaut...und nirgend was zu den etwas erweiterten max funktion gefunden....wenn du in den tuts schaust wirst selber sehen!

    Und da es ja viele nicht wussten ,glaube ich auch nicht das es eine "Standardfrage" oder ähnliches war!! 🙄



  • DBNoob schrieb:

    @Alexander: ich hab mir 2 tutorials grad angeschaut...und nirgend was zu den etwas erweiterten max funktion gefunden

    Es wird ja wohl weltweit mehr als zwei Tutorials geben. 😉

    DBNoob schrieb:

    Und da es ja viele nicht wussten ,glaube ich auch nicht das es eine "Standardfrage" oder ähnliches war!!

    Ich glaube, viele wissen, wie man so ein Problem angeht. Die Tatsache, dass nur wenige geantwortet haben, bedeutet nicht, dass es nur
    wenige wissen. Meines Erachtens ist die Aggregatsfunktion max() nichts wirklich unbekanntes und Unterabfragen auch nicht.

    Gruß,

    Alexander



  • Nein...aber das auch leute, die sich damit auskennen auch falsche antworten geben...das hab ich gemeind!

    Und ich kann doch nicht jedes Tutorial durchlesen...und wie gesagt, das hatte nix mit max ansich zu tun, sondern mit geschachtelten selects....das muss nich jeder bringen 🙂



  • Kann Alexander nur zustimmen: Es IST eine Standardabfrage. Und auch Linnea und Alexander dürfen sich mal einen Fehler erlauben...

    Sowohl Subselects, als auch Aggregatsfuntktionen sind sogar in der Hilfe des BCB gut erklärt: Hilfe->C++Builder-Tools, dann Inhalt->Datenmanipulation.



  • Naja fehler kann sich jeder erlauben...meines erachtens isses trotzdem keine standardfrage... :p

    trotzdem danke für eure hilfe!


Log in to reply