![]() |
HourSpan ... Merkwürdigkeiten
Liste der Anhänge anzeigen (Anzahl: 3)
Hallöle...8-)
Bei sowas macht Programmieren keinen Spaß...:evil: Gegeben: * 2 DateTime Felder, 1 FloatFeld * beide DateTime Felder haben den gleichen Eventhandler
Delphi-Quellcode:
Der User hat gesagt, er hat sich im Datum vertan und hat es korrigiert. Trotzdem ist der komische Wert stehengeblieben...:gruebel:
procedure TDMED.FDQAktuelleTermineAnkunftChange(Sender: TField);
var StartTime: TDateTime; EndTime: TDateTime; HourDifference: Double; begin HourDifference := 0.0; StartTime := FDQAktuelleTermine.FieldByName('Ankunft').AsDateTime; EndTime := FDQAktuelleTermine.FieldByName('Abkunft').AsDateTime; if not FDQAktuelleTermine.FieldByName('Abkunft').IsNull then begin HourDifference := HourSpan(StartTime, EndTime); end; FDQAktuelleTermine.FieldByName('Dauer').AsFloat := HourDifference; end; Wo kommt der Wert her? :gruebel: PS: Ich kann es nicht repoduzieren. Es kommt immer das Richtige raus...:roll: (auch bei 2099 :wink: (Bild2)) Nachtrag: Der Wert 1078.... kommt raus wenn man den "Ankunft" Wert auf leer setzt. (Bild3) Dann stellt sich aber die Frage, warum wurde der Handler nicht ausgeführt? :gruebel: |
AW: HourSpan ... Merkwürdigkeiten
TField.AsDataTime gibt bei leer und Null eine 0, also das Ende von 1899.
Sicher, dass "leer" wirklich NULL ist? DevExpress und andere Fremdkomponenten nehmen als Wert für "Nichts" auch gern mal was Negatives, nahe dem Jahr 0, was in Stunden schnell mal 2-stellige Millionen ergeben kann. Als Differenz zu jetzt wären es aber nur rund 37.000 und keine 675.000 oder gar über eine Million. [edit] ja, Stunden ... nicht Tage :oops: Als Differenz von 0 zu jetzt sind es rund 37.000 Tage, also 888.000 Stunden, was deinen Werten sehr nahe kommt. |
AW: HourSpan ... Merkwürdigkeiten
Danke...:P
Das erklärt aber nicht, warum der Handler offentsichtlich nicht ausgeführt wurde. :? Ich habe keine Idee. :roll: Zitat:
Zitat:
1. Null/leer/0 -> HourDifference := 0.0; // immer gesetzt beim Auführen des Handlers 2. >leer -> HourDifference := HourSpan(StartTime, EndTime); |
AW: HourSpan ... Merkwürdigkeiten
Werden Exceptions in diesem Event ausgegeben?
Tja, dann kannst'e wohl nur mal "alles" loggen (Ankunft, Abkunft und Dauer) und nachher versuchen deine Werte von der Anzeige darin zu finden. Bei "Abkunft" im Code/DB hätte ich Angst das ständig mit Ankunft zu verwechseln. Wobei Abkunft eigentlich nur eine "örtliche" Abstammung ist und keine Zeitliche. (zumindestens im Deutschen ... k.A. ob Ösis/Schweizies da komische Eigenarten haben) |
AW: HourSpan ... Merkwürdigkeiten
Zitat:
Zitat:
|
AW: HourSpan ... Merkwürdigkeiten
Hier scheint mir Abkunft (Abfahrtzeitpunkt) und Ankunft bei der Auswertung vertauscht zu sein.
Da jeder Eintrag einen Abfahrtzeitpunkt hat, sollte sich die Bedingung doch auf die Ankunft beziehen.
Delphi-Quellcode:
procedure TDMED.FDQAktuelleTermineAnkunftChange(Sender: TField);
var StartTime: TDateTime; EndTime: TDateTime; HourDifference: Double; begin StartTime := FDQAktuelleTermine.FieldByName('Abkunft').AsDateTime; EndTime := FDQAktuelleTermine.FieldByName('Ankunft').AsDateTime; if (StartTime <= 0) or (EndTime <= 0) or (StartTime > EndTime) then begin FDQAktuelleTermine.FieldByName('Dauer').Clear; end else begin HourDifference := HourSpan(StartTime, EndTime); FDQAktuelleTermine.FieldByName('Dauer').AsFloat := HourDifference; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:16 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz