Witam,
Od wczoraj mecze sie ze zrobieniem bazy danych w Delphi. Rozwiazywanie roznych problemow zajmowalo mi raz mniej raz wiecej czasu. Ale teraz trafil mi sie problem, z ktorym nie moge sobie poradzic :( otóż, gdy moja baza jes jeszcze pusta i tworze pierwszy rekord, to zapisanie i odczytanie dziala dobrze. Natomiast, gdy chce juz dodac kolejny rekord to cos jest nie tak przy zapisywaniu. Ten nowy rekord zapisuje sie na swoim miejscu dobrze, ale w miejscu gdzie powinien byc poprzedni rekord jest puste miejsce. Wkleje swoj caly kod abyscie mogli znalezc przyczyne tego:
program baza;
{$APPTYPE CONSOLE}
uses
SysUtils;
const
max=200;
type
dane=string[50];
samochod=record
producent,model,rs:dane;
rp,pojemnosc,cena:real;
end;
plik = file of samochod;
tab=array[1..max] of samochod;
var
f:plik;
a:tab;
akt_r:word;
procedure aktualny_rozmiar(var f:plik; var a:tab; var akt_r:word);
begin
akt_r:=0;
reset(f);
while not eof(f) do
begin
read(f,a[akt_r]);
akt_r:=akt_r+1;
end;
end;
procedure dodaj_samochod(var a:tab; akt_r:word);
begin
akt_r:=akt_r + 1;
write('Producent: ');
readln(a[akt_r].producent);
write('Model: ');
readln(a[akt_r].model);
write('Rodzaj silnika: ');
readln(a[akt_r].rs);
write('Pojemnosc silnika (litry): ');
readln(a[akt_r].pojemnosc);
write('Rok produkcji: ');
readln(a[akt_r].rp);
write('Cena (zl): ');
readln(a[akt_r].cena);
end;
procedure zapisz_do_pliku(var f:plik; a:tab; akt_r:word);
var i:word;
begin
rewrite(f);
for i:=0 to akt_r do
begin
write(f,a[i]);
end;
close(f);
end;
procedure wyswietl(var f:plik; var a:tab);
var i:word;
begin
i:=0;
reset(f);
while not eof(f) do
begin
read(f,a[i]);
inc(i);
write(i,'. Producent: ',a[i].producent);
writeln;
write(' Model: ',a[i].model);
writeln;
write(' Rodzaj silnika: ',a[i].rs);
writeln;
write(' Pojemnosc silnika: ',a[i].pojemnosc:0:0,' l.');
writeln;
write(' Rok produkcji: ',a[i].rp:0:0);
writeln;
write(' Cena: ',a[i].cena:0:2);
writeln;
writeln;
end;
close(f);
end;
begin
assign(f,'baza.txt');
aktualny_rozmiar(f,a,akt_r);
dodaj_samochod(a,akt_r);
zapisz_do_pliku(f,a,akt_r);
writeln;
wyswietl(f,a);
readln;
end.
A tu jest fotka programu jak wyglada po wlaczeniu:
http://img516.imageshack.us/my.php?image=obrazye1.jpg
na razie baza nie ma jeszcze manu, bo to zrobie na koncu jak juz wszystko mi bedzie dzialalo.
Gdyby ktos mogl mi pomoc bylbym bardzo wdzieczny. I jeszcze, gdyby ktos mogl napisac jak ma wygladac usuwanie rekordow z bazy oraz jakies sortowanie, czy wyszuiwanie.