AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi TPlannerDatePicker / Null Datum nicht zu fassen

TPlannerDatePicker / Null Datum nicht zu fassen

Ein Thema von NicoleWagner · begonnen am 18. Aug 2020 · letzter Beitrag vom 21. Aug 2020
Antwort Antwort
NicoleWagner

Registriert seit: 6. Jul 2010
167 Beiträge
 
Delphi XE3 Professional
 
#1

AW: TPlannerDatePicker / Null Datum nicht zu fassen

  Alt 18. Aug 2020, 16:18
Danke für Deine Antwort.
War damals von Dir der geniale Hinweis, dass dieser TMS-Picker eine "isValid"-Funktion hat? Darum möchte ich ihn nicht gerne austauschen. Die ist nämlich extrem nützlich.

Dummerweise kann ich nicht genau feststellen, wo der Fehler passiert. Das Datum wird mir angezeigt, wie gewünscht, durchläuft die Prüfschleifen und erst die Bestätigungsmeldung enthält dann den "1.1.1899" (oder so ähnlich) statt etwa "18.8.2020". Die Verarbeitung passiert mit dem falschen Datum. Wie gesagt, nur in Win 10, nicht in Win 7.
und worse: Der Fehler tritt in Win 10 auch nur manchmal auf, manchmal nicht.

Geändert von NicoleWagner (18. Aug 2020 um 16:34 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.629 Beiträge
 
Delphi 12 Athens
 
#2

AW: TPlannerDatePicker / Null Datum nicht zu fassen

  Alt 18. Aug 2020, 16:56
Darum möchte ich ihn nicht gerne austauschen. Die ist nämlich extrem nützlich.
Es geht auch gar nicht ums Austauschen, sondern um eine Überprüfung, ob es an der Komponente oder an Windows oder sonstwas liegt.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
NicoleWagner

Registriert seit: 6. Jul 2010
167 Beiträge
 
Delphi XE3 Professional
 
#3

AW: TPlannerDatePicker / Null Datum nicht zu fassen

  Alt 18. Aug 2020, 18:28
Ich glaube, es liegt am Zugriff und der Verarbeitung des Datumsfeldes.
Genau in dieser TMS-Komponente (ob ich den Fehler dort nicht höchstpersönlich verursache, ist die zweite Frage).

Ich rufe das Formular zur Termineingabe ua. auf mit:

TerminNeu(Datum_aus_Kalender_angeklickt);
oder
TerminNeu(0); // wenn eben KEIN Termin im Kalender (TMonthView) gewählt ist.

Mit der Null dachte ich, sollte das Datumsfeld leer bleiben und den Nutzer animieren, ein Datum einzugeben.
Doch Null-Fehler / Null-Parameter, Datum als '30.12.1899'.... vielleicht liegt es dort.

Ich ersetzte daher
TerminNeu(0);

durch

TerminNeu(trunc(now));
Damit wird mir jedenfalls das heutige Datum ins Feld geschrieben, statt dass es leer bleibt.

Wie gesagt, "leer" war es nicht, als ich den speicher-Befehl schickte, denn entweder hatte ich manuell ein Datum eingegeben oder eines
mit dem Kalender gewählt. Optisch sieht es identisch aus wie zuvor. Intern ist jetzt jedoch DAVOR ein anderer Paramenter übergeben.

Wie gesagt, ist es ein "manchmal, manchmal nicht" -Fehler.
Jetzt warte ich einmal ein paar Tage oder Wochen, bis es wieder kommt oder eben nicht.
Vielleicht ist dann auch "now" statt des Wunschdatums. Wer weiß.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.629 Beiträge
 
Delphi 12 Athens
 
#4

AW: TPlannerDatePicker / Null Datum nicht zu fassen

  Alt 18. Aug 2020, 20:56
Doch Null-Fehler / Null-Parameter, Datum als '30.12.1899'.... vielleicht liegt es dort.
Liegt vielleicht daran, dass der Wert 0 als TDateTime dem 30.12.1899 entspricht. Ältere Daten werden durch negative Werte dargestellt.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von scrat1979
scrat1979

Registriert seit: 12. Jan 2007
Ort: Sulzbach a.d. Murr
1.029 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: TPlannerDatePicker / Null Datum nicht zu fassen

  Alt 18. Aug 2020, 20:58
Der TDateTime-Wert 0 entspricht im Datumsteil dem 30.12.1899, daher steht der Picker korrekterweise dann auf diesem Datum.
Michael Kübler
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: TPlannerDatePicker / Null Datum nicht zu fassen

  Alt 19. Aug 2020, 01:33
Bei DevExpress mit den Datumskomponenten was Ähnliches.

Warum genau dieser Wert, kann ich nicht mehr sagen.
Ich glaub im DefExpress gab es auch irgendwo so eine Konstante.


Delphi-Quellcode:
const

  // Datumswerte vor/bis zum 01.01.1910 sind ungültig. (TcxDateEdit.Date und TCimDateEdit.Date)
  // Größer als 0, um z.B. auch AsDate+30 abzufangen
  // cxDateUtils.NullDate=-700000 (00.00.0000) / cxDateUtils.InvalidDate=-699999 / 0=30.12.1899 (und NULL)
  MyValidDate = 3654;
Alle Werte kleiner als 10 Jahre nach 0 gelten ungültig.
0 war der größte gemeinsame ungültige Wert, im System.

"Bissl" über 0, damit auch Werte gefiltert werden, welche z.B. mit einem Offset gefüllt wurden. (paar Tage bis Jahre ... z.B. zeige mir die nächsten 3 Jahre an, ausgelesen aus der Datenbank)
DateEdit.Date := Field.AsDataTime + Irgendwas;
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
NicoleWagner

Registriert seit: 6. Jul 2010
167 Beiträge
 
Delphi XE3 Professional
 
#7

AW: TPlannerDatePicker / Null Datum nicht zu fassen

  Alt 19. Aug 2020, 08:14
Uwe (und die anderen). Ja, darum veränderte ich es ja von Null aus now.

Unklar bleibt jedoch, warum die Null ÜBERGEBEN wird, obwohl die Komponente sichtbar ein anderes Datum EINGETRAGEN hat. (Zur Erinnerung: Mit dem Debugger kann ich auf die Werte zur Laufzeit nicht zugreifen, weil der Fehler nur in einer anderen Umgebung auftritt.)

So sieht die Prüfung / Ausgabe aus:

var s, s1, ausgabe: string;
datum: TDateTime;
SL: TStringList;
i: integer;
d: double;

....
d:=PlannerDatePicker_Termine.date; // Zugriff auf das Datum in der Komponente
if d=0 then begin
ShowMessage('bitte ein (gültiges) Datum eingeben');
exit;
end;

If not self.PlannerDatePicker_Termine.IsDateValid then begin
ShowMessage('Datum im DatePicker ist fehlerhaft');
exit;
end;

datum:=PlannerDatePicker_Termine.date; // datum wird zugewiesen

if RadioGroup_TerminNeu.ItemIndex=1 then begin
s1:=DateToStr(datum) + ' ';
.....
......
ausgabe:='Finanz: "' + s1 + ' ' + s + '" wurde gesichert in ' + Finanzdatei;// => hier sehe ich (manchmal!) das Datum 1899
end;
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 19:18 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