![]() |
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
|
AW: DBChart zeichnet neuen Punkt nicht ans Ende
Zitat:
Gibt's auch ein gutes Tutorial für Firebird? |
AW: DBChart zeichnet neuen Punkt nicht ans Ende
In Verbindung mit Zeos. Aber grundsätzlich funktioniert es mit den verschiedenen Komponenten/Datenbanken ähnlich.
|
AW: DBChart zeichnet neuen Punkt nicht ans Ende
![]() ![]() ![]() ...das sollte zum Einstieg reichen. :wink: Ansonsten konkrete Fragen wie immer hier... :thumb: |
AW: DBChart zeichnet neuen Punkt nicht ans Ende
Zitat:
Leider ist das etwas grob gehalten. Als Datenbank hab ich Firebird embedded V2.5 runtergeladen. Nur wie binde ich das jetzt richtig ein? |
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.
|
AW: DBChart zeichnet neuen Punkt nicht ans Ende
Zitat:
Wo muss ich die dll von Firebird hinkopieren und was muss ich in ZEOS einstellen um auf die Embedded-Version zugreifen zu können? |
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. |
AW: DBChart zeichnet neuen Punkt nicht ans Ende
irgendwie bin ich zu doof dazu
also ich hab Firebird V2.5 ![]() 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:
Firebird-Dienst läuft.
---------------------------
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 >> --------------------------- |
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) |
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. ![]() |
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. |
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 16:20 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