Statistiken erstellen



  • na in dein Query!

    BCB-Hilfe: TQuery-SQL-ExecSQL (Beispiel) schrieb:

    Query1->Close();
    Query1->SQL->Clear();
    Query1->SQL->Add("Delete from Country where Name = 'Argentina'");
    Query1->ExecSQL(); // Open() für SELECT



  • Also bei mir klappt es nicht, hab alles so gemacht wie ihr es gesagt habt aber beim ausführen der query kommt bei mir eine Fehlermeldung und das Programm stürzt ab. Hab jetzt schon alles probiert aber es geht einfach nicht. Kann jemand vielleicht mir ein Beispielprogramm schicken oder so, wäre sehr dankbar.



  • Was hast Du wo hereingeschrieben und welche Fehlermeldung kommt?



  • Den Quelltext:

    SELECT COUNT(Hersteller) AS Anzahl, Datum 
      FROM Tabelle 
     WHERE Hersteller = 'Sony' 
       AND Datum BETWEEN '01.01.2005' AND '31.12.2005'
     GROUP BY Anzahl
     ORDER BY Datum ASC
    

    habe ich in die SQL geschrieben also in die Stringanweisungsliste.

    Und den Quelltext:

    Query1->Close(); 
    Query1->SQL->Clear(); 
    Query1->SQL->Add("Delete from Country where Name = 'Argentina'"); 
    Query1->ExecSQL(); // Open() für SELECT
    

    habe ich auf einen Button gelegt. Natürlich habe ich auch den Quelltext auf meine Bedürfnisse abgeänder und nicht 1zu1 übernommen.

    Ich habe gerade eben auch geschaft das es soweit läuft, also es kommt keine Fehlermeldung mehr. Nur in dem DBChart wird nichts angezeigt. Könnt ihr mir sagen was noch fehlt oder was ich falsch gemacht habe?



  • Also, ich habe jetzt noch ein wenig rumprobiert und folgendes hinbekommen. Das DBChart zeigt jetzt EIN Datum an und die Anzahl aller Eintäge. Nur ich möchte ja das das DBChart alle Datume (sagt man das so?) und die jeweiligen Eintrage zu diesem Datum anzeigt. Anders gesagt: Ich habe in meiner Datenbank 5 Eintrage mit dem Hersteller "Sony" am 16.02.2006 und 1 Eintrag am 17.02.2006. In dem DBChart zeigt er aber 6 Einträge am 16.02.2006 an. Das heißt er addiert alle Einträge und zeigt nur ein Datum an. Wo liegt mein Fehler. Ist der Quelltext für die Query qirklich richtig???



  • Da wir nicht wissen, was genau in Deiner Query steht...



  • Dein Select ist falsch! Die gruppierst garantiert nicht nach dem Datum.



  • naja so weit ich mich noch erinnere, heisst BETWEEN soviel wie "von abc (inklusive) bis xyz (exklusive)", d.h. xyz wäre in der menge nicht mehr dabei, wenn das die begrenzung deiner suchabfrage wäre. kann auch sein, dass das von datenbank zu datenbank unterschiedlich ist.

    kannst auch folgendes versuchen:

    ...
    WHERE Datum >= :DatumVon AND Datum <= :DatumBis
    ...
    
    // Datumswerte direkt übergeben (ohne Umformatierung)
    // -> Datumswerte werden vom User über 2 TDateTimePicker selektiert
    Query->ParamByName("DatumVon")->AsDateTime = DateTimePicker1->DateTime;
    Query->ParamByName("DatumBis")->AsDateTime = DateTimePicker2->DateTime;
    


  • An Joe_M: Steht doch oben was in meiner Query steht.

    An caspar_louis: Und wie schreibe ich die Selectanweisung richtig?



  • Between ist inclusive, zumindest bei SQL-Server, wahrscheinlich aber überall.



  • PeterGabel schrieb:

    Natürlich habe ich auch den Quelltext auf meine Bedürfnisse abgeänder und nicht 1zu1 übernommen.

    Woher soll ich wissen, dass Du das nicht auch auf den SQL-SELECT beziehst?

    Zum letzten Mal: Was genau steht in der Query als SELECT-Anweisung? Nicht ungefähr, sondern exakt!

    Sunday schrieb:

    naja so weit ich mich noch erinnere, heisst BETWEEN soviel wie "von abc (inklusive) bis xyz (exklusive)", d.h. xyz wäre in der menge nicht mehr dabei, wenn das die begrenzung deiner suchabfrage wäre.

    BETWEEN ist inklusive der beiden Parameter.



  • okay. ich merk schon, dass ich nicht mehr ganz fit bin im SQL bereich. 🙄



  • Sunday schrieb:

    okay. ich merk schon, dass ich nicht mehr ganz fit bin im SQL bereich. 🙄

    Kommt wieder, wenn Du damit arbeiten mußt. Versprochen... 😉



  • PeterGabel schrieb:

    An Joe_M: Steht doch oben was in meiner Query steht.

    An caspar_louis: Und wie schreibe ich die Selectanweisung richtig?

    SELECT COUNT(Hersteller) as Anzahl, Datum
    FROM Tabelle
    WHERE Hersteller = 'Sony'
    AND Datum BETWEEN '01.01.2005' AND '31.12.2005'
    GROUP BY DATUM // nicht nach Anzahl
    ORDER BY Datum ASC

    Oder

    SELECT COUNT(Hersteller) as Anzahl, Datum
    FROM Tabelle
    WHERE Hersteller = 'Sony'
    AND Datum >= '01.01.2005'
    AND Datum <= '31.12.2005'
    GROUP BY DATUM
    ORDER BY Datum ASC

    Dabei solltest Du aber beachten, daß dass wirklich nur ein Bsp-SQL-String ist. Du solltest die variablen Werte (Hersteller,DatumVon,DatumBis) auch wirklich variabel halten und ggf. in die Parameter des Querys reinpacken. Dann mußt Du nicht bei jeder Wertänderung, den Query-SQL-String neu aufbauen.

    P.S.: Je öfter ich es lese, desto mehr Rechtschreibfehler finde ich.



  • Wie gesagt, steht da oben aber hier bitte noch einmal:

    SELECT COUNT(Hersteller) as Anzahl, Datum 
    FROM Tabelle 
    WHERE Hersteller = 'Sony' 
    AND Datum BETWEEN '01.01.2005' AND '31.12.2005' 
    GROUP BY Datum
    ORDER BY Datum ASC
    


  • Dann sollte das funktionieren... Auf welche DB läßt Du das los?

    Kannst auch mal versuchen ein paar Klammerungen vorzunehmen (obwohl das eigentlich nicht das Problem sein sollte...)

    PeterGabel schrieb:

    Wie gesagt, steht da oben aber hier bitte noch einmal:

    SELECT 
    COUNT(Hersteller) as Anzahl,
    Datum 
    FROM Tabelle 
    WHERE (Hersteller = 'Sony') 
    AND (Datum BETWEEN '01.01.2005' AND '31.12.2005') 
    GROUP BY Datum
    ORDER BY Datum ASC
    


  • Nein, hab das mit den Klammern versucht, geht aber auch nicht. Wie gesagt, eswird nur ein Datum angezeigt und die gesamte Anzahl aller Einträge. Könnte es vielleicht auch an den Einstellungen von meinem DBChart liegen???



  • Keine Ahnung, hab ich noch nie verwendet...



  • Laß Dir die Ergebnisse probehalber in einem DBGrid anzeigen oder mal den RecordCount ausgeben.

    Wenn RecordCount = 1 ist, weißt Du schon mal, daß es nicht DBChart ist.
    > 1 -> DBChart prüfen



  • Also ich hab den Kram mal kurz an einem DB-Chart ausprobiert.
    Geht ohne Probleme.

    Das SQL-Kommando dabei war

    select count(*) as Menge,DatumVon
    from ZEITINTERVALLE
    where datumvon >= convert(datetime,'01.02.2006')
    and datumbis < convert(datetime,'01.03.2006')
    and MITARBEITER = 'Sag ich euch nicht'
    group by DATUMVON
    order by DATUMVON

    Horizontale Achse waren die Datumswerte. Vertikale Achse die Menge am jeweiligem Datum. Alles korrekt angezeigt. Machbar ist es also schnell und einfach.


Anmelden zum Antworten