Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi FireDAC, DisplayFormat (https://www.delphipraxis.net/202661-firedac-displayformat.html)

Johann Steiner 25. Nov 2019 21:28

Datenbank: SQLite • Version: ? • Zugriff über: FireDac

FireDAC, DisplayFormat
 
Hallo zusammen,
habe ein kleines Problem und hoffe hier eine Lösung zu erhalten.
Ich musste eine Paradox-Tabelle über Umwege in eine SQLite DB portieren (eigentlich problemlos).
Mit FireDAC-Komponenten möchte ich nun weitermachen.
Nun habe ich im Feld Datum schöne LongInteger-Werte stehen, welche im DB-Grid auch als solche angezeigt werden.
Um ein CalcField-Ereignis zur Umwandlung zu vermeiden möchte ich im Objectinspector für das Feld Datum (FDTable1Datum) den Parameter FormatDisplay verwenden um eine vernünftige Datumsanzeige im Grid zu erhalten.
All meine Versuche scheitern kläglich, ich kann Tausendertrennzeichen und/oder Nachkommastellen einfügen, aber ein "Datum" spuckt er mir nicht aus!
Wie bitte lautet der richtige Formatstring in einem solchen Fall?
Ich verwende Delphi 10.2

Herzlichen Dank im Voraus
Hans

hoika 26. Nov 2019 04:24

AW: FireDAC, DisplayFormat
 
Hallo,
was sind das denn für "schöne" Longinteger-Zahlen?

Schau mal,hier bei Unix Time stamp (unixepoch)
https://www.sqlite.org/lang_datefunc.html

Johann Steiner 26. Nov 2019 10:16

AW: FireDAC, DisplayFormat
 
Hallo Heiko,
danke für die schnelle Antwort.
Die LongInteger-Zahlen sind : 0 für 31.12.1899 und zB 43795 für 26.11.2019. (sind wohl nur Integer …)
Danke auch für den Link; da ich mit der TFDTable-Komponente arbeiten möchte, hilft mir eine SQL-Abfrage vorläufig wenig.

Grüße Hans

jobo 26. Nov 2019 10:31

AW: FireDAC, DisplayFormat
 
Warum möchtest Du mit der Table Komponente arbeiten? Das bietet sich nicht wirklich an, wenn die Tabelle wächst oder bereits groß ist. SQL basierte Systeme verhalten sich anders als Paradox.

Du könntest die Daten einmalig konverieren und in ein normales Datetime Feld umwandeln, wie es von SQLite unterstützt wird, statt das weiter mitzuschleppen und immer umzurechnen.

Oder Du versuchst, der Table ein berechnetes Feld hinzuzufügen. An der Stelle wäre man schon an dem ersten Punkt, warum man lieber Queries verwendet.

hoika 26. Nov 2019 10:34

AW: FireDAC, DisplayFormat
 
Hallo,
Zitat:

0 für 31.12.1899
Sicher, dass es nicht der 30.12.1899 nicht, weil dann wären es die normalen Delphi-TDateTime
(http://docs.embarcadero.com/products...TDateTime.html)

Wenn das stimmt, müsste DisplayFormat dann ja dd.mm.yyyy sein.

Johann Steiner 26. Nov 2019 12:15

AW: FireDAC, DisplayFormat
 
Richtigstellung: 0 steht natürlich für 30.12.1899 und der Datentyp dürfte wohl Double sein, aber das ändert nichts an meinem Problem.
Der String dd.mm.yyyy (und ähnliche) im Feld DisplayFormat bewirkt lediglich dass im Grid eben dieser String ausgegeben wird, nicht einmal mehr der numeriwsche Wert aus der Datenbank.

Grüße Hans

hoika 26. Nov 2019 12:19

AW: FireDAC, DisplayFormat
 
Hallo,
es gibt doch noch das OnGetText, u.a. hier (obwohl lazarus)
https://forum.lazarus.freepascal.org...?topic=28125.0

oder hier (etwas weiter unten)
https://www.delphipraxis.net/190097-...ongettext.html

Johann Steiner 26. Nov 2019 19:23

AW: FireDAC, DisplayFormat
 
Danke an alle!
OnGetText ist eine elegante Methode das gewünschte Ergebnis zu erzielen, auch das OnCalcFields ist gut (und universeller) einsetzbar.
Ich vermute dass im Parameter Displayformat eine Konvertierung (Double zu DateTime oder ähnlich) nicht vorgesehen ist und nur "native" Werte (Datum, Zahlen,...) formatiert werden können.
Man möge mich eines Besseren belehren...

Schöne Grüße
Hans


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:01 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