Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi TDBChart in Abhängigkeit zur ausgeführten Query... (https://www.delphipraxis.net/104560-tdbchart-abhaengigkeit-zur-ausgefuehrten-query.html)

Stern 6. Dez 2007 12:39

Datenbank: MySQL • Version: 5 • Zugriff über: Zeos

TDBChart in Abhängigkeit zur ausgeführten Query...
 
Hallo zusammen,

ich habe eine Frage bezüglich der Visualisierung von Queries in einem TDBChart.
Ich habe in meinem Programm eine Verbindung zu einer MySQL-DB. Weiterhin eine Dropdown-Box, welche 15
vordefinierte QueryNamen enthält. Diese Queries sind allesamt nur LESEND. Ein Button für dann entsprechend
dem ausgewählten Item das entsprechende SELECT-Statement aus.

Nun würde ich gerne in, Abhängigkeit der Query, das Ergebnis in einem Chart anzeigen. Mein Problem ist,
dass ich nicht immer das gleiche Chart nehmen kann, da die Ergebnisse unterschiedliche Daten erhalten.
Wie kann ich dies am besten lösen?

Liebe grüße
Steffi

Stern 6. Dez 2007 14:56

Re: TDBChart in Abhängigkeit zur ausgeführten Query...
 
keiner eine Ahnung wie ich das lösen könnte oder unverständlich erklärt? :(
Ich muss da jetzt aber nicht 15 verschiedene Queries und 15 verschiedene Charts
aufs Formular ziehen, oder???


Liebe Grüße
Steffi

shmia 6. Dez 2007 16:02

Re: TDBChart in Abhängigkeit zur ausgeführten Query...
 
Die Datenflusskette ist so:
TQuery -> TDataSource -> TDBChart
Man kann jetzt einfach in der Datasource das Property Dataset auf die jeweils passende Query ändern.

Stern 6. Dez 2007 16:15

Re: TDBChart in Abhängigkeit zur ausgeführten Query...
 
ok, ich versuch es mal.

Vielen lieben Dank
Steffi

Stern 7. Dez 2007 20:49

Re: TDBChart in Abhängigkeit zur ausgeführten Query...
 
Ok, ich habe nun 25 verschiedene Queries. Nun würde ich gerne versuchen bei einer bestimmten Query das Ergebnis in
einem DBChart zur Laufzeit zu visualisieren. Ich habe die Beispiele nicht auf dem Rechner, sondt würde ich zuerst dort
nachschauen. Oder gibt es vielleicht irgendwo ein gutes Tutorial dazu?

Ich würde das ganze nun so angehen:

Delphi-Quellcode:
        qrMain.SQL.Clear;
        qrMain.SQL.Text:= 'SELECT Blablabla;';
        qrMain.Active:= True;
        qrMain.open;

         DBChart1.Series[0].Clear;
            qrMain.First;
            while not qrMain.Eof do begin
            DBChart1.Series[0].AddY(Hier weiß ich nicht wie ich was reinschreiben muss);
            DBChart1.Series[0].AddX(Hier weiß ich nicht wie ich was reinschreiben muss);
            qrMain.Next;
            end;
Ich bekomme aus meiner Query eine Spalte mit Monaten und einen entsprechenden Count dazu...
Nun würde ich gerne in der X-Achse die Monate und in der Y-Achse den Count dazu haben.
Aber wie gesagt, wenn es ein gutes Tutorial gibt, schau ich mir auch zuerst dieses an.

Liebe Grüße
Steffi

Stern 7. Dez 2007 22:12

Re: TDBChart in Abhängigkeit zur ausgeführten Query...
 
Ich habe jetzt nochmal die Hilfe durchforstet und im Delphi-Buch ist das Angebot auch nicht unbedingt so groß... :roll:
Nun hat vielleicht doch der ein oder andere hier zu später Stunde noch Lust, mal kurz ein Beispiel zur Charterstellung
mit DBChart abzulassen? :zwinker:

Nun ich müsste eben irgendwie zur Laufzeit ein Chart erzeugt bekommen...Wäre schön...

Liebe Grüße
Steffi

Stern 9. Dez 2007 12:50

Re: TDBChart in Abhängigkeit zur ausgeführten Query...
 
Hallo,

ich habe nun anhand eines englischen Tutorial (3. oder 4. ergebnis in google -> DBCHart + Delphi + Laufzeit) versucht mir das ganze
DBCharting etwas besser klar zumachen. Aber trotz Hilfe und Tutorial bekomm ich es nicht hin den oben genannten Kontext als Chart abzubilden...

Ich denke, ich brauch da etwas Hilfe... Also wenn jemand Zeit und Lust hätte... :lol:

Liebe Grüße
Steffi

mikhal 9. Dez 2007 13:46

Re: TDBChart in Abhängigkeit zur ausgeführten Query...
 
Z.B. nach folgender Kurzfassung: TDBChart auf dein Formular, Doppelklick auf die Komponente, oberster Reiter Diagramm und dort den Reiter Reihen auswählen, den Button Hinzufügen anklicken, aus den verschiedenen Reihen, die Darstellung auswählen, die du möchtest (z.B. Balken). Anschließend unter dem obersten Reiter Reihen den Reiter Datenquellen auswählen, hier die gewünschte Datenquelle einsetzen (deshalb oben die Empfehlung deine Abfragen zu parametriesieren), unten dann das Feld für die x-Achse und bei der Darstellung Balken das Feld für die y-Achse (Balken) einsetzen. Als letztes öffnest du deine Query und die Anzeige wird ohne weiteres Zutun gefüllt.


Grüße
Mikhal

Stern 10. Dez 2007 08:27

Re: TDBChart in Abhängigkeit zur ausgeführten Query...
 
Ok, so auf diesem Weg funktioniert das Ganze auch wunderbar. Nun habe ich entweder ein Verständnis-Problem
oder mich nicht richtig ausgedrückt. :roll:
Die Query, die im Programm später in dem DBChart visualisiert werden soll, kann ich beim erstellen noch gar nicht öffnen...
Also kann ich ja auch keine felder für x und y festlegen, oder? Die Query wird erst später im Programm ausgeführt -> auf dem
Formular ist mein SQL noch leer...

Liebe Grüße
Steffi

mkinzler 10. Dez 2007 09:18

Re: TDBChart in Abhängigkeit zur ausgeführten Query...
 
Dann mach die Zuweisung halt auch im Programm, nachdem der Query gesetzt und geöffnet ist.

Stern 10. Dez 2007 11:40

Re: TDBChart in Abhängigkeit zur ausgeführten Query...
 
@mkinzler: also genau das hatte ich ja auch vor. Nur habe ich Probleme, meine Query auch entsprechend
umzusetzen. Also ich habe mir jetzt im Design-Modus eine "Series1" mit einem Torten-Diagramm angelegt.
Ich bekomme aus meiner SQL-Query eine Datenmenge, die 4 Namen und entsprechend 4 Werte enthält. Nun würde
ich natürlich gerne den Kuchen so aufteilen, dass ich sehen kann, wer wieviel Prozent der Gesamtsumme hat.

Beispiel

SQL ( SELECT Wert,Name FROM tabelle) ergibt:
Delphi-Quellcode:
|Wert|  |Name|
 123234  Meier
 343434  Huber
 312123  Klein
 90909   Meissner
Nun müsste ich ja zunächst die Gesamtsumme vom Wert bekommen und diese dann zuweisen. Hier liegt das Problem.
Ich bekomme das nicht hin bzw. weiß nicht genau, wie ich die Werte zuordnen kann. Irgendwie so in dieser Richtung:
Delphi-Quellcode:
///////DBChart zur Laufzeit füllen
      Series1.DataSource:= dsMain;
      Series1.YValues.ValueSource:='bla';
      Series1.XLabelsSource:= 'bla';
Naja, da hängt es jetzt halt noch bei mir...Vielleicht einen Tipp?

Liebe Grüße
Steffi

mikhal 10. Dez 2007 12:14

Re: TDBChart in Abhängigkeit zur ausgeführten Query...
 
Delphi-Quellcode:
 Series1.YValues.ValueSource:=Query.FindField('Wert').AsString;
Series1.XLabelsSource:= Query.FindField('Name').AsString;
Grüße
Mikhal

Stern 10. Dez 2007 18:35

Re: TDBChart in Abhängigkeit zur ausgeführten Query...
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo zusammen,

so nun habe ich den ganzen Thread nochmals durchgearbeitet und komme aber immer noch nicht zu meinem gewünschten Ergebnis.
Wenn ich das DBChart im Design-Modus einstelle klappt alles wunderbar. Aber ich bekomm es zur Laufzeit einfach nicht gebacken... :oops:

Ich hab hier mal ein Bildchen angehängt, mit meinen Eingaben im Design-Modus. Damit bekomme ich genau was ich haben möchte.
Wenn ich aber das Ganze lösche und versuche über Series1.DataSource... das DBChart zur Laufzeit zu erzeugen bekomme ich es nicht hin.

Kann mir vielleicht nochmal anhand meines Bildchens zeigen, was ich zur Laufzeit codieren muss? :gruebel:

Liebe Grüße
Steffi

Stern 10. Dez 2007 19:34

Re: TDBChart in Abhängigkeit zur ausgeführten Query...
 
Oha, so langsam komme ich dann auf den Trichter:

Delphi-Quellcode:
////////////////////
        /// DBCharting

        Series1.DataSource:= dsMain;
        Series1.XLabelsSource:= 'Month';
        Series1.XValues.ValueSource:='Month';
        Series1.YValues.ValueSource:= 'count(*)';
liefert mir ein Chart mit EINEM Balken aus der Ergebnismenge. Wenn ich im DBGrid weiter gehe,
aktualisiert das DBChart sich sofort. Allerdings hätte ich nun noch gerne ALLE Balken auf einmal auf meinem DBChart... :gruebel:

Liebe Grüße
Steffi

mikhal 10. Dez 2007 19:44

Re: TDBChart in Abhängigkeit zur ausgeführten Query...
 
Tja, da habe ich dich wohl heute auf die falschee Fährte geschickt...

Delphi-Quellcode:
  qrMain.Active := False;
  Series1.DataSource := qrMain;
  Series1.YValues.ValueSource := 'Anzahl'; // dein Count(*) solltest du mit einem Alias versehen, etwa " COUNT(*) AS Anzahl"
  Series1.XValues.ValueSource := 'Month';
  Series1.XLabelsSource := 'Month';
  qrMain.Open;
Ich habe dann bei mir alle Balken meiner Abfrage angezeigt.

Grüße
Mikhal

mikhal 10. Dez 2007 19:58

Re: TDBChart in Abhängigkeit zur ausgeführten Query...
 
Hab' noch was übersehen: ValueSource erwartet einen Zahlenwert! Hast du den Monat als String gespeichert, kracht es hier! Dann reicht der Eintrag in XLabels.

Grüße
Mikhal
[edit]Tippfehler...[/edit]

Stern 10. Dez 2007 20:10

Re: TDBChart in Abhängigkeit zur ausgeführten Query...
 
Liste der Anhänge anzeigen (Anzahl: 1)
Naja, dass ist nicht schlimm. Ich bin hier fleißig am ausprobieren...
Also es sei dir verziehen :lol:

Ich wundere mich aber darüber, dass ich nur einen Balken bekomme. Muss ich vielleicht noch etwas einstellen? Hängt es damit zusammen,
dass ich gleichzeitig noch ein DBGrid im Einsatz habe? :gruebel:
Im Anhang mal wieder ein Bildchen. Ich verzweifle noch.

Liebe Grüße
Steffi

PS: der Monat ist bei als integer...

mikhal 10. Dez 2007 20:32

Re: TDBChart in Abhängigkeit zur ausgeführten Query...
 
Kopple das DBGrid mal ab, wenn du dann immer noch nur einen Balken siehst, schick doch mal dein Select-Statement, damit man auch dort einen möglichen Fehler finden kann.

Grüße
Mikhal

Stern 10. Dez 2007 20:39

Re: TDBChart in Abhängigkeit zur ausgeführten Query...
 
Also das DBGrid ist es schon mal nicht... :roll:
Hier mal mein Statement:
Delphi-Quellcode:
begin
        qrMain.SQL.Clear;
        qrMain.SQL.Text:= 'SELECT Month(created) AS month, COUNT(*) AS count FROM tabelle where year(created)=:jahr GROUP BY Month(created);';
        qrMain.ParamByName('jahr').asString := IntToStr(1999);
        qrMain.Active:= True;
        qrMain.open;
Hmmm, also ich kann da kein Fehler erkennen... Aber das heißt ja noch gar nichts :wink:

Liebe Grüße
Steffi

mikhal 10. Dez 2007 20:49

Re: TDBChart in Abhängigkeit zur ausgeführten Query...
 
Zuerst drei kleine Anmerkungen:

1. die Textzuweisung via qryMain.SQL.Text löscht automatisch die SQL-StringList, also kannst du dir das qrMain.Clear sparen.
2. qrMain.Open und qrMain.Active = True machen das Gleiche, also ist eins überflüssig.
3. du verwendest als Alias für deine Anzahl das SQL-Schlüsselwort Count, wundert mich, dass da keine Fehlermeldung kommt.

In der Select-Anweisung selbst kann ich jetzt keinen Fehler finden, ich würde aber nach der Parameterzuweisung noch die Zeile "qrMain.Prepared := True;" einsetzen. Ist eine Gewohnheit aus alten Tagen, weil unter ADO nicht immer die Parameterliste korrekt abgearbeitet wurde, wenn diese Zeile fehlte.

Grüße
Mikhal

[edit]Korrekturen...[/edit]

Stern 10. Dez 2007 20:56

Re: TDBChart in Abhängigkeit zur ausgeführten Query...
 
Ok, ich habe jetzt mal alle deine Korrekturvorschläge umgesetzt und bis auf qrMain.prepared hat auch alles gepasst.
Dort bekomme ich dann einen undefinierten Bezeichner. Leider habe ich immer noch nur einen Balken. Aber wie schon
erwähnt, wenn ich mich durch das DBGrid bewege, reagiert das Chart und zeichnet mir den korrekten Balken.

Ich versteh das aber nicht.

Liebe Grüße
Steffi

mikhal 10. Dez 2007 21:00

Re: TDBChart in Abhängigkeit zur ausgeführten Query...
 
Das bedeutet wohl, dass deine Bindung der Query (DataSource) für diese Darstellung verantwortlich ist.

Verbindest du die DataSource auch mit der Series1? In meinem Beispiel habe ich die Query direkt mit der Series1 verbunden. Wenn das auch nicht weiterhilft, solltest du tatsächlich für die DBChart eine eigene Query verwenden, die identisch mit deiner qrMain ist.

Grüße
Mikhal

Stern 10. Dez 2007 21:51

Re: TDBChart in Abhängigkeit zur ausgeführten Query...
 
Vielen Dank, Michael.
Mit einer neuen Query hat es geklappt.

Liebe Grüße und vielen Dank für deine Hilfe. :kiss:

Steffi


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:04 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz