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?
Falsche Datumsanzeige in den DB-Komponenten bei SQLite3
Re: Falsche Datumsanzeige in den DB-Komponenten bei SQLite3
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;
- af0815
- Lazarusforum e. V.
- Beiträge: 6766
- 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
Keine Details
Welches BS ?
SQLite kann das Datum in 3 Formaten abspeichern.
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

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.
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).
Re: Falsche Datumsanzeige in den DB-Komponenten bei SQLite3
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
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
- af0815
- Lazarusforum e. V.
- Beiträge: 6766
- 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
Ich verwende sowas bei sqlite, siehe
Orientierung ist für mich immer noch ISO8601 strings ("YYYY-MM-DD HH:MM:SS.SSS")
Code: Alles auswählen
SELECT strftime('%Y-%m-%d',[DatumZeit]) AS datum ,.....
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).