hab einen Stream angelegt, der eine Liste von Records abspeichert.
Diese Liste soll jedoch dynamsich erhöt werden können. Dafür nutze ich ein Array.
Der Befehl BefNachteil.Lesen ließt die Records korrekt aus (z. Z. 4 Datensätze; sprich der Zeiger sitzt auf 3). Nu soll noch ein weiterer Datensatz hinzu gefügt werden, aber das SetLength mach Probleme. Seltsamerweise wird Nachteil.ID normal geschrieben und bei Nachteil.Name bekomme ich eine Zugriffsverletzungs-Fehlermeldung. Wer weiß Rat?
Code:
procedure TNachteil.Schreiben;
var
Stream: TStream;
I, H: integer;
Len: Longint;
begin
BefNachteil.Lesen;
H := High(Nachteil)+1;
SetLength(Nachteil,H);
Nachteil[H].ID := 1;
ShowMessage(inttostr(High(Nachteil)));
Nachteil[H].Name := 'Ein Name';
ShowMessage(inttostr(H));
{
Stream := TFileStream.Create('StreamTest.dct', fmCreate);
try
Len := Length(Nachteil);
Stream.Write(Len, SizeOf(Len));
for I := 0 to Length(Nachteil) - 1 do
begin
Stream.Write(Nachteil[I].ID, SizeOf(Nachteil[I].ID));
Len := Length(Nachteil[I].Name);
Stream.Write(Len, SizeOf(Len));
Stream.Write(PChar(Nachteil[I].Name)^, Len);
end;
finally
Stream.Free;
end; }
end;
procedure TNachteil.Lesen;
var
Stream: TStream;
I: integer;
Len: Longint;
begin
Stream := TFileStream.Create('StreamTest.dct', fmOpenRead);
try
Stream.Read(Len, SizeOf(Len));
SetLength(Nachteil, Len);
for I := 0 to Len - 1 do
begin
Stream.Read(Nachteil[I].ID, SizeOf(Nachteil[I].ID));
Stream.Read(Len, SizeOf(Len));
SetLength(Nachteil[I].Name, Len);
Stream.Read(PChar(Nachteil[I].Name)^, Len)
end;
finally
Stream.Free;
end;
end;