Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi DBChart zeichnet neuen Punkt nicht ans Ende (https://www.delphipraxis.net/189249-dbchart-zeichnet-neuen-punkt-nicht-ans-ende.html)

Helmi 21. Mai 2016 18:34

DBChart zeichnet neuen Punkt nicht ans Ende
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

ich hab das Problem, dass bei einem DBChart ein neuer Datensatz nicht am Ende des Chart gezeichnet wird, sondern am Anfang.

Eine Serie erzeuge ich wie folgt:
Delphi-Quellcode:
  //Graph für "Temperatur 1"
  Graph_Temperatur_1 := TLineSeries.Create(DBChart_Filter);
  Graph_Temperatur_1.ParentChart := DBChart_Filter;
  Graph_Temperatur_1.DataSource := ClientDataSet;

  Graph_Temperatur_1.Name := 'Temp_1';
  Graph_Temperatur_1.Title := 'Temperatur 1';
  Graph_Temperatur_1.XLabelsSource := 'Uhrzeit';
  Graph_Temperatur_1.YValues.ValueSource := 'TempSensor_1';
  Graph_Temperatur_1.VertAxis := aLeftAxis;
  Graph_Temperatur_1.ShowInLegend := false;
  Graph_Temperatur_1.Color := clRed;
Ein neuer Datensatz wird mittels
Delphi-Quellcode:
ClientDataSet.Insert
hinzugefügt.

Dabei ist es unabhängig, ob ein Filter im ClientDataSet aktiv ist oder nicht.
Deaktivier oder aktivier ich den Filter, so stimmt danach die Ansicht wieder, bis zum nächsten Datensatz.

Ich hab es schon mit
Delphi-Quellcode:
DBChart_Filter.Refresh;
DBChart_Filter.RefreshData;
probiert, leider ohne einem erfolgreichen Ergebnis.

Auch hab ich mal probiert, den Filter aus- und wieder einzuschalten.
Leider auch ohne Erfolg.

Im angehängten Bild erkenn ich es an den Datum, dass die X-Achse beschreibt.

Wie kann ich dem DBChart beibringen, dass er immer ans Ende zeichnet?
(Scheint nur ein Zeichnungsproblem zu sein)

TeeChart-Version: Standard RAD XE2 Update4

mkinzler 21. Mai 2016 18:42

AW: DBChart zeichnet neuen Punkt nicht ans Ende
 
Warum Insert und nicht Append?

Helmi 21. Mai 2016 18:46

AW: DBChart zeichnet neuen Punkt nicht ans Ende
 
Zitat:

Zitat von mkinzler (Beitrag 1338641)
Warum Insert und nicht Append?

weil ich Append nicht kannte
muss ich gleich mal ausprobieren

[edit]
cool - Danke! - funktioniert :-)

haentschman 22. Mai 2016 07:27

AW: DBChart zeichnet neuen Punkt nicht ans Ende
 
Moin...:P

Den Unterschied von Append und Insert kennst du jetzt. :thumb: Sich aber darauf zu verlassen das die Datensätze damit immer in der korrekten Reihenfolge vorliegen ist gefährlich. Um die Reihenfolge sicherzustellen sollte die Datenmenge vor dem Anzeigen nach deinen Kriterien sortiert sein / werden...entweder per Index oder schon bei der Abfrage via SQL.

Helmi 22. Mai 2016 07:54

AW: DBChart zeichnet neuen Punkt nicht ans Ende
 
hättest du dafür ein Beispiel?

Ich bin auf dem Gebiet Datenbank ein Neuling und verwende jetzt nur eine MyBase-Datenbank bestehend aus einem ClientDataSet

haentschman 22. Mai 2016 08:11

AW: DBChart zeichnet neuen Punkt nicht ans Ende
 
Hallöle...8-)

Du hast eine Datenbank. (zeige die Tabellenstruktur) Du holst die Daten aus der Datenbank. (wie?) Dann packst du die Daten in ein ClientDataSet? Zeige mal wie du das machst. Dann können wir darauf aufbauend optimieren. :thumb:

Helmi 22. Mai 2016 08:17

AW: DBChart zeichnet neuen Punkt nicht ans Ende
 
in die Datenbank wird so geschrieben:
Delphi-Quellcode:
    ClientDataSet.Append;

    ClientDataSet.FieldValues['Datum'] := DateToStr(now);
    ClientDataSet.FieldValues['Uhrzeit'] := TimeToStr(now);

    ClientDataSet.FieldValues['Kanal'] := StrToIntDef(StringList[0][2], 0);

    ClientDataSet.FieldValues['TempSensor_1'] := StrToFloatDef(StringList[3], 0.0);
    ClientDataSet.FieldValues['TempSensor_2'] := StrToFloatDef(StringList[4], 0.0);
    ClientDataSet.FieldValues['TempSensor_3'] := StrToFloatDef(StringList[5], 0.0);
    ClientDataSet.FieldValues['TempSensor_4'] := StrToFloatDef(StringList[6], 0.0);
    ClientDataSet.FieldValues['TempSensor_5'] := StrToFloatDef(StringList[7], 0.0);
    ClientDataSet.FieldValues['TempSensor_6'] := StrToFloatDef(StringList[8], 0.0);
    ClientDataSet.FieldValues['TempSensor_7'] := StrToFloatDef(StringList[9], 0.0);
    ClientDataSet.FieldValues['TempSensor_8'] := StrToFloatDef(StringList[10], 0.0);

    ClientDataSet.FieldValues['FeuchteSensor_1'] := StrToIntDef(StringList[11], 0);
    ClientDataSet.FieldValues['FeuchteSensor_2'] := StrToIntDef(StringList[12], 0);
    ClientDataSet.FieldValues['FeuchteSensor_3'] := StrToIntDef(StringList[13], 0);
    ClientDataSet.FieldValues['FeuchteSensor_4'] := StrToIntDef(StringList[14], 0);
    ClientDataSet.FieldValues['FeuchteSensor_5'] := StrToIntDef(StringList[15], 0);
    ClientDataSet.FieldValues['FeuchteSensor_6'] := StrToIntDef(StringList[16], 0);
    ClientDataSet.FieldValues['FeuchteSensor_7'] := StrToIntDef(StringList[17], 0);
    ClientDataSet.FieldValues['FeuchteSensor_8'] := StrToIntDef(StringList[18], 0);

    ClientDataSet.FieldValues['TempKombiSensor'] := StrToFloatDef(StringList[19], 0.0);
    ClientDataSet.FieldValues['FeuchteKombiSensor'] := StrToIntDef(StringList[20], 0);

    ClientDataSet.FieldValues['Windgeschwindigkeit'] := StrToFloatDef(StringList[21], 0.0);
    ClientDataSet.FieldValues['Niederschlag'] := StrToIntDef(StringList[22], 0);
    ClientDataSet.FieldValues['Regen'] := StrToBoolDef(StringList[23], false);
(die StringList dient zum Aufteilen eines Strings, den ich aus einer seriellen Schnittstelle erhalte)

DBChart holt sich die Daten direkt über Lineseries aus dem ClientDataSet (siehe erstem Post)

das wars

[edit]
die Struktur:
Delphi-Quellcode:
      ClientDataSet.FieldDefs.Add('ID', ftAutoInc, 0, false);

      ClientDataSet.FieldDefs.Add('Datum', ftDate);
      ClientDataSet.FieldDefs.Add('Uhrzeit', ftTime);

      ClientDataSet.FieldDefs.Add('Kanal', ftSmallInt);

      ClientDataSet.FieldDefs.Add('TempSensor_1', ftFloat);
      ClientDataSet.FieldDefs.Add('TempSensor_2', ftFloat);
      ClientDataSet.FieldDefs.Add('TempSensor_3', ftFloat);
      ClientDataSet.FieldDefs.Add('TempSensor_4', ftFloat);
      ClientDataSet.FieldDefs.Add('TempSensor_5', ftFloat);
      ClientDataSet.FieldDefs.Add('TempSensor_6', ftFloat);
      ClientDataSet.FieldDefs.Add('TempSensor_7', ftFloat);
      ClientDataSet.FieldDefs.Add('TempSensor_8', ftFloat);

      ClientDataSet.FieldDefs.Add('FeuchteSensor_1', ftSmallInt);
      ClientDataSet.FieldDefs.Add('FeuchteSensor_2', ftSmallInt);
      ClientDataSet.FieldDefs.Add('FeuchteSensor_3', ftSmallInt);
      ClientDataSet.FieldDefs.Add('FeuchteSensor_4', ftSmallInt);
      ClientDataSet.FieldDefs.Add('FeuchteSensor_5', ftSmallInt);
      ClientDataSet.FieldDefs.Add('FeuchteSensor_6', ftSmallInt);
      ClientDataSet.FieldDefs.Add('FeuchteSensor_7', ftSmallInt);
      ClientDataSet.FieldDefs.Add('FeuchteSensor_8', ftSmallInt);

      ClientDataSet.FieldDefs.Add('TempKombiSensor', ftFloat);
      ClientDataSet.FieldDefs.Add('FeuchteKombiSensor', ftSmallInt);

      ClientDataSet.FieldDefs.Add('Windgeschwindigkeit', ftFloat);
      ClientDataSet.FieldDefs.Add('Niederschlag', ftInteger);
      ClientDataSet.FieldDefs.Add('Regen', ftBoolean);

haentschman 22. Mai 2016 09:09

AW: DBChart zeichnet neuen Punkt nicht ans Ende
 
Sooo...:P

Es war wohl noch zu früh am Morgen und zu wenig Kaffee. :wink: MyBase mit einer Datenbank gleichzusetzen war schon mal ein Fehler. Mit MyBase kannst du Daten eines ClientDataSets speichern und laden. Mit einer relationalen Datenbank und den SQL Möglichkeiten hat das nix zu tun. :wink:

Um die Sortierung in deinem Fall zu realisieren mußt du auf dem ClientDataSet nach dem Anlegen der Felder einen Index erzeugen.
Delphi-Quellcode:
ClientDataSet.AddIndex('DATUM', 'DATUM', []);
Dann weist du den Index zu
Delphi-Quellcode:
ClientDataSet.IndexName := 'DATUM';
siehe: http://docwiki.embarcadero.com/CodeE...Delphi%29#Code

Tipps:
1.
Delphi-Quellcode:
ClientDataSet.FieldDefs.Add('Datum', ftDate);
      ClientDataSet.FieldDefs.Add('Uhrzeit', ftTime);
... Datum und Zeit gehören in ein Datenbankfeld (ftDateTime)
2. Schnell wirst du mit MyBase an die Grenzen stoßen und eine richtige Datenbank wollen. Mach es lieber gleich. Die Zeit ist gut genutzt und nicht verschwendet. Persönlich bevorzuge ich Firebird. (free, schnell installiert, ein Datenbankfile, sowohl lokal (embedded) als auch mit Server und Multiuser nutzbar, es gibt reichlich Infos und Dokumentationen) https://www.delphi-treff.de/tutorial...-und-firebird/
3. Bei richtiger DB nur via SQL http://www.w3schools.com/sql/

Helmi 22. Mai 2016 09:12

AW: DBChart zeichnet neuen Punkt nicht ans Ende
 
Danke für die Infos.

Ich hab bislang noch kein gutes Tutorial gefunden, dass mich auf den Weg der Datenbankverwendung führt

mkinzler 22. Mai 2016 09:14

AW: DBChart zeichnet neuen Punkt nicht ans Ende
 
https://www.delphi-treff.de/tutorials/datenbanken/


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:01 Uhr.
Seite 1 von 3  1 23      

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