![]() |
Delphi-Version: 10.4 Sydney
'Ungültiges Argument zum Codieren des Datums'
Liste der Anhänge anzeigen (Anzahl: 2)
Hi zusammen
Der Titel nimmt schon mal die Fehlermeldung vorweg. Besonders erstaunt bin ich allerdings nicht. Sinnbildlich kann man sich einen Spiegel vorstellen, indem man den Spiegel hinter sich erblickt, indem man... und so fort.Debuggen bringt folgendes: Zitat:
Anhang 53228 Von interesse ist hier der Einsprung in die Scheife:
Delphi-Quellcode:
ursprünglich hiess das:
LmD := DaysInMonth(ADate); // while i <=6 do IntToStr(Dies schreibt 7 Wochenblöcke ins Stringgrid)
while DayOfTheMonth(Datum) < LmD +1 do
Delphi-Quellcode:
while i <=6 do
Das erstellte mir im Stringggrid 7 'Wochenblöcke': Anhang 53230 Wenn ich das <= durch < ersetzte, erhalte ich statt 7 "Wochenblöcke" noch deren vier, und der 31. januar wird mit den folgenden Wochen verscluckt. Den Ausdruck '<=6' durch '<=5' zu ersetzen, ist auch keine Lösung - das würde wohl manche überzählige Woche nicht darstellen - ausser im Februar. Wie verlässlich-korrekt die Darstelllung sonstwo ist, hängt wohl von den entsprechenden Wochen ab. Wie erreiche ich am zuverlässigsten, dass die Woche, in welche der Monatsletzte fällt, ausgegeben wird, aber dann wirklich Schluss ist? Gruss Delbor |
AW: 'Ungültiges Argument zum Codieren des Datums'
Datum = 03.01.10000 ist das so gewollt?
Grüße Klaus |
AW: 'Ungültiges Argument zum Codieren des Datums'
Ich vermute mal nicht. Und falls doch, dann muss könnte ich mir vorstellen, dass die Einschränkung von
Delphi-Quellcode:
da der Verursacher ist. Habe gerade kein Delphi zur Hand um mich durch die Sourcen zu wühlen. Aber die genannte Funktion kann bspw. nur mit Jahren bis 9999 umgehen.
DaysInAMonth
Zitat:
|
AW: 'Ungültiges Argument zum Codieren des Datums'
Hi Klaus01
Nein - ich wusste gar nicht, dass ein solcher Wert in einen TDateTime-Wert passt. Die Ursache ist das kleine Symbol '<='. Offenbar fängt "er" dann wieder zu zählen an; im Code geschieht dies immer mit 'Datum :=Datum + 1' Nachdem der/ein Monatsende erreicht ist, fängt der Datumsvergleich wieder von vorne an - und dies eben so lange, wie der Datenyp das Datum noch darstellen kann. Gruss Delbor Ps: Ja, Aviator, jetzt, wo du's sagst: Ich hab das auch gelesen |
AW: 'Ungültiges Argument zum Codieren des Datums'
Diese Schleife ist meistens "endlos".
DayOfTheMonth (1-31) ist bei 50% der Monate immer kleiner als als DaysInTheMonth+1 (32) des Start-Monats und somit gibt es keinen Abbruch und läuft ewig. Februar als Start ist das Einzige, wo es immer zum Ende des nachfolgenden Monats abbrechen wird. endlos/ewig ... OK, zumindestens so lange wie das Datum gültig ist, also nach dem 31.12.9999 knallt es dann doch. Im Debugger hätte dir aber schnell auffallen sollen, dass diese Schleife zu viele Durchläufe hat ... spätestens als es nach etwa 416376 Runden dann knallte. Vielleicht solltest du für deine Schleifen das Ende eher mit EndOfAMonth/EndOfTheMonth bzw. EndOfAWeek/EndOfTheWeek und IncMonth bzw. IncWeek bestimmen. Und den Anfang mit StartOfAMonth/StartOfTheMonth bzw. StartOfAWeek/StartOfTheWeek. |
AW: 'Ungültiges Argument zum Codieren des Datums'
Zitat:
Die allermeisten Programme beschränken die Gültigkeit künstlich auf die Jahre 1 bis 9999. Excel kann hingegen nicht auf einen geringeren Wert als den 0. Januar des Schaltjahres 1900 (was kein Schaltjahr war) rechnen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:30 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