![]() |
Inhalt wird nicht gespeichert?
Hallo,
wie ihr sicherlich schon mitbekommen habt, bin ich gerade ziemlich intensiv am Programmieren. Leider habe ich mal wieder ein Problem: Ich speicher diverse Inhalte in einem Filestream und lese die auch wieder aus. Der Inhalt des folgenden Edit-Feldes wird leider nicht gespeichert und ich weiß irgendwie nicht warum nicht? :(
Delphi-Quellcode:
Hier wird der Inhalt des Edit-Feldes in eine Variable geschrieben:
GesMengeEdt.Text := IntToStr(sum);
Delphi-Quellcode:
cock.SetGesMenge(GesMengeEdt.Text);
Delphi-Quellcode:
procedure cock.SetGesMenge (n : string);
begin GesMenge := n; end; Hier wird der Inhalt (neben vielen anderen Sachen) gespeichert:
Delphi-Quellcode:
FS.Write(GesMenge,sizeOF(GesMenge));
Leider erscheint in der .dat Datei nichts. Alles andere, was ich so abspeicher, steht in der .dat Datei drin. Jedoch der Inhalt des o.g. Edit-Feldes nicht. Woran kann das liegen? :( |
Re: Inhalt wird nicht gespeichert?
Zeig mal das komplette Codefragment
|
Re: Inhalt wird nicht gespeichert?
Codefragment von?
|
Re: Inhalt wird nicht gespeichert?
Des ganzen Vorgangs der Speicherung ( von der Erzeugung des Streams bis zum Schliessen desgleichen)
|
Re: Inhalt wird nicht gespeichert?
Zitat:
Delphi-Quellcode:
procedure TAuto.InDateiSchreiben (var Fs : TFilestream); (* -------------------------------------------------------------------- *) var i : integer; begin FS.Write(Name, sizeOF(Name)); FS.Write(Kennzeichen, sizeOF(Kennzeichen)); FS.Write(GeschGer, sizeOF(GeschGer)); FS.Write(Farbe, sizeOF(Farbe)); FS.Write(Preis, sizeOF(Preis)); FS.Write(DX, sizeOF(DX)); FS.Write(GesMenge,sizeOF(GesMenge)); //wird, wie gesagt nicht gespeichert :(
Delphi-Quellcode:
procedure TListe.Store(Dateiname : string);
(* -------------------------------------------------------------------- *) var Elem : TElement; Fs : TFilestream; begin DeleteFile(Dateiname); Fs := TFilestream.Create(Dateiname, fmCreate); if not IsEmpty then begin Fs.Write(Lilaenge, SizeOf(Lilaenge)); First; while NOT EoList do begin Elem := GetElement; Elem.InDateiSchreiben (Fs); inc(AktuellePos); end; end; Fs.Free; end; |
Re: Inhalt wird nicht gespeichert?
Dieser Klassenmethgodenaufruf wird nicht funktionieren:
Delphi-Quellcode:
cock.SetGesMenge(GesMengeEdt.Text);
|
Re: Inhalt wird nicht gespeichert?
Warum nicht?
Ich habe ihn soeben geändert:
Delphi-Quellcode:
Auto.SetGesMenge(GesMengeEdt.Text);
|
Re: Inhalt wird nicht gespeichert?
Hi,
das übliche Problem: Ein String ist ein Zeiger. Den speicherst du, nicht den Inhalt des Strings. Mfg FAlter |
Re: Inhalt wird nicht gespeichert?
Zitat:
|
Re: Inhalt wird nicht gespeichert?
Delphi-Quellcode:
Dem Code nach heißt die Klasse cock
Warum nicht?
|
Re: Inhalt wird nicht gespeichert?
Zitat:
Selbst wenn das Programm hier ist:
Delphi-Quellcode:
Befindet sich in der Variable GesMenge der richtige Wert :?
FS.Write(GesMenge,sizeOF(GesMenge));
@ FAlter, Könntest du mir das genauer erläutern, was du geschrieben hast? |
Re: Inhalt wird nicht gespeichert?
Hi,
um Strings in einen Stream zu schreiben, hab ich folgenden Classhelper:
Delphi-Quellcode:
unit uclasshelpers;
interface uses Classes; type // Klassenhelfer für den TStream um Strings komfortabel lesen und schreiben zu können TStreamHelper = class helper for TStream public procedure WriteString(const aString: string); function ReadString: string; end; implementation { TStreamStringWriter } // Liest einen String aus und gibt ihn zurück function TStreamHelper.ReadString: string; var len: Integer; begin ReadBuffer(len, SizeOf(Integer)); SetString(Result, PChar(nil), len); ReadBuffer(Pointer(Result)^, len); end; // Schreibt einen String in den Stream procedure TStreamHelper.WriteString(const aString: string); var len: Integer; begin len := Length(aString); WriteBuffer(len, SizeOf(Integer)); WriteBuffer(PChar(aString)^, len); end; end. |
Re: Inhalt wird nicht gespeichert?
Ja nur ich versteh ich nicht wo mein Fehler liegt, wenn es sonst mit den anderen Elementen funktioniert? In der dat Datei steht alles richtig drin, nur dieser eine Wert des einen Edit-Feldes fehlt!?
Beim lesen findet er dann diesen Wert nicht mehr:
Delphi-Quellcode:
FS.Read(GesMenge, sizeOF(GesMenge));
|
Re: Inhalt wird nicht gespeichert?
Ist GesMenge eine Eigenschaft der Klasse? Typ?
Zitat:
Beim lesen findet er den Wert nicht mehr:
Delphi-Quellcode:
Ist ja auch logisch. Vor dem Lesen ist der String auch leer. Du musst die Länge mit in den Stream speichern. Zudem würde ich bei Strings die Länge und nicht sizeOf nehmen.
FS.Read(GesMenge, sizeOF(GesMenge));
|
Re: Inhalt wird nicht gespeichert?
GesMenge ist in der selben Klasse in der auch die Speicher-Prozedur aufgerufen wird.
|
Re: Inhalt wird nicht gespeichert?
Zitat:
Delphi-Quellcode:
procedure TAuto.InDateiSchreiben (var Fs : TFilestream);
(* -------------------------------------------------------------------- *) var i : integer; begin FS.Write(Name, sizeOF(Name)); FS.Write(Kennzeichen, sizeOF(Kennzeichen)); FS.Write(GeschGer, sizeOF(GeschGer)); FS.Write(Farbe, sizeOF(Farbe)); FS.Write(Preis, sizeOF(Preis)); FS.Write(DX, sizeOF(DX)); FS.Write(GesMenge,sizeOF(GesMenge)); //wird, wie gesagt nicht gespeichert :( |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:58 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