Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Firebird mit DBX und Clientdataset, Rundungsfehler bei Zeitstempel? (https://www.delphipraxis.net/200021-firebird-mit-dbx-und-clientdataset-rundungsfehler-bei-zeitstempel.html)

Rainer Wolff 12. Mär 2019 10:19

Datenbank: Firebird • Version: 2.5.8 • Zugriff über: DBX

Firebird mit DBX und Clientdataset, Rundungsfehler bei Zeitstempel?
 
Konfiguration:

Firebird-Datenbank, Zugriff über DBX-Komponenten (TSQLQuery) und Clientdataset

Meine Tabelle enthält ein Zeitstempel-Feld vom Typ Timestamp. Befüllt wurde dieses Feld teils mit anderen Programmen/Zugriffskomponenten (Tabellenkonvertierung etc.).

Ich habe jetzt in meiner Tabelle eine Serie von Daten, alle mit dem selben Zeitstempel.
Bei Post/ApplyUpdate der Datensätze kommt es zu einer Exception, weil beim Update keine Datensätze gefunden werden, die den Bedingungen (aktuell upWhereAll) entsprechen.

Ursache ist in irgendeiner Form das Datumsfeld. Wenn ich in der Tabelle manuell ein anderes Datum eintrage, funktioniert das Update anschliessend.

Wer kennt den Grund für dieses Verhalten?

mjustin 12. Mär 2019 10:58

AW: Firebird mit DBX und Clientdataset, Rundungsfehler bei Zeitstempel?
 
Vor einigen Jahren ist mir das bereits aufgefallen (Java-Anwendungen schreiben Zeitstempel, Delphi-Anwendungen finden danach den Datensatz nicht mehr ...)

Die Ursache war, dass dbExpress keine Millisekunden in den Zeitfeldern speichert. Wir haben daher die anderen Anwendungen so geändert, dass der Millisekunden-Anteil vor dem Update aus dem Zeitwert entfernt wurde. In der Datenbank stehen damit einheitlich alle Zeitstempel immer ohne Millisekunden.

Rainer Wolff 12. Mär 2019 12:12

AW: Firebird mit DBX und Clientdataset, Rundungsfehler bei Zeitstempel?
 
Zitat:

Zitat von mjustin (Beitrag 1427540)
Vor einigen Jahren ist mir das bereits aufgefallen (Java-Anwendungen schreiben Zeitstempel, Delphi-Anwendungen finden danach den Datensatz nicht mehr ...)

Die Ursache war, dass dbExpress keine Millisekunden in den Zeitfeldern speichert. Wir haben daher die anderen Anwendungen so geändert, dass der Millisekunden-Anteil vor dem Update aus dem Zeitwert entfernt wurde. In der Datenbank stehen damit einheitlich alle Zeitstempel immer ohne Millisekunden.

Ja, das wars dann, Danke.

Ich hatte einen Teil der Datensätze mit einem Quick-and-Dirty-Firedac-Programm konvertiert und dabei wohl den Zeitstempel inkl. Millisekunden in einen Teil der Datensätze bekommen, das Programm selbst verwendet aber noch die alten DBX-Komponenten.
Und da soll einer draufkommen :wall:


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