Hej
Jeg forsøger at gemme nedenstående record i en fil:
TKunde = record
ID: integer;
Aktiv: boolean;
Kundenr: string;
Navn: string;
Adresse1: string;
Adresse2: string;
Postnr: string;
By: string;
Telefon: String;
Mobiltelefon: String;
Telefax: String;
Email: String;
Biler: Array of Integer;
end;
Selve gemmefunktionen hedder:
procedure GemKunde(kunde: TKunde);
var
myStream: TMemoryStream;
begin
myStream := TMemoryStream.Create;
try
myStream.Write(Kunde, SizeOf(TKunde));
myStream.Seek(0, soFromBeginning);
myStream.SaveToFile(DataDir+inttostr(Kunde.id)+'.tbk');
finally
myStream.Free;
end;
end;
Og funktionen til at åbne med igen hedder:
procedure HentKunde(KundeID: integer; var kunde: TKunde);
var
myStream: TMemoryStream;
begin
if not FileExists(DataDir+inttostr(KundeID)+'.tbk') then exit;
myStream := TMemoryStream.Create;
try
myStream.LoadFromFile(DataDir+inttostr(KundeID)+'.tbk');
myStream.Read(Kunde, SizeOf(TKunde)); //<---Her opstår en access
violation...tror jeg...
finally
myStream.Free;
end;
end;
Gemmefunktionen virker fint, ingen problemer der. Men når jeg forsøger at
hente kunden ind igen opstår der en access violation og ved at udkommentere
mystream.read fremkommer fejlen ikke. Ovenstående kode er en lidt ombygget
version af eksemplerne i diskusionen i
http://groups.google.com/groups?hl=da&lr=&ie=UTF-8&oe=UTF-8&threadm=38a70fd4
..6191031%40news.inet.tele.dk&rnum=1&prev=/groups%3Fhl%3Dda%26lr%3D%26ie%3DUT
F-8%26oe%3DUTF-8%26selm%3D38a70fd4.6191031%2540news.inet.tele.dk
Mit udmidlbare gæt er at den array i min type driller lidt eller at den
"udefinerede" længde på min strings...men jeg er ved at køre lidt fast og
kunne godt bruge et hint eller to...
På forhånd tak
MVH
Thomas