![]() |
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:
Ein neuer Datensatz wird mittels
//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;
Delphi-Quellcode:
hinzugefügt.
ClientDataSet.Insert
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:
probiert, leider ohne einem erfolgreichen Ergebnis.
DBChart_Filter.Refresh;
DBChart_Filter.RefreshData; 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 |
AW: DBChart zeichnet neuen Punkt nicht ans Ende
Warum Insert und nicht Append?
|
AW: DBChart zeichnet neuen Punkt nicht ans Ende
Zitat:
muss ich gleich mal ausprobieren [edit] cool - Danke! - funktioniert :-) |
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. |
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 |
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: |
AW: DBChart zeichnet neuen Punkt nicht ans Ende
in die Datenbank wird so geschrieben:
Delphi-Quellcode:
(die StringList dient zum Aufteilen eines Strings, den ich aus einer seriellen Schnittstelle erhalte)
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); 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); |
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:
Dann weist du den Index zu
ClientDataSet.AddIndex('DATUM', 'DATUM', []);
Delphi-Quellcode:
siehe:
ClientDataSet.IndexName := 'DATUM';
![]() Tipps: 1.
Delphi-Quellcode:
... Datum und Zeit gehören in ein Datenbankfeld (ftDateTime)
ClientDataSet.FieldDefs.Add('Datum', ftDate);
ClientDataSet.FieldDefs.Add('Uhrzeit', ftTime); 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) ![]() 3. Bei richtiger DB nur via SQL ![]() |
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 |
AW: DBChart zeichnet neuen Punkt nicht ans Ende
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21: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-2025 by Thomas Breitkreuz