Witam. Mam taki problem. Robię projekt - Firma Turystyczna w Delphi, sęk w tym iż nie działa mi coś wyświetlanie osób (w MENU znajduje się pod 5), wygląda tak jak by w ogóle nie zapisywał , możliwe że w zapisywaniu osób jest błąd, bo nie znajduję nikogo, a i USUWANIE nie działa także, usuwanie nigdzie nie działa.
Proszę o pomoc. Z góry dziękuję. Pozdrawiam Fabian3223.
- Rejestracja:ponad 12 lat
- Ostatnio:ponad 7 lat
- Lokalizacja:Konto zlikwidowane



Miałeś dodać w tagi sam kod, nie całego posta...
Jeden z błędów jakie wychwyciłem:
sprzedane:=filesize(c);
To zwróci rozmiar całego pliku w bajtach, a nie ilość sprzedanych czegoś-tam (zmienna nie mówi zbyt wiele, a komentarzy brak).
Musisz to podzielić przez rozmiar odpowiedniego rekordu.</del>
- Rejestracja:ponad 19 lat
- Ostatnio:około 7 godzin
- Lokalizacja:Gorlice
Błędem jest min. seek we wczytajosobe jak wczytujesz z pliku osoby to po read automatycznie przechodzi do następnego rekordu. Wywal ten seek i sprawdź jak cos to pisz to poszuka się co jeszcze.
EDIT//
tam chyba jeszcze powinno być jakieś:
osoby:= filesize(b);
- Rejestracja:prawie 15 lat
- Ostatnio:prawie 11 lat
- Postów:184
W wielu miejscach w kodzie masz takie wyrażenie
if FileExists(Plik) then Reset(Plik) else Rewrite(Plik)
Czy to ma sens? Zdecyduj się, czy chcesz odczytywać plik, czy do niego zapisywać.
PS. Te szlaczki i puste linie, to mógłbyś sobie, albo raczej nam, darować.

- Rejestracja:ponad 19 lat
- Ostatnio:około 7 godzin
- Lokalizacja:Gorlice
Ciekawa też jest funkcja dodawania... co się stanie jeżeli osoby wynosi 0 (przy pustym pliku) a tablica indeksowana jest od 1 ? Wydaje mi sie że tam powinno być osoby + 1. Ogólnie to trudno coś połapać się w tym zagmatwanym kodzie ;)


- Rejestracja:ponad 19 lat
- Ostatnio:około 7 godzin
- Lokalizacja:Gorlice
Poprawiłem w sensie doprowadziłem do działania, bo tak naprawdę ten cały kod to masakra ;) dodawanie, osuwanie i wczytywanie osób pewnie reszta ma te same błedy (w ogóle nie sprawdzałem) ale wszytko chyba odbywa się podobnie to chyba sobie poradzisz.
procedure wczytajosobe;
var
b : file of t_osoba;
i : byte;
begin
assign(b, 'osoby.bin');
if fileexists('osoby.bin') then
reset(b)
else
rewrite(b);
for i := 1 to osoby do
begin
//seek(b, i); //<-- jak juz wczesniej pisalem to seek tutaj niepotrzebne
read(b, osoba[i]);
end;
close(b);
liczenie;
end;
//------------------------------------------------------//
procedure dodajosobe;
var
b : file of t_osoba;
begin
wczytajosobe;
writeln('# Dodaj nowa osobe');
write('| Imie : ');
readln(osoba[osoby + 1].imie); //<-- tu wszedzie + 1
write('| Nazwisko : ');
readln(osoba[osoby + 1].nazwisko);
write(' | ID : ');
readln(osoba[osoby + 1].indeks);
writeln;
assign(b, 'osoby.bin'); //<-- moze zdecydowalbys sie na ta sama nazwa pliku a nie raz osoba raz osoby
if not fileexists('osoby.bin') then
rewrite(b)
else
reset(b);
seek(b, osoby);
write(b, osoba[osoby + 1]);
close(b);
liczenie;
readln;
end;
//--------------------------------------------//
procedure wyswietlosoby;
var
i : byte;
begin
wczytajosobe;
Write('# Aktualny spis klientow: ');
if osoby = 0 then
writeln('Brak klientow !')
else
begin
writeln;
//i := 0; //<-- to po co?
for i := 1 to osoby do
begin
writeln('Imie: ', osoba[i].imie);
writeln('Nazwisko: ', osoba[i].nazwisko);
writeln('ID: ', osoba[i].indeks);
writeln;
end;
end;
writeln('>> Nacisnij [ENTER] by kontynuowac');
readln;
liczenie;
end;
//--------------------------------------------//
procedure usunosobe;
var
indeks : integer;
j : integer;
b : file of t_osoba;
deleted: Boolean;
begin
deleted:= False;
wczytajosobe;
write(' ID osoby do usuniecia: ');
readln(indeks);
assign(b, 'osoby.bin'); //<-- tez blad nazwy pliku
//tak chyba bardziej po ludzku
rewrite(b);
for j := 1 to osoby do
if indeks <> osoba[j].indeks then
write(b, osoba[j])
else
deleted:= True;
close(b);
{for j := 1 to osoby do
if indeks = osoba[j].indeks then
begin
reset(b);
seek(b, j - 1);
read(b, osoba[j]);
seek(b, j - 1);
write(b, osoba[j]);
close(b);
end; }
if deleted = True then
writeln('>> Usunieto.')
else
writeln('>> NIE ZNALEZIONO osoby o podanym ID: ', indeks) ;
writeln('>> Nacisnij [ENTER] by kontynuowac');
readln;
end;

- Rejestracja:prawie 17 lat
- Ostatnio:około 3 lata
- Lokalizacja:Szczecin
- Postów:4191
Fabian3223 napisał(a):
Zacząłem studia inzynieryjne na kierunku informatyka, nie wiem jak mozesz oceniac moja wiedze ale dobra nie beda na te zaczepki
Wiesz co, trochę pokory w tych komentarzach i postcie. Nikt Ci nie każe czcić Użytkownika @kAzek, ale ma On pełne prawo oceniać Twoją "wiedzę". Wypowiedział się już na temat jakości Twojego "kodu". Nie dość, że w oryginale tematu już na "dzień dobry" się na nas wydzierałeś zablokowanym [?] CapsLockiem to jeszcze według mnie bezpodstawnie śmiesz negować podstawy Usera @kAzek do oceniania Ciebie. Ocenia Ciebie ponieważ przede wszystkim w przeciwieństwie do Ciebie posiada większą wiedzę. Wiadomo, zaczynasz studia, ale po to się uczysz i piszesz na forum oraz chodzisz na zajęcia żeby już chyba coś wiedzieć oraz żeby tę wiedzę poszerzać. A @kAzek jest na forum dłuższy stażem. Poza tym wielokrotnie pomagał (nie tylko mi, bo ja i tak używam Synapse) wielu ludziom z Indy czy chociaż WinAPI (tutaj akurat też i mi). A imo pisanie w WinAPI prawidłowych i złożonych kodów jest raczej wyższym stopniem doświadczenia niż klepanie czegoś na pałę bez pomyślunku, jak Ty to zrobiłeś. I jeszcze dodatkowo ignorowanie wskazówek. Pokazałeś kod na forum więc dałeś też prawo oceny go i wystawienia na komentowanie. Nie musimy się tutaj licytowac, kto ma jaką wiedzę, ale radzę na przyszłość szanować opinię i nie polemizować z wiedzą ludzi, których doświadczenie oraz wiedzę można zweryfikować jeśli poświęci się czas i przeanalizuje poprzednie posty napisane przez @kAzek. Tyle chciałem wyrazić. Nie tyle - jak pewnie tu mi ktoś zarzuci "w obronie @kAzek", bo imo wiedza i doświadczenie obronią się same. Pisze jako można to ując oburzony faktem, że nowa osoba na forum, która nie radzi sobie z własnym problemem zaliczeniowym (który po uzyskaniu wiedzy podczas zajęć na studiach powinna ogarnąć), ignorując próby pomocy, śmie dodatkowo jeszcze zarzucać Użytkownikowi @kAzek brak podstaw do oceniania swojej własnej, nikłej wiedzy. Jakby jednocześnie zarzucając Mu brak doświadczenia i posiadanej przez niego wiedzy. A końcowej oceny Ciebie, mającej konsekwencje w możliwości dalszego studiowania i toku tych studiów, a także wpisami w indeksie dokona Twój wykładowca. Tutaj oceniamy bez większych konsekwencji, poza pokazaniem co jest nie tak. Cytując prawie klasyka "dziękuję, do widzenia".