Autor Beitrag
Tranx
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 648
Erhaltene Danke: 85

WIN 2000, WIN XP
D5 Prof
BeitragVerfasst: Mo 28.03.11 07:58 
Hallo Leute,

habe gerade mal wieder einen merkwürdigen Effekt bei einem Rechner festgestellt. Das Betriebssystem ist Windows 7 64 bit. Bisher lief mein Programm auf allen anderen Betriebssystemen. Nun gab es den Fehler aus: '01.01.90' ist kein Datum. Ich habe getestet. (Wie gesagt 64bit Windows7) Das Betriebssystem verlangt den Teiler "/" als Trennstrich. Und das, obwohl in den Systemeinstellungen überall der Punkt steht. Selbst Shortdateformat zu setzen bewirkt nichts. Damit nun das Programm auf allen Betriebssystemen läuft, habe ich die StrToDate-Funktion "ergänzt" (s.u.). Nun funktioniert es wieder. Doch ich weiß nicht, warum überhaupt dieser Fehler auftrat. Bei dem 32bit Windows 7 trat der Fehler - wie gesagt - nicht auf.

Weiß jemand, wieso das so ist?

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
function StringToDate(s : string) : TDateTime;
begin
  try
     Result := StrToDate(s);
  except
     while Pos('.',s)>0 do
     begin
       s[Pos('.',s)] := '/';
     end;
     try
        Result := StrToDate(s);
     except
        Result := -1;
     end;
  end;
  Result := d;
end;


Das Ergebnis -1 ist als Ergebnis für Nichtdatumstrings gedacht.

_________________
Toleranz ist eine Grundvoraussetzung für das Leben.
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: Mo 28.03.11 09:13 
Ja, darauf sind wir auch schon gestoßen - ist ein Problem von Windows.
Einmal in die Regionaleinstellungen in der Systemsteuerung gehen, einen Wert ändern, speichern, zurückändern, speichern, funktioniert. :roll:

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 28.03.11 11:12 
Genauer gesagt gibt es das soweit ich das bisher bemerkt habe bei diversen OEM-Versionen, bei denen die Hersteller vermutlich ein englisches Windows als Vorlage genommen und dann Einstellungen auf ein deutsches übertragen haben.
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mo 28.03.11 11:12 
Moin!

Tipp am Rande: wenn du von den Betriebssystemeinstellungen unabhängig sein willst, kannst du auch ein eigenes Set an Einstellungen verwenden:
DOH hat folgendes geschrieben:
ausblenden Delphi-Quelltext
1:
2:
function StrToDate(const S: string): TDateTime; overload;
function StrToDate(const S: stringconst FormatSettings: TFormatSettings): TDateTime; overload;
Richtig spannend wäre, ob dann der "Fehler" auch auftritt. :idea: :nixweiss:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
jaevencooler
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 166
Erhaltene Danke: 6

MS-DOS,Win32, Win95, Win 98, Me,XP, Linux, NT4.0, NT 2000-2008, Vista, Windows 7
Turbo Pascal,D1 Enter,D2 Enter,D3 Enter,D5 Enter, Kylix, D2007, PL/SQL, MS/SQL, Delphi 2010, Delphi XE
BeitragVerfasst: Mo 28.03.11 11:17 
Tach auch,

das Problem hatten wir auch gerade bei einem großen Automobil Hersteller aus Stuttgart.
Dort wird auf Windows 7 64 Bit umgestellt, und diese Datum Format Problem ist dort bereits auc scho aufgetaucht,
aber eine Lösung seitens Mikrosoft noch nicht vorgestellt....

Ich werde das morgen auf einer Testmaschine mal ausprobieren, und dann berichten.


Beste Grüße
Michael

_________________
Wissen ist Macht, nichts wissen macht auch nichts...
jaevencooler
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 166
Erhaltene Danke: 6

MS-DOS,Win32, Win95, Win 98, Me,XP, Linux, NT4.0, NT 2000-2008, Vista, Windows 7
Turbo Pascal,D1 Enter,D2 Enter,D3 Enter,D5 Enter, Kylix, D2007, PL/SQL, MS/SQL, Delphi 2010, Delphi XE
BeitragVerfasst: Mi 30.03.11 15:19 
Tach auch,

so jetzt nochmal ein kleines Update zu dem Thema:

Am zuverlässigsten funktioniert die Variante das man in den Ländereinstellungen ein anderes Land auswählt,
speichert und dann wieder auf die ursprüngliche Einstellung zurück stellt und speichert.

Einzelne Werte in den Ländereinstellungen ändern hat nicht immer zum Erfolg geführt.
(getestet an ca. 50 Rechnern / Laptops; Microsoft Win 7, 64 Bit, Enterprise)

Laut Microsoft ist das Problem bekannt, wann es behoben wird konnte man uns nicht mitteilen.

Beste Grüße
Michael

_________________
Wissen ist Macht, nichts wissen macht auch nichts...
Tranx Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 648
Erhaltene Danke: 85

WIN 2000, WIN XP
D5 Prof
BeitragVerfasst: Do 31.03.11 06:31 
Danke für die Hinweise. Da allerdings auch andere Programme - welche ich nicht bearbeiten kann - Probleme mit der 64bit-Version haben, werde ich sowieso das Ganze auf 32bit umstellen müssen. Da hatte ich komischerweise keine Problem mit dem Datumsformat. An Windows 7 liegt es also nicht. Was allerdings der größere Adressraum mit Zahlen- und Datumsformaten zu tun haben soll, ist mir echt schleierhaft. Fragt sich da nur, was sonst alles noch nicht so läuft, wie es laufen soll.

Und zu dem größeren Adressraum. Schön. Aber hat sich Microsoft überhaupt Gedanken gemacht, wie sie den einigermaßen sinnvoll nutzbar machen wollen? Wenn ich an Word denke, mit Texten, die mehrere Seiten mit mehreren Bildern, eingebundenen Excel-Tabellen und Word-Grafiken (ganz grauenhaft, echt Risiko!) enthalten, denke, dann graut mir davor, was mit Dokumenten passiert, die nicht 30 MB sondern 3 GB groß sind. Dann kann man wohl die Steinzeit-PC-Methode nehmen: Daten eingeben, an Zentralrechner senden, dort verarbeiten lassen, und ma nächsten Tag hoffentlich das richtige Ergebnis erhalten. ;)

_________________
Toleranz ist eine Grundvoraussetzung für das Leben.
Andreas Schilling
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 128
Erhaltene Danke: 1

WIN XP, WIN 7
Delphi 5 Ent, Delphi 2007 Pro, XE4
BeitragVerfasst: Do 31.03.11 07:13 
Das Probleme hatte ich auch mit dem Datumsfehler. Aber seit ich folgenden Quelltext in jedes Programm gleich zu Beginn eingebaut habe ich keine Fehlermeldungen mehr von Kunden bekommen. Groß- / Kleinschreibung spielt auch eine Rolle.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
  DateSeparator := '.';
  ShortDateFormat := 'dd.mm.yyyy'// <-- das hatte ich vorher groß geschrieben, kam auch Fehlermeldung
  TimeSeparator := ':';
  ShortTimeFormat := 'HH:mm';
  LongTimeFormat := 'HH:mm:ss';


Gruß Andreas
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: Do 31.03.11 07:28 
Damit legst Du Dich aber z.B. auf den Punkt beim Datum fest. Wenn Du nun einen Kunden hast, der sich den / eingestellt hat, wird der meckern. Spätestens wenn man sein Programm nicht nur innerhalb Deutschlands verkauft, gibts Probleme.

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
Andreas Schilling
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 128
Erhaltene Danke: 1

WIN XP, WIN 7
Delphi 5 Ent, Delphi 2007 Pro, XE4
BeitragVerfasst: Do 31.03.11 07:43 
Ja ich lege mich damit fest. Einmal werden unsere Programme sowieso nur in Deutschland vertrieben und in den Programmen selber gibt es Maskedits, welche dieses Format erwarten. Ich hatte ohne diese Festlegung auch Probleme Datumswerte direkt über DBEditfelder (mit Datumsmaske) in Firebird-Datenbanken zu schreiben. Wer eine internationale Kundschaft hat, muß das Problem halt anders lösen.

Gruß Andreas
dickeWade
Hält's aus hier
Beiträge: 14
Erhaltene Danke: 1

Win95, Vista
Delphi 3, Delphi 7
BeitragVerfasst: Do 31.03.11 17:42 
user profile iconNersgatt hat folgendes geschrieben Zum zitierten Posting springen:
Ja, darauf sind wir auch schon gestoßen - ist ein Problem von Windows.
Einmal in die Regionaleinstellungen in der Systemsteuerung gehen, einen Wert ändern, speichern, zurückändern, speichern, funktioniert. :roll:

Hab ich gestern probiert. Solange das Programm läuft nimmt es die neuen Einstellungen auch an. Hab ich geprüft mit
ausblenden Delphi-Quelltext
1:
PostMessage(DateToStr(Date));					

Aber nach Neustart des Programms ist wieder alles beim Alten und ich hab wieder das Format: "mm/dd/yy" statt "dd.mm.yy". Hab das kurzfristig erst mal geändert in dem ich DateToStr(Date) überprüfe und wenn da ein Schrägstich vorkommt, bastel ich den Datumsstring erstmal um bevor ich den an die Funktion StrToDate übergebe. Ist umständlich und ich werde mir mal bei Gelegenheit eine eigene Formatroutine zusammenfriemeln in der ich dann EncodeDate und DecodeDate benutze.

Gruss Tommi