Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Inhalt wird nicht gespeichert? (https://www.delphipraxis.net/115844-inhalt-wird-nicht-gespeichert.html)

mo_greene 18. Jun 2008 21:07

Re: Inhalt wird nicht gespeichert?
 
Zitat:

Zitat von mkinzler
Delphi-Quellcode:
Warum nicht?
Dem Code nach heißt die Klasse cock

Ja, wie gesagt, dass war nur eine Sache die ich hier im Forum geändert hatte. Im Programm ist dieser Aufruf richtig.


Selbst wenn das Programm hier ist:

Delphi-Quellcode:
  FS.Write(GesMenge,sizeOF(GesMenge));
Befindet sich in der Variable GesMenge der richtige Wert :?

@ FAlter, Könntest du mir das genauer erläutern, was du geschrieben hast?

Die Muhkuh 18. Jun 2008 21:09

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.

mo_greene 18. Jun 2008 21:11

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));

mkinzler 18. Jun 2008 21:12

Re: Inhalt wird nicht gespeichert?
 
Ist GesMenge eine Eigenschaft der Klasse? Typ?
Zitat:

@ FAlter, Könntest du mir das genauer erläutern, was du geschrieben hast?
sizeOf() eines Zeigers ergibt immer 4. Dürfte bei einem String dank compiler magic nicht passieren.
Beim lesen findet er den Wert nicht mehr:
Delphi-Quellcode:
FS.Read(GesMenge, sizeOF(GesMenge));
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.

mo_greene 18. Jun 2008 21:13

Re: Inhalt wird nicht gespeichert?
 
GesMenge ist in der selben Klasse in der auch die Speicher-Prozedur aufgerufen wird.

mo_greene 18. Jun 2008 21:22

Re: Inhalt wird nicht gespeichert?
 
Zitat:

Zitat von mkinzler
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.

Ja ok, aber warum funktioniert es mit allen, außer mit dem einen?

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 04:39 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz