Access Violation...... Zapis listy jednokierunkowej do pliku

0

Witam,

od wczoraj męczę się nad wyeliminowaniem błędu AccessViolation występującego po wywołaniu procedury zapisującej listę do pliku .dat - kompiluje bez problemu. Lista istnieje - jest wyświetlana wcześniej w ListView. Mógłby ktoś sprawdzić, gdzie może wystąpić błąd? Z góry wielkie dzięki za pomoc.


type PElement=^plyta;
    plyta = record
      Wykonawca : String[32];
      NazPlyty  : String[32];
      Rok       : Word;
      Rodzaj    : String[32];
      Data      : String[32];
      next      : PElement;
     end;

type TDatebaseRec = Packed Record
      Wykonawca : String[32];
      NazPlyty  : String[32];
      Rok       : Word;
      Rodzaj    : String[32];
      Data      : String[32];
    end;

TDateBase = File Of TDatebaseRec;
var Plik: TDateBase;
var Dane: Array of TDatebaseRec;
var First : PElement;
var plik_wielkosc : Word;

(....)

procedure TForm1.Zapiszjako1Click(Sender: TObject);
var
nazwa : String[64];
StrucRec : TDatebaseRec;
AtList : PElement;
begin
    if SaveDialog1.Execute then
    begin
      nazwa:=SaveDialog1.FileName + '.dat';
      AssignFile(Plik, nazwa);
      if Not FileExists(nazwa) Then
        begin
        ReWrite(Plik);
        end                     
      else
       begin
        Reset(Plik);
       end;
         AtList:=First;
     while AtList.Next <> nil  do    **<--- W tym miejscu występuje błąd**
      begin
        StrucRec.Wykonawca:=AtList.Wykonawca;
        StrucRec.NazPlyty:=AtList.NazPlyty;
        StrucRec.Rok:=AtList.Rok;
        StrucRec.Rodzaj:=AtList.Rodzaj;
        StrucRec.Data:=AtList.Data;
        Seek(Plik, FileSize(Plik));
        Write(Plik, StrucRec);
        AtList := AtList^.Next;
      end;
     if AtList.next = nil then
      begin
        StrucRec.Wykonawca:=AtList.Wykonawca;
        StrucRec.NazPlyty:=AtList.NazPlyty;
        StrucRec.Rok:=AtList.Rok;
        StrucRec.Rodzaj:=AtList.Rodzaj;
        StrucRec.Data:=AtList.Data;
        Seek(Plik, FileSize(Plik));
        Write(Plik, StrucRec);
        end
          end;
    CloseFile(Plik);
    end;
0

Udało mi się naprawić samemu. Poprawiony błąd:

procedure TForm1.Zapiszjako1Click(Sender: TObject);
var
nazwa : String[64];
StrucRec : TDatebaseRec;
AtList : PElement;
begin
    if SaveDialog1.Execute then
    begin
      nazwa:=SaveDialog1.FileName + '.dat';
      AssignFile(Plik, nazwa);
      if Not FileExists(nazwa) Then
        begin
        ReWrite(Plik);
        end
      else
       begin
        Reset(Plik);
       end;
         AtList:=First;
     while AtList <> nil  do
      begin
        StrucRec.Wykonawca:=AtList.Wykonawca;
        StrucRec.NazPlyty:=AtList.NazPlyty;
        StrucRec.Rok:=AtList.Rok;
        StrucRec.Rodzaj:=AtList.Rodzaj;
        StrucRec.Data:=AtList.Data;
        Seek(Plik, FileSize(Plik));
        Write(Plik, StrucRec);
        AtList := AtList^.Next;
      end
end;
    CloseFile(Plik);
    end; 

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0