Pascal - wczytanie bazy danych


(Marcins2009) #1

Napoczątku wszystko było dobrze puźniej po przerobieniu jej na rekordy pojawił sie błąd logiczny po którym program sie zamyka(exitcode 201) całe wczytywanie ma 108 linijek wiec wrzuce tylko istotny kawałek

If filesize(dan)>=0 then

begin

 d1:=0;

 Repeat

 seek(dan,d1);

 read(dan,rec[d1]);

 d1:=d1+1;

 Until d1=filesize(dan);

 Close(dan);

 clrscr;

 Write('Wczytywanie .');

 Delay(150);

 Write('.');


 Clrscr;

 write('WCZYTANO :)');

 Delay(900);

 end;

Czy jest tu coś zle


(andhla) #2

Błąd 201 oznacza przekroczenie zakresu tablicy więc być może zadeklarowałeś zbyt małą tablicę. Na początku zmienna dl ma wartość 0 a może tablica rec nie zaczyna się od indeksu 0 ale tej części kodu nie widzę więc ciężko coś więcej powiedzieć.


(Marcins2009) #3

oto całe wczytywanie i zmiene których tam używam

rec:array[1..1000] of osoba;

c,c2:char;

io:word;

d1:integer;

dan:file of osoba;

nzw,nazwa,onaz:string;

mz,mz1:char;


PROCEDURE wczytaj; {13}

 Begin

 textcolor(15);

 mz:=' ';

 Repeat

   Repeat

  clrscr;

  WriteLN('1. Wczytaj z pliku ...');

  WriteLn('2. Wczytaj ostatni zapis ');

  Writeln('3. Wróć');

  mz:=readkey;

  Until (mz='1') or (mz<='3');

  if mz='1' then

  Begin

  Repeat

  Repeat

  clrscr;

  WriteLN('1. Wybierz z listy ...');

  WriteLn('2. Wprowadz nazwe ... ');

  Writeln('3. Wróć');

  mz1:=readkey;

  Until (mz1='1') or (mz1<='3');

 if mz1='2' then

 begin

 repeat

 Writeln('Podaj nazwe pliku do wczytania');

 ReadLn(nzw);

 nazwa:=nzw+'.dan';

 If Istnieje(nazwa)=FALSE Then Writeln('Taki plik nie istnieje sprobuj jeszcze raz');

 If Istnieje(nazwa)=TRUE then

 begin

 onaz:=nazwa;

  writeln('Nazwa pliku to ', nazwa);

 end;

 until Istnieje(nazwa)=TRUE;

 delay(550);

 end;

 if mz1='1' then

 begin

 Writeln('Lista plików bazy znajdujących się w folderze z programem');

 listaplik;

 Writeln('Wybierz wpisując numer pliku i naciskając enter');

 Repeat

 write('Nr : ') ;

 read(ktwp);

 if (ktwp>nrp) or (ktwp<1) then writeln('Niema takiego pliku');

 until (ktwp<=nrp) and (ktwp>=1) ;

 nazwa:=nazwapl[ktwp];

 mz1:='3';

end;

until mz1='3';

end;


 if mz='2' then

 begin

 if onaz=' ' then

 begin

 WriteLN('Nic ostatnio nie wczytywałes');

 delay(1000);

 clrscr;

  Repeat

  Writeln('Podaj nazwe pliku do wczytania');

 ReadLn(nzw);

 nazwa:=nzw+'.dan';

 If Istnieje(nazwa)=FALSE Then Writeln('Taki plik nie istnieje sprobuj jeszcze raz');

 If Istnieje(nazwa)=TRUE then

 begin

 onaz:=nazwa;

  writeln('Nazwa pliku to ', nazwa);

 end;

 until Istnieje(nazwa)=TRUE;

 end;

 If onaz<>' ' then

 begin

 nazwa:=onaz;

 Writeln('Nazwa pliku to ', nazwa);

 end;

 end;

 If (mz='1') or (mz='2') then

 begin

 Assign(dan,nazwa);

 Reset(dan);

 If filesize(dan)>=0 then

begin

 d1:=0;

 Repeat

 seek(dan,d1);

 read(dan,rec[d1]);

 d1:=d1+1;

 io:=io+1;

 Until eof(dan);

 Close(dan);

 clrscr;

 Write('Wczytywanie .');

 Delay(150);

 Write('.');


 Clrscr;

 write('WCZYTANO :)');

 Delay(900);

 end;

(andhla) #4

rec:array[1..1000] of osoba;

..........

..........

begin

d1:=0;

Repeat

seek(dan,d1);

read(dan,rec[d1]);

zmiennej d1 przypisana jest wartość 0, zmienna ta indeksuje tablicę rec w której pierwszy element kryje się pod indeksem 1, o ile to jedyny błąd to wystarczy rec zadeklarować jako rec:array[0..1000] of osoba;


(Marcins2009) #5

Dzeki działa jeszcze po tym wystempował exitcode 100 alej jak od nowa zapisałem baze to wszystko działało

Taki głupi bład i 1h stracona na szukanie jego :smiley: