AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi HourSpan ... Merkwürdigkeiten
Thema durchsuchen
Ansicht
Themen-Optionen

HourSpan ... Merkwürdigkeiten

Ein Thema von haentschman · begonnen am 4. Jan 2023 · letzter Beitrag vom 12. Jan 2023
Antwort Antwort
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.297 Beiträge
 
Delphi 12 Athens
 
#1

HourSpan ... Merkwürdigkeiten

  Alt 4. Jan 2023, 05:44
Hallöle...

Bei sowas macht Programmieren keinen Spaß...

Gegeben:
* 2 DateTime Felder, 1 FloatFeld
* beide DateTime Felder haben den gleichen Eventhandler
Delphi-Quellcode:
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;
Der User hat gesagt, er hat sich im Datum vertan und hat es korrigiert. Trotzdem ist der komische Wert stehengeblieben...

Wo kommt der Wert her?

PS: Ich kann es nicht repoduzieren. Es kommt immer das Richtige raus... (auch bei 2099 (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?
Miniaturansicht angehängter Grafiken
fehler_1.jpg   fehler_2.png   fehler_3.png  

Geändert von haentschman ( 4. Jan 2023 um 06:04 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.157 Beiträge
 
Delphi 12 Athens
 
#2

AW: HourSpan ... Merkwürdigkeiten

  Alt 4. Jan 2023, 06:24
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

Als Differenz von 0 zu jetzt sind es rund 37.000 Tage, also 888.000 Stunden, was deinen Werten sehr nahe kommt.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 4. Jan 2023 um 06:27 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.297 Beiträge
 
Delphi 12 Athens
 
#3

AW: HourSpan ... Merkwürdigkeiten

  Alt 4. Jan 2023, 06:27
Danke...

Das erklärt aber nicht, warum der Handler offentsichtlich nicht ausgeführt wurde.
Ich habe keine Idee.
Zitat:
Sicher, dass "leer" wirklich NULL ist?
Zitat:
TField.AsDataTime gibt bei leer und Null eine 0
Es gibt eigentlich nur 2 Möglichkeiten:
1. Null/leer/0 -> HourDifference := 0.0; // immer gesetzt beim Auführen des Handlers
2. >leer -> HourDifference := HourSpan(StartTime, EndTime);

Geändert von haentschman ( 4. Jan 2023 um 06:33 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.157 Beiträge
 
Delphi 12 Athens
 
#4

AW: HourSpan ... Merkwürdigkeiten

  Alt 4. Jan 2023, 06:31
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)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 4. Jan 2023 um 06:35 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.297 Beiträge
 
Delphi 12 Athens
 
#5

AW: HourSpan ... Merkwürdigkeiten

  Alt 4. Jan 2023, 06:37
Zitat:
Bei "Abkunft" im Code/DB hätte ich Angst das ständig mit Ankunft zu verwechseln.
...das ist alter Code. Ich habe die Variablennamen, außer den Feldnamen, für hier etwas modernisiert. Es gibt auch noch nicht mal eine Prüfung ob die "Abfahrt" kleiner ist als die "Ankunft" ist. (Logikfehler)
Zitat:
Werden Exceptions in diesem Event ausgegeben?
nein
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.429 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: HourSpan ... Merkwürdigkeiten

  Alt 12. Jan 2023, 12:26
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;
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:54 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