Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Komisches Datum mit DateTime und INI-Datei (https://www.delphipraxis.net/42775-komisches-datum-mit-datetime-und-ini-datei.html)

Spurius 23. Mär 2005 18:52


Komisches Datum mit DateTime und INI-Datei
 
Hallo,
ich leser mit Ini.ReadDate ein DAtum aus einer INI-Datei, was auch korrekt da drinsteht. Wenn ich es dann mit DateToStr() in einen String umwandel, bekomme ich aus 21.03.2005 -->> 30.12.1899.
Und das stimmt jetzt nicht wirklich, könnt ihr mir weiterhelfen?
Gruß
Spurius

Computerbabalulu 23. Mär 2005 18:54

Re: Komisches Datum mit DateTime und INI-Datei
 
Hi Spurius...

Ein bissel Source wäre für die Lösung deiner Sorgen hilfreich :zwinker:

Gruß Frank

semo 23. Mär 2005 18:57

Re: Komisches Datum mit DateTime und INI-Datei
 
klingt ganz danach als wenn du ein "leeres" Datum herausbekommst.


mal ne andere frage: wenn du es eh in einen string beim Auslesen umwandelst, warum speicherst du es dann nicht gleich als String?

Spurius 23. Mär 2005 18:59

Re: Komisches Datum mit DateTime und INI-Datei
 
Hallo,
Delphi-Quellcode:
Fangdatum := Ini.ReadDate(ActiveAngler + IntToStr(j), 'Fangdatum',0);
Ich glaube es liegt an der 0 hinten, ich weiss nur nicht was ich da sonst reinschreiben soll.

Binärbaum 23. Mär 2005 19:03

Re: Komisches Datum mit DateTime und INI-Datei
 
Statt der 0 könnte man was mit Encodedate machen:
Delphi-Quellcode:
Fangdatum := Ini.ReadDate(ActiveAngler + IntToStr(j), 'Fangdatum', EncodeDate(2005, 3, 23));
MfG
Binärbaum

Sharky 23. Mär 2005 19:03

Re: Komisches Datum mit DateTime und INI-Datei
 
Zitat:

Zitat von Spurius
...
Ich glaube es liegt an der 0 hinten, ich weiss nur nicht was ich da sonst reinschreiben soll.

Hai Spurius,
der letze Parameter beim Ini.Readxx ist der Defaultwert. Dieser wird verwendet wenn der Eintrag den man aus der Ini lesen möchte nicht vorhanden ist.

TheMiller 23. Mär 2005 19:07

Re: Komisches Datum mit DateTime und INI-Datei
 
Hi,

das Problem hatte ich auch. Versuche mal im DateTimePicker das Datum auszuwählen, auch wenn es schon auf dem heutigen bzw korrekt eingestellt ist. Scheint ein Bug in der Komponente zu sein. Habe meine Programme so eingestellt, dass das Programm erst weiter geht, wenn das DatumsPopup aufgemacht und (vonmiraus) das gleich Datum neu angeklickt wird. Dann funzt es bei mir

semo 23. Mär 2005 19:17

Re: Komisches Datum mit DateTime und INI-Datei
 
das ist aber nicht gerade userfreundlich oder?
wie wärs denn mit datetimpicker.date= now() oder sowas in der richtung?
bzw ein anderes datum ansetzen.

TheMiller 23. Mär 2005 19:19

Re: Komisches Datum mit DateTime und INI-Datei
 
Das funzt auch nicht immer. Ich musste es immer per Hand neu auswählen. Dann ging alles Prima.

Spurius 23. Mär 2005 19:56

Re: Komisches Datum mit DateTime und INI-Datei
 
Das Problem liegt ja nicht an der DateTime Komponente, da das Datum ja richtig gespeichert wird, das Problem scheint bei der Umwandlung zu liegen.

TheMiller 23. Mär 2005 19:59

Re: Komisches Datum mit DateTime und INI-Datei
 
Ich kann nur sagen, dass ich nicht in einer ini, sondern in einer MySQL-Datenbank auf einem Linux-Rechner gespeichert habe und das Ergebnis war das gleiche...

Spurius 23. Mär 2005 20:13

Re: Komisches Datum mit DateTime und INI-Datei
 
Hallo,
also wenn ich das Datum gleich in einen String umwandel, steht das Datum wieder korrekt in der Ini-Datei, beim auslesen wird allerdings ein leerer Wert zurückgegeben.

Binärbaum 23. Mär 2005 20:14

Re: Komisches Datum mit DateTime und INI-Datei
 
Zitat:

Zitat von Spurius
Das Problem liegt ja nicht an der DateTime Komponente, da das Datum ja richtig gespeichert wird, das Problem scheint bei der Umwandlung zu liegen.

Wie wandelst du das Datum denn um? Mit Delphi-Referenz durchsuchenDateToStr?

Spurius 23. Mär 2005 20:19

Re: Komisches Datum mit DateTime und INI-Datei
 
Ja, mit DateToStr().

Binärbaum 23. Mär 2005 20:22

Re: Komisches Datum mit DateTime und INI-Datei
 
Also ich hatte mit Delphi-Referenz durchsuchenDateToStr bis jetzt noch keine Probleme. Vielleicht wird vor der Umwandlung noch irgendwo auf das Datum zugegriffen und selbiges geändert?
Du könntest ja mal den entsprechenden Codeabschnitt posten.

Spurius 23. Mär 2005 20:28

Re: Komisches Datum mit DateTime und INI-Datei
 
Hallo,
das ganze soll eine Fischfangverwaltungssoftware werden, wir fahren morgen los nach Norwegen:

Schreiben:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
Var Ini: TInifile;
    Fangzahl: Integer;
    Test: String;
begin
 Ini := TInifile.Create(ExtractFilePath(ParamStr(0)) +'angeln.ini');
 Fangzahl := Ini.ReadInteger(Combobox1.Text, 'Fangzahl',0);
 Test := FileListBox1.Directory + FileListBox1.FileName;
 Ini.WriteString(Combobox1.Text + IntToStr(Fangzahl),'Fischart',combobox2.Text);
 Ini.WriteString(Combobox1.Text + IntToStr(Fangzahl),'Fischgewicht',Edit1.Text);
 Ini.WriteString(Combobox1.Text + IntToStr(Fangzahl),'Fischlaenge',Edit2.Text);
 Ini.WriteString(Combobox1.Text + IntToStr(Fangzahl),'Datum', DateToStr(date1.Date)); // <-- DA
 Ini.WriteInteger(Combobox1.Text, 'Fangzahl', Fangzahl + 1);
 Ini.WriteString(Combobox1.Text + IntToStr(Fangzahl),'Bildpfad',Test);
 Combobox1.Clear;
 Combobox2.Clear;
 Edit1.Text := '';
 Edit2.Text := '';
 Date1.DateTime := Date1.Date;
 Combobox_fill;

end;

Lesen:
Delphi-Quellcode:
procedure tform1.make_tree;
var Ini: TInifile;
    Node1, Node2, Node3: TTreeNode;
    i,j,k,l, Angleranzahl, Anglerfischanzahl: Integer;
    Fangdatum, Name, Fischart, Anglerfischart, ActiveAngler, Fischgewicht, Fischlaenge, Bildpfad: String;
    deci: Boolean;
begin
  Ini := TInifile.Create(ExtractFilePath(ParamStr(0)) + 'angeln.ini');
  Angleranzahl := Ini.ReadInteger('Einstellungen', 'Angleranzahl',0);
  For i := 0 to Angleranzahl - 1 do begin
   Name := Ini.ReadString('Angler', 'Angler' + IntToStr(i), '');
   node1 := TreeView1.Items.Add(nil, Name);
   ActiveAngler := Ini.ReadString('Angler','Angler' + IntToStr(i),'');
   Anglerfischanzahl := Ini.ReadInteger(ActiveAngler, 'Fangzahl', 0);
    For j := 0 to Anglerfischanzahl - 1 do begin
     Bildpfad := Ini.ReadString(ActiveAngler + IntToStr(j), 'Bildpfad', '');
     Anglerfischart := Ini.ReadString(ActiveAngler + IntToStr(j), 'Fischart', '');
     Fischgewicht := Ini.ReadString(ActiveAngler + IntToStr(j), 'Fischgewicht','');
     Fangdatum := Ini.ReadString(ActiveAngler + IntToStr(j), 'Fangdatum','');       // <--DA
     Fischlaenge := Ini.ReadString(ActiveAngler + IntToStr(j), 'Fischlaenge','');
     node1 := TreeView1.Items.AddChild(node1, anglerfischart);
     Treeview1.Items.AddChild(node1, Fischgewicht);
     Treeview1.Items.AddChild(node1, Fischlaenge);
     Treeview1.Items.AddChild(node1, Fangdatum);
     Treeview1.Items.AddChild(node1, Bildpfad);
     node1 := node1.Parent;
    end;
end;
end;
Weiss nicht ob euch das was nützt, ist nicht sehr sauber programmiert.

TeronG 23. Mär 2005 20:33

Re: Komisches Datum mit DateTime und INI-Datei
 
Zitat:

Zitat von Spurius
Hallo,
Delphi-Quellcode:
Fangdatum := Ini.ReadDate(ActiveAngler + IntToStr(j), 'Fangdatum',0);
Ich glaube es liegt an der 0 hinten, ich weiss nur nicht was ich da sonst reinschreiben soll.

Ich hatte schon öfter mal (zu PE zeiten :mrgreen:) ein Datum in eine ini geschrieben und gelesen klappte bis dato immer recht anstandslos...

Ist denn Fangdatum Global bzw. wandelst du Fangdatum in der Gleichen Function/procedure um?
denn 30.12.1899 hört sich ziemlich nach "0" an :gruebel: Wirf uns doch mal evtl bissl mer Source in die Runde ^^
[EDIT] :oops: sorry hab die 2te seite übersehen :oops: :wall: [/edit]

Binärbaum 23. Mär 2005 20:42

Re: Komisches Datum mit DateTime und INI-Datei
 
Also beim Schreiben verwendest du
Delphi-Quellcode:
Ini.WriteString(Combobox1.Text + IntToStr(Fangzahl),'Datum', DateToStr(date1.Date));
und beim Lesen
Delphi-Quellcode:
Fangdatum := Ini.ReadString(ActiveAngler + IntToStr(j), 'Fangdatum','');
Es wird also immer der Default-Wert zurückgegeben, da 'Fangdatum' und 'Datum' zwei unterschiedliche Strings sind. Es wird also immer ein wert für Datum geschrieben, aber versucht, Fangdatum zu lesen. Da letzterer aber logischerweise nicht in die Ini geschrieben wurde, wird dir immer der default-Wert, bei dir also 0, oder halt der 31.12.1899, zurückgegeben.

MfG
Binärbaum

TeronG 23. Mär 2005 20:44

Re: Komisches Datum mit DateTime und INI-Datei
 
Ini.WriteString(Combobox1.Text + IntToStr(Fangzahl),'Datum', DateToStr(date1.Date)); // <-- DA
Fangdatum := Ini.ReadString(ActiveAngler + IntToStr(j), 'Fangdatum',''); // <--DA

Mir ist jetzt auf die schnelle (du musst ja bald weg :zwinker:) nur das aufgefallen ...

[EDIT]Jetzt schreib ich eh schon so wenig und bin doch wieder zu langsam :roll: [/EDIT]

Spurius 23. Mär 2005 20:56

Re: Komisches Datum mit DateTime und INI-Datei
 
Hallo,
sry dass ich so lang genervt habe, ihr habt den Fehler gefunden, ich habe Datum in Fangdatum umgeändert, jetzt geht es.
Also vielen, vielen Dank!
Gruß
Spurius

TeronG 23. Mär 2005 21:38

Re: Komisches Datum mit DateTime und INI-Datei
 
Zitat:

Zitat von Spurius
sry dass ich so lang genervt habe, ihr habt den Fehler gefunden, ich habe Datum in Fangdatum umgeändert, jetzt geht es.
Also vielen, vielen Dank!
Gruß
Spurius

NP :)
und viel Spaß in Norwegen :hi:


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:00 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 by Thomas Breitkreuz