Ĺadny brzuch
Witam wszystkich
Otóz mam problem z dodawaniem recordów w bazie danych. Po skorzystaniu z procedury rekordy sa dodawane, jednak miedzy ostanim rekordem a rekordem dodawanym jest puste miejsce, jednak to puste miejsce jest traktowane jako rekord (skorzystanie z funkcij FileSize to wykazuje)
Głównie chodzi mi o to zeby była jednolita baza, bez pustych miejsc w srodku....
czy macie jakies pomysły??
procedure add; var w:char; l:integer; begin clrscr; reset(pl); writeln('rozpoczynamy dodawanie od ',filesize(pl),' pozycj.');writeln; l:=filesize(pl)+1; seek(pl,l); repeat with k do begin write('ID: ',l); writeln; id:=l; write('wprowadz imie: '); readln(imie); write('wprowadz naziwsko: '); readln(nazwisko); write('wprowadz nazwe towaru: '); readln(towar); write('poda cene towaru: '); readln(cena); write(pl,k); inc(l); writeln('--------'); end; writeln('zakonczyc (t)ak'); readln(w); until (w = 'T') or (w = 't'); close(pl); end;{procedure}
pozdrawiam
Wklej proszę cały kod.
Może zamiast:
l:=filesize(pl)+1;
Wpisz:
l:=filesize(pl);
Nie testowałem u siebie, ale myślę że pomoże
Zwracam honor :)
Bart_89 ma racje .. bez pełnego kodu się nie da powiedzieć dokładnie bo nie wiemy jak ten tryb rekordowy został zdefiniowany przez ciebie.
Użytkownik Avenger edytował ten post 03 kwiecień 2006, 18:17
troche sporo tego wyszło...
mam nadzieje ze rozumiecie o co tu chodzi, bo brakuje mi pomysłów:(
Użytkownik loopo edytował ten post 03 kwiecień 2006, 18:38
Po pierwsze w procedurze CREATE i nie tylko nie ma parametru formalnego odnoszącego się do pliku (ze słówkiem var oczywiście), więc wówczas wypadałoby stworzyć i skojarzyć zmienną w procedurze, ale sensowniej mi się wydaje globalnie.
Po drugie (CREATE): najpierw zamnkij with, a potem: zapisuj rekord do pliku, zwiększaj licznik itp..
until (w = 'T') or (w = 't'); można inaczej: until w in ['T','t']; (ale to tylko kosmetyka)
I wprocedurze ADD spróbuj nie dodawać jednynki w: l:=filesize(pl) [hehe]
Użytkownik Loracius edytował ten post 03 kwiecień 2006, 18:18
Damian.K. miał racje.. Zmieniając tą linijke wykluczysz ten błąd
No co się wiąże z tym powinieneś zmienić jeszcze parę linijek związanych z wyświetlaniem ;)
procedure add; var w:char; l:integer; begin clrscr; reset(pl); writeln('rozpoczynamy dodawanie od ',filesize(pl)+1,' pozycj.');writeln; l:=filesize(pl); seek(pl,l); repeat with k do begin write('ID: ',l+1); writeln; id:=l; write('wprowadz imie: '); readln(imie); write('wprowadz naziwsko: '); readln(nazwisko); write('wprowadz nazwe towaru: '); readln(towar); write('poda cene towaru: '); readln(cena); write(pl,k); inc(l); writeln('--------'); end; writeln('zakonczyc (t)ak'); readln(w); until (w = 'T') or (w = 't'); close(pl); end;{procedure}
I na pewno testowane ^_^
Użytkownik Avenger edytował ten post 03 kwiecień 2006, 18:16
hmmm, dzieki, teraz działa... Przedtem próbowałem tak, jednak wydawało mi sie że ostani rekord jest kasowany..
pozdro 4ALL
--------------------------------
Mozna zamknąć temat:)
Użytkownik loopo edytował ten post 04 kwiecień 2006, 14:42
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
Otóz mam problem z dodawaniem recordów w bazie danych. Po skorzystaniu z procedury rekordy sa dodawane, jednak miedzy ostanim rekordem a rekordem dodawanym jest puste miejsce, jednak to puste miejsce jest traktowane jako rekord (skorzystanie z funkcij FileSize to wykazuje)
Głównie chodzi mi o to zeby była jednolita baza, bez pustych miejsc w srodku....
czy macie jakies pomysły??
procedure add; var w:char; l:integer; begin clrscr; reset(pl); writeln('rozpoczynamy dodawanie od ',filesize(pl),' pozycj.');writeln; l:=filesize(pl)+1; seek(pl,l); repeat with k do begin write('ID: ',l); writeln; id:=l; write('wprowadz imie: '); readln(imie); write('wprowadz naziwsko: '); readln(nazwisko); write('wprowadz nazwe towaru: '); readln(towar); write('poda cene towaru: '); readln(cena); write(pl,k); inc(l); writeln('--------'); end; writeln('zakonczyc (t)ak'); readln(w); until (w = 'T') or (w = 't'); close(pl); end;{procedure}
pozdrawiam
Wklej proszę cały kod.
Może zamiast:
l:=filesize(pl)+1;
Wpisz:
l:=filesize(pl);
Nie testowałem u siebie, ale myślę że pomoże
Zwracam honor :)
Bart_89 ma racje .. bez pełnego kodu się nie da powiedzieć dokładnie bo nie wiemy jak ten tryb rekordowy został zdefiniowany przez ciebie.
Użytkownik Avenger edytował ten post 03 kwiecień 2006, 18:17
troche sporo tego wyszło...
mam nadzieje ze rozumiecie o co tu chodzi, bo brakuje mi pomysłów:(
Użytkownik loopo edytował ten post 03 kwiecień 2006, 18:38
Po pierwsze w procedurze CREATE i nie tylko nie ma parametru formalnego odnoszącego się do pliku (ze słówkiem var oczywiście), więc wówczas wypadałoby stworzyć i skojarzyć zmienną w procedurze, ale sensowniej mi się wydaje globalnie.
Po drugie (CREATE): najpierw zamnkij with, a potem: zapisuj rekord do pliku, zwiększaj licznik itp..
until (w = 'T') or (w = 't'); można inaczej: until w in ['T','t']; (ale to tylko kosmetyka)
I wprocedurze ADD spróbuj nie dodawać jednynki w: l:=filesize(pl) [hehe]
Użytkownik Loracius edytował ten post 03 kwiecień 2006, 18:18
Damian.K. miał racje.. Zmieniając tą linijke wykluczysz ten błąd
No co się wiąże z tym powinieneś zmienić jeszcze parę linijek związanych z wyświetlaniem ;)
procedure add; var w:char; l:integer; begin clrscr; reset(pl); writeln('rozpoczynamy dodawanie od ',filesize(pl)+1,' pozycj.');writeln; l:=filesize(pl); seek(pl,l); repeat with k do begin write('ID: ',l+1); writeln; id:=l; write('wprowadz imie: '); readln(imie); write('wprowadz naziwsko: '); readln(nazwisko); write('wprowadz nazwe towaru: '); readln(towar); write('poda cene towaru: '); readln(cena); write(pl,k); inc(l); writeln('--------'); end; writeln('zakonczyc (t)ak'); readln(w); until (w = 'T') or (w = 't'); close(pl); end;{procedure}
I na pewno testowane ^_^
Użytkownik Avenger edytował ten post 03 kwiecień 2006, 18:16
hmmm, dzieki, teraz działa... Przedtem próbowałem tak, jednak wydawało mi sie że ostani rekord jest kasowany..
pozdro 4ALL
--------------------------------
Mozna zamknąć temat:)
Użytkownik loopo edytował ten post 04 kwiecień 2006, 14:42