Datumsproblem unter Linux

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
Andrewi
Beiträge: 18
Registriert: Fr 8. Mär 2013, 16:07
OS, Lazarus, FPC: MINT 21, Laz: 2.2.0, FPC: 3.2.2
CPU-Target: x64
Wohnort: Hzgt. Lauenburg

Datumsproblem unter Linux

Beitrag von Andrewi »

Hallo Forum!
Ich bin gerade dabei ein Projekt von Win10 nach Linux zu übertragen. Dabei gibt es ein Problem mit der Schreibweise des Datums. Unter Win hatte ich in SQLite das Feld DATUM als DateTime deklariert. Im Formular war dieses Feld mit einem DBEdit verbunden. Ohne Probleme konnte ich das Datum im "normalen" Format --> 01.05.2023 in das DBEdit eintragen. Beim Speichern wurde es dann in der Tabelle als 01-05-23 gespeichert. Beim Datensatzwechsel bzw. Neuanlage eines DS wurde das (gespeicherte) Datum wieder im normalen Format angezeigt.

Unter Linux (MINT 21 Vera) funktioiert das leider nicht. Ich habe dasselbe Konstrukt wie unter Win mit einer Kopie der Originaltabelle erstellt. Leider gibt es bei der gewünschten Schreibweise nur Gemaule, von wegen "kein gültiges Datums-Format". :(
Ich vermute, daß unter Win automatisch irgendeine API oder DLL aufgerufen bzw. auf die LocalSettings zugegriffen wird. Ich denke,daß ich das irgndwie selber einbauen muß. Mit Konvertierungen von DateTimeToSystemTime fehlt mir die SystemTimeToStr-Funktion um die Anzeige in einem einfachen Edit anzuzeigen. Die andere Richtung habe ich gefunden, und könnte mir so beim Speichern helfen. Ist aber vermutlich nicht die eleganteste Lösung. DBDateEdit bringt mich auch nicht weiter, da dort ja auch die ungewünschte Schreibweise genutzt wird.
Irgendwie komme ich mit dem Problem trotz längerer Suche nicht weiter. Hat jemand einen Tip, wie ich das lösen kann.

Vielen Dank im Vorraus für Eure Tips und Hinweise

André

Linux MINT 21.1 Cinnamon
Lazarus 2.2.0
FPC 3.2.2
SQLite libsqlite3.so.0.8.6
Ein Mensch meint gläubig wie ein Kind, dass alle Menschen Menschen sind. (Eugen Roth)

dj_leinad
Beiträge: 34
Registriert: Sa 1. Okt 2022, 05:27
OS, Lazarus, FPC: Win10 pro (Laz 3.2 / FPC 3.2.2)
CPU-Target: Win 64Bit
Wohnort: CH

Re: Datumsproblem unter Linux

Beitrag von dj_leinad »

Hallo Andrewi

Mein erster Tip in solchen Fällen lautet immer, lass Dir mal die DefaultFormatSettings in Windows und Linux anzeigen.

Gruss Daniel
Erfahrung heißt gar nichts. Man kann eine Sache auch 35 Jahre schlecht machen.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6216
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: Datumsproblem unter Linux

Beitrag von af0815 »

Das Problem ist meistens:
-> Datum Settings des Basis Servers wo die DB drauf ist
-> Datum Settings der DB
-> Datum Setting der Verbindung
-> Datum Settings des Client PCs
so und jetzt soll das ganze zusammen passen :-)

Am besten nicht selbst mit Funktionen wie "SystemTimeToStr" etc. herumzuprobieren, zumindest nicht wenn eine "ServerDB" im Spiel ist, damit hebelt man die ganzen DB-sensitiven Komponenten aus. Da hat dj_leinad recht, einmal nachsehen, was auf den Systemen konfiguriert ist.
Damit man nicht alles aushelbelt, kann man hier eine mögliche Lösung der Problematik nachlesen viewtopic.php?f=17&t=7366&start=45

Mit einer SQLite Verwaltungsoberfläche kann man mit "PRAGMA encoding; " sich die Encodings der DB mal ansehen. Nur ändern kann man die mit "PRAGMA encoding = "UTF-8"; " nicht mehr, wenn die DB bereits erstellt wurde. Da geht nichts mehr.

Greifst du mit SqlDB oder ZEOS auf die DB zu ?
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Andrewi
Beiträge: 18
Registriert: Fr 8. Mär 2013, 16:07
OS, Lazarus, FPC: MINT 21, Laz: 2.2.0, FPC: 3.2.2
CPU-Target: x64
Wohnort: Hzgt. Lauenburg

Re: Datumsproblem unter Linux

Beitrag von Andrewi »

Hallo1

Als erstes mal Danke an Euch für die schnellen Antworten. Ich werde mir eure Anregungen zu gemüte führen und dann berichten ob ich weitergekommen bin

André
Ein Mensch meint gläubig wie ein Kind, dass alle Menschen Menschen sind. (Eugen Roth)

Andrewi
Beiträge: 18
Registriert: Fr 8. Mär 2013, 16:07
OS, Lazarus, FPC: MINT 21, Laz: 2.2.0, FPC: 3.2.2
CPU-Target: x64
Wohnort: Hzgt. Lauenburg

Re: Datumsproblem unter Linux

Beitrag von Andrewi »

Hallo af0815!
Deine Frage sollte ich auch beantworten. Ich greife mit ZEOS auf die SQLite-DB zu.

André
Ein Mensch meint gläubig wie ein Kind, dass alle Menschen Menschen sind. (Eugen Roth)

ErnstVolker
Beiträge: 336
Registriert: Di 17. Feb 2009, 10:44
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Datumsproblem unter Linux

Beitrag von ErnstVolker »

Bei ZEOS habe ich in der TZConnection unter FormatSettings DisplayDateFormatSettings entsprechend auf DD.MM.YYYY eingestellt. Allerdings ZEOS 8.0.0-beta.

Andrewi
Beiträge: 18
Registriert: Fr 8. Mär 2013, 16:07
OS, Lazarus, FPC: MINT 21, Laz: 2.2.0, FPC: 3.2.2
CPU-Target: x64
Wohnort: Hzgt. Lauenburg

Re: Datumsproblem unter Linux

Beitrag von Andrewi »

Moin ErnstVolker!

Erstmal Danke für den Tip.
Ich setzte die Version 7.2.14 ein. Laut den Release Notes soll es dort die von dir genannte Einstellung geben. Aber finden tu ich sie leider nicht. :(
Außerdem muß ich noch angeben, daß das Problem bei einem anderen, im letzten Jahr unter MINT 20 umgestellten Projekt dieses Prolem nicht auftaucht. :o Auch dort wurde die alte DB übernommen. Das Datum wird dort im gewünschetn Format angenommen und angezeigt. Verstehen tu ich das Ganze noch nicht so richtig, aber aus den Release Notes geht hervor, daß die Einstellungen genutzt werden sollen, wenn ZEOS nicht weiß, wie es die Datumsangaben verarbeiten soll.
Ich werde noch mal weitersuchen.

@dj_leinad und af0815:
Bei den DefaultFormtSettings ist tatsächlich der '-' als Datumsseperator eingetragen. Allerdings steht in der Hilfe, das der entsprechende Schlüssel zum Ändern überholt ist.
Außerdem habe ich festgestellt, daß ein ähnliches Problem mit Float auftaucht. Eingabe: 15300.30, gespeichert in SQLite: 15300, angezeigt als 1.5E4. Die Nachkommazahlen werden einfach gestrichen???? Das entsprechende Feld ist als REAL deklariert.
Auch wenn das Problem evtl. in einen eigegen Thread gehört, vermute mal, daß beides im Kern die selbe Ursache hat.

André
Ein Mensch meint gläubig wie ein Kind, dass alle Menschen Menschen sind. (Eugen Roth)

dj_leinad
Beiträge: 34
Registriert: Sa 1. Okt 2022, 05:27
OS, Lazarus, FPC: Win10 pro (Laz 3.2 / FPC 3.2.2)
CPU-Target: Win 64Bit
Wohnort: CH

Re: Datumsproblem unter Linux

Beitrag von dj_leinad »

Mit folgenden Zeilen sollte das ohne meckern des Compiler ablaufen.

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
Var
  fs : TFormatSettings;
 
begin
  fs := DefaultFormatSettings; 
  fs.DateSeparator     := '.';
  fs.DecimalSeparator  := '.'; 
  fs.ThousandSeparator := ',';
  ShowMessage(DateToStr(Now, fs));
end;
Erfahrung heißt gar nichts. Man kann eine Sache auch 35 Jahre schlecht machen.

MmVisual
Beiträge: 1470
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 3.0 FPC 3.2)
CPU-Target: 32/64Bit

Re: Datumsproblem unter Linux

Beitrag von MmVisual »

Unter SQLite / Zeos verwende ich DateTime als Feldtyp.
Um das Datum in das Feld zu speichern verwende ich das Feld "AsFloat".

<Feld>.AsFloat := Now; // oder Date;

Im Prinzip ist "Now" nichts anderes als ein Float Typ, damit habe ich das Problem unabhängig vom System gelöst bekommen.
EleLa - Elektronik Lagerverwaltung - www.elela.de

Andrewi
Beiträge: 18
Registriert: Fr 8. Mär 2013, 16:07
OS, Lazarus, FPC: MINT 21, Laz: 2.2.0, FPC: 3.2.2
CPU-Target: x64
Wohnort: Hzgt. Lauenburg

Re: Datumsproblem unter Linux

Beitrag von Andrewi »

Moin zusammen!

Da ich den Thread im Urlaub angestoßen hatte und ich Beendigung noch einiges an Papierkram und Sonstigem zu erledigen hatte, melde ich mich erst heute wieder.

Ich habe in letzter Zeit weiter mit euren Vorschlägen experimentiert und habe mir dabei DBDateEdit noch mal genauer angeschaut. Dabei habe ich festgestellt, daß man dort das Datumsformat ändern kann. Hatte ich am Anfang übersehen. :oops: Damit gibt es dann kein Problem mehr. Der Code von dj_leinad funktioniert auch. Allerdings wird da richtige Format erst im DBEdit angezeigt, wenn man in das Feld klickt.
Ich werde also mit DBDateEdit weiterarbeiten. Allerdings habe ich immer noch nicht verstanden, warum es in einem anderen, ebenfalls von Windows migrierten, Projekt ohne Probleme mit einem einfachen DBEdit funktioniert. :?

Wie dem auch sei - euch Allen vielen Dank für eure Tips und Hinweise.

Grüße André
Ein Mensch meint gläubig wie ein Kind, dass alle Menschen Menschen sind. (Eugen Roth)

Antworten