Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi TDate/TDateTime in Filestream speichern (https://www.delphipraxis.net/85442-tdate-tdatetime-filestream-speichern.html)

Antigo 30. Jan 2007 20:56


TDate/TDateTime in Filestream speichern
 
Hi,
ich möchte die Datumsangaben in 2 Datepickern in eine Datei speichern. Einmal ein Datum, einmal eine Uhrzeit. Nur wie geht das? :oops:

Wenn ich versuche das wie einen String, einen Integer Wert oder eine Boolean Variable zu speichern, sagt er mir es wäre eine Variable erforderlich. Irgendwo hier im Forum hab ich dann gesehen, dass es jemand als String gespeichert hat. Also hab ich versucht es per DateToStr bzw. DateTimeToStr zu speichern. Aber beim einlesen bekomme ich dann einen Error bei StrToDate.

Jemand eine Idee?

Danke schonmal :)

Christian Seehase 30. Jan 2007 23:03

Re: TDate/TDateTime in Filestream speichern
 
Moin Michael,

Zitat:

Zitat von Antigo
Aber beim einlesen bekomme ich dann einen Error bei StrToDate.

Jemand eine Idee?

Ja.
  • Du machst beim Schreiben der Daten etwas falsch.
  • Du machst beim Lesen der Daten etwas falsch.
  • Beides.

;-)

Zeig' uns doch mal, wie Du die Daten schreibst/liest.

Steve 31. Jan 2007 07:16

Re: TDate/TDateTime in Filestream speichern
 
Hi,

wenn eine Variable erforderlich ist, dann benutz doch eine Variable ;-)
Delphi-Quellcode:
var
  F     : TFileStream;
  myDate : TDateTime;
begin
  F     := TFileStream.Create('C:\test.dat',fmCreate);
  myDate := DateTimePicker1.Date;
  F.Write(myDate, SizeOf(myDate));
  F.Free;
end;
PS: Warum als Integer speichern? Benutz doch den richtigen Datentyp TDateTime (=Double) ;)

Gruß
Stephan

Antigo 31. Jan 2007 14:34

Re: TDate/TDateTime in Filestream speichern
 
danke für die Antowrten, ich habs jetzt so probiert:

Schreiben
Delphi-Quellcode:
var
  date:TDate;
  time:TDateTime;
begin
  ...
  ...
  //Alarm////
  //Alarm ein?
  Stream.Write(Notizen[i].chkAlarm, SizeOf(Notizen[i].chkAlarm));
  //Sound ein?
  Stream.Write(Notizen[i].chkAlarmSound, SizeOf(Notizen[i].chkAlarmSound));
  //Date1
  date:=Notizen[i].DateTimePicker1.date;
  Stream.Write(date, SizeOf(date));
  //Date2 Uhrzeit
  time:=Notizen[i].DateTimePicker2.Time;
  Stream.Write(time, SizeOf(time));
  ...
end;
soweit alles ok
Lesen:
Delphi-Quellcode:
var
  date:TDate;
  time:TDateTime;
begin
  ...
  ...
  //Alarm////
  //Alarm ein?
  Stream.Read(bool, SizeOf(bool));
  Notizen[i].chkAlarm.Checked:=bool;
  //Sound ein?
  Stream.Read(bool, SizeOf(bool));
  Notizen[i].chkAlarmSound.Checked:=bool;
  //Date1
  Stream.read(date, SizeOf(date));
  Notizen[i].DateTimePicker1.date:=date;
  //Date2 Uhrzeit
  beep; //<<-- hier wird der Fehler Ungültige Gleitkommaoperation angezeigt. Gemeint ist wohl der vorherige Befehl
  Stream.read(time, SizeOf(time));
  Notizen[i].DateTimePicker2.Time:=time;
  ...
end;
Jo und beim Lesen bekomme ich eine Ungültige Gleitkomma Operation. Warum auch immer -_-

Ich bitte um Hilfe ;)

inherited 31. Jan 2007 14:38

Re: TDate/TDateTime in Filestream speichern
 
Du speicherst chkAlarm, was eine Komponente ist und liest nur die Property .Checked. Kurz: Du solltest auch die nur .Chekced speichern.
Warum nimmst du keine Ini-Files daher? Die sind für so etwas ausgelegt und wesentlich einfacher zu bedienen!

Antigo 31. Jan 2007 14:45

Re: TDate/TDateTime in Filestream speichern
 
Zitat:

Zitat von inherited
Du speicherst chkAlarm, was eine Komponente ist und liest nur die Property .Checked. Kurz: Du solltest auch die nur .Chekced speichern.
Warum nimmst du keine Ini-Files daher? Die sind für so etwas ausgelegt und wesentlich einfacher zu bedienen!

Super, das wars schon :)
Eigentlich wollte ich auch nur die Eigenschaft .checked speichern, habs entweder vergessen oder mich verschrieben. Naja jetzt funktionierts jedenfalls, auch wenn ich wieder eine Zwischenvariable benutzen musste.

Ini Files wären perfekt dafür, ich hatte nur keine Lust mein Programm durch die 32kb Grenze einzuschränken.

vielen dank auf jeden Fall :)

himitsu 31. Jan 2007 15:00

Re: TDate/TDateTime in Filestream speichern
 
war das nicht eine 64KB-Grenze (und die "nur" under Win9X/ME)?

und 64KB sind schon recht viel sollten eigentlich (in den meisten Fällen) ausreichend sein.

Das mit der Zwischenvariable:
tja, leider ist das ja ein Property und dort kann man nur Lesen und schreiben, also kann man es zum Auslesen nicht an einen Var-Parameter übergeben.


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