Delphi-PRAXiS

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/

Helmi 22. Mai 2016 09:19

AW: DBChart zeichnet neuen Punkt nicht ans Ende
 
Zitat:

Zitat von mkinzler (Beitrag 1338659)

diese Seite hab ich gesucht - aber nicht mehr gefunden

Gibt's auch ein gutes Tutorial für Firebird?

mkinzler 22. Mai 2016 09:21

AW: DBChart zeichnet neuen Punkt nicht ans Ende
 
In Verbindung mit Zeos. Aber grundsätzlich funktioniert es mit den verschiedenen Komponenten/Datenbanken ähnlich.

haentschman 22. Mai 2016 09:25

AW: DBChart zeichnet neuen Punkt nicht ans Ende
 
https://www.delphi-treff.de/tutorial...-installieren/
https://www.delphi-treff.de/tutorial...-und-firebird/
http://www.ibexpert.net/ibe_de/index...ersonalEdition
...das sollte zum Einstieg reichen. :wink:

Ansonsten konkrete Fragen wie immer hier... :thumb:

Helmi 23. Mai 2016 15:29

AW: DBChart zeichnet neuen Punkt nicht ans Ende
 
Zitat:

Zitat von haentschman (Beitrag 1338662)

ich versuche gerade dieses Tutorial umzusetzen.
Leider ist das etwas grob gehalten.

Als Datenbank hab ich Firebird embedded V2.5 runtergeladen.
Nur wie binde ich das jetzt richtig ein?

mkinzler 23. Mai 2016 17:25

AW: DBChart zeichnet neuen Punkt nicht ans Ende
 
Kommt darauf an, mit welchen Komponenten. Grundsätzlich lässt man einfach den Servernamen leer, dann wird der "Server" im Bauch der Dll verwendet.

Helmi 23. Mai 2016 17:29

AW: DBChart zeichnet neuen Punkt nicht ans Ende
 
Zitat:

Zitat von mkinzler (Beitrag 1338761)
Kommt darauf an, mit welchen Komponenten. Grundsätzlich lässt man einfach den Servernamen leer, dann wird der "Server" im Bauch der Dll verwendet.

Sorry - ich hab die Komponente vergessen: die letzte ZEOSlib.

Wo muss ich die dll von Firebird hinkopieren und was muss ich in ZEOS einstellen um auf die Embedded-Version zugreifen zu können?

mkinzler 23. Mai 2016 17:46

AW: DBChart zeichnet neuen Punkt nicht ans Ende
 
Am Besten die komplette Zip ins Verzeichnis mit der Exe entpacken.

Zum Entwickeln würde ich aber die Serverversion installieren und verwenden. Auf die selbe Datenbankdatei kann später zur Laufzeit "embedded" zugegriffen werden.

Helmi 23. Mai 2016 18:13

AW: DBChart zeichnet neuen Punkt nicht ans Ende
 
irgendwie bin ich zu doof dazu

also ich hab Firebird V2.5 hier runtergeladen.
In der ZEOS-Connection-Komponente V7.1.4-stable als Protokoll "firebirdd-2.5" ausgewählt (egal mit oder ohne d - was sagt das eigentlich aus?)
Als "Database" Employee.fdb eingetragen (aus dem Beispiel vom o. g. Tutorial-Link).

Wenn ich im TZQuery Felder hinzufügen möchte (Connection ist mit TZConnection verbunden), dann erhalte ich folgende Fehlermeldung:
Code:
---------------------------
Fehler
---------------------------
None of the dynamic libraries can be found or is not loadable: fbclientd25.dll, fbclientd.dll, fbclient25.dll, fbclient.dll !

Use TZConnection.LibraryLocation if the location is invalid..
---------------------------
OK  Details >>  
---------------------------
Firebird-Dienst läuft.

mkinzler 23. Mai 2016 20:00

AW: DBChart zeichnet neuen Punkt nicht ans Ende
 
Wie heißt den die Dll? Sie muss einen der genannten Bezeichnungen tragen. GGf. Umbenennen und auch den Pfad wie beschrieben hinterlegen. Hast Du den Client bei der Installation ins Systemverzeichnis installieren lassen? (Dann den Pfad nicht hinterlegen).
Passt die Bitigkeit? (32 Bit Client für 32Bit App und 64 Bit Client für 64Bit App; Unabhängig vom Server: 32 Bit Client funktioniert mit dem 64Bit Server und umgekehrt; 64 Bit Version enthält auch 32 Bit Client)

Helmi 23. Mai 2016 20:48

AW: DBChart zeichnet neuen Punkt nicht ans Ende
 
Ich hab bei der Installation nichts verändert.
Die fbclient.dll hab ich jetzt dort "C:\Program Files (x86)\Firebird\Firebird_2_5\bin\fbclient.dll" gefunden.
Wenn ich dies angieb, dann findet er wenigstens mal die DLL.

Nebenbei bemerkt, das Beispiel in diesem Tutorial ist wohl nur was für FB-Profis.
https://www.delphi-treff.de/tutorial...d-firebird/18/

hoika 24. Mai 2016 04:25

AW: DBChart zeichnet neuen Punkt nicht ans Ende
 
Hallo,
die embedded muss in das Verzeichnis der Exe kopiert werden,
so dass die fbclient direkt in diesem Verzeichnis liegt.

Beim Erzeugen des ClientDataSet-Index muss es DATUM, UHRZEIT heißen,
nicht DATUM, DATUM.

haentschman 24. Mai 2016 05:49

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

Die Steps nochmal im Durchlauf:

1. Entscheidung für ein Administrationstool (IBExpert, FlameRobin)
2. Installation Firebird Server als Dienst auf den Entwicklungsrechner. (erledigt)
3. Zugriffskomponenten Zeos installieren (erledigt)
4. fbclient.dll (Bit je nach Anwendung) aus dem Firebird bin Verzeichnis neben die Anwendung legen. (erledigt)
* Die Embedded (ZIP) erst mal außen vor lassen
5. Datenbank mit Administrationstool anlegen (?)
6. Zugriffsdaten im Zeos anlegen (?)
7. Verbinden (?)

8. weiter lernen...8-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:12 Uhr.

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