Falsche Datumsanzeige in den DB-Komponenten bei SQLite3

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
linubux
Beiträge: 2
Registriert: Sa 4. Jul 2015, 07:47

Falsche Datumsanzeige in den DB-Komponenten bei SQLite3

Beitrag von linubux »

Hallo zusammen,

ich habe ein Problem das ich mir nicht erklären und nach intensiver Google-Suche auch immer noch nicht lösen kann.

Ich verwende in Lazarus (neuste Version) eine SQLite3-Datenbank die ich mit dem SQLiteDatabaseBrowser erstellt habe. Hier kommen Datumsfelder vor die mit "DATE" definiert sind. Beim eingeben von neuen Datensätzen im SQLDatabaseBrowser wird das jeweilige Datum richtig (also z.B. 03.03.2017) dargestellt.

Läuft mein Programm und ich durchlaufe die einzelnen Datensätze wird mir in den Komponente DBText, DBEdit und auch im DBGrid immer das Datum 30.12.1899 angezeigt.

Hier ist mir völlig unklar aus welchem Grund.

Kann mir jemand einen entscheidenden Tip geben?

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: Falsche Datumsanzeige in den DB-Komponenten bei SQLite3

Beitrag von Michl »

Kannst du ein Minimalbsp zusammenstellen und hier als Zip hochladen (nur *.lfm, *.lpr, *.lpi, *.pas)?

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Falsche Datumsanzeige in den DB-Komponenten bei SQLite3

Beitrag von af0815 »

Keine Details :-) Welches BS ?

SQLite kann das Datum in 3 Formaten abspeichern.

Code: Alles auswählen

TEXT as ISO8601 strings ("YYYY-MM-DD HH:MM:SS.SSS").
REAL as Julian day numbers, the number of days since noon in Greenwich on November 24, 4714 B.C. according to the proleptic Gregorian calendar.
INTEGER as Unix Time, the number of seconds since 1970-01-01 00:00:00 UTC.
 

Jetzt ist es einmal wichtig zu wissen, wie ist es bei dir wirklich abgelegt. Dann kann man das Datum so mit den Funktionen

https://www.sqlite.org/lang_datefunc.html

umformen, das es von den DB-Komponenten akzeptiert wird. EInfaches ist es meistens, die DB auch in Lazarus erstellen zu lassen, dann sind die Datumsfelder gleich so wie die Komponeneten damit arbeiten können.

Andreas
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

linubux
Beiträge: 2
Registriert: Sa 4. Jul 2015, 07:47

Re: Falsche Datumsanzeige in den DB-Komponenten bei SQLite3

Beitrag von linubux »

Hallo,

erst einmal Entschuldigung das ich jetzt erst antworte.
Danke für eure Hinweise und Hilfeversuche. Um die Frage nach dem BS zu Anfang zu beantworten: Es handelt sich um Windows 10 und die neuste Lazarusversion.

Ich hatte meine Datenbank mit SQLDatabaseBrowser erstellt und den Datumsfeldern "DATE" zugewiesen. Ein ändern auf "DATETIME" oder "TEXT" hatte immer den gleichen Effekt. Ein erstellen der SQL-Datenbank innerhalb von Lazarus brachte ebenfalls das Ergebnis "30.12.1899". Für mich irgendwie nicht begreifbar. Als "Notlösung" habe ich nun den Feldtyp "VARCHAR(10)" für das Datumsfeld benutzt. Somit werden die Daten dann auch logischerweise korrekt angezeigt. Sollte ich allerdings mit dem Datum rechnen wollen (Zeitspanne etc.) werde ich die Strings wohl oder über in einen richtigen Datumswert "umrechnen" müssen.

Naja, mein Lösungsansatz funktioniert vorerst.

Danke für die Hilfe

Gruß
linubux

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Falsche Datumsanzeige in den DB-Komponenten bei SQLite3

Beitrag von af0815 »

Ich verwende sowas bei sqlite, siehe

Code: Alles auswählen

SELECT strftime('%Y-%m-%d',[DatumZeit]) AS datum ,.....


Orientierung ist für mich immer noch ISO8601 strings ("YYYY-MM-DD HH:MM:SS.SSS")
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Antworten