Thema: Delphi AV bei Records laden

Einzelnen Beitrag anzeigen

Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

AV bei Records laden

  Alt 27. Jun 2006, 17:30
Hi,

Also erst mal meine Records:
Delphi-Quellcode:
rZinsen = packed record
 Start : TDateTime;
 Intervall: Zinsintervall;
 Kind : Zinsart;
 Value : Word;
end;

rSchulden = packed record
 Bei : String;
 Anlass : String;
 Betrag : Single;
 Zinsen : rZinsen;
 Gezahlt: Boolean;
end;
dann hab ich ne Klasse die die Schulden verwaltet:

Delphi-Quellcode:
TSchuldenliste = class
   private
    FStringgrid: TStringgrid;
    FItems: Array of rSchulden;
    FCount: Word;
    function GetItem(Index: Integer): rSchulden;
    procedure SetItem(Index: Integer; const Value: rSchulden);
   public
    constructor Create(Stringgrid: TStringgrid);
    procedure Add(Schulden: rSchulden);
    property Items[Index: Integer]: rSchulden read GetItem write SetItem;
    property Count: Word read FCount write FCount;
    procedure SaveToFile(Filename: String);
    procedure LoadFromFile(Filename: String);
  end;
und beim Laden von den Records gibts jetzt irgendwie beim zweiten Record einen Fehler.. das erste wird fehlerlos geladen (was heißt das es eigentlich nicht am speichern liegen kann.. weshalb ich die Speichern Procedure jetzt aus Platzgründen erst mal nicht poste).

Delphi-Quellcode:
procedure TSchuldenliste.LoadFromFile(Filename: String);
var MS: TMemoryStream;
    i, len: Integer;
begin
  MS := TMemoryStream.Create;
  Ms.LoadFromFile(Filename);
  Ms.Position := 0;

  Ms.Read(FCount, SizeOf(Word));
  SetLength(FItems,FCount);

  for i:= 0 to FCount-1 do begin
   Ms.Read(Len, SizeOf(Integer));
   SetLength(FItems[i].Bei,len);
   Ms.Read(FItems[i].Bei[1], len);
   Ms.Read(Len, SizeOf(Integer));
   SetLength(FItems[i].Anlass,len);
   Ms.Read(FItems[i].Anlass[1], len);
   Ms.Read(FItems[i].Betrag, SizeOf(Single));
   Ms.Read(FItems[i].Zinsen.Start, SizeOf(Double));
   Ms.Read(FItems[i].Zinsen.Intervall, SizeOf(Zinsintervall));
   Ms.Read(FItems[i].Zinsen.Kind, SizeOf(Zinsart));
   Ms.Read(FItems[i].Zinsen.Value, SizeOf(Integer));
   Ms.Read(FItems[i].Gezahlt, SizeOf(Boolean));
  end;
  
  Ms.Free; // Mit try-except etc hab ichs nicht so :D
end;
Wo liegt das Problem ?
Das Array FItems ist auch groß genug nach SetLength.. Aber was läuft denn da falsch ?

PS: Ach ja der Debugger bleibt bei beim zweiten mal beim ersten SetLength stehn...

Gruß
Neutral General
Michael
  Mit Zitat antworten Zitat