Object or class type required

0

Witam! Jestem nowy na forum i ogólnie w Delphi. Wcześniej pisałem trochę w Turbo Pascalu. Mam mały problem. Próbuję skompilować program, którego fragment podałem niżej, ale występuje błąd Object or class type required. Czy może ktoś mi w tym pomóc?

procedure TForm1.Button1Click(Sender: TObject);
type
 bazadanych=packed record
  n:single;
  u:single;
 End;
 baza = file of bazadanych;
Var
 f,f2:textfile;
 f1:baza;
 p1,p2:string;

procedure TForm1.Button1Click(Sender: TObject);
Var
 n1,u1:word;
 n2,u2:byte;
 n,u:single;
begin
 AssignFile(f1,p1);
 Reset(f1);
 Seek(f1, filesize(f1));
 try ListBox1.Items.Add(Edit1.Text);
  n1:=StrToInt(Edit2.Text);
  n2:=StrToInt(Edit4.Text);
  u1:=StrToInt(Edit3.Text);
  u2:=StrToInt(Edit5.Text);
  n:=n1+n2/100;
  u:=u1+u2/100;
 finally
  baza.n:=n;
  baza.u:=u;
  write(baza,f1);
  Edit1.Text:='';
  Edit2.Text:='';
  Edit3.Text:='';
  Edit4.Text:='';
  Edit5.Text:='';
 End;
 except
  Application.MessageBox('ERROR','Pola ceny muszą zawierać liczby całkowite i dodatnie!',MB_ICONError+MB_OK);
 End;
end;
0

z dziwnie posklejanych kawałków kodu ( dwa razy procedura TForm1.Button1Click) trudno cokolwiek wywnioskować

1

Na pewno musisz poczytać kursy z podstawami, bo błądzisz po omacku. Musisz też myśleć co robisz. Pierwsze procedure TForm1.Button1Click(Sender: TObject); jest zbędne zapewne. Poza tym zmienna baza jeżeli chcesz się odwoływać do niej jako typu rekordowego musi być typu bazadanych. Także stwórz sobie inną zmienną tego typu. To pozbędziesz się choćby tego błędu. Dalej nie analizowałem. Ogólnie Twoj kod jest nieco bałaganiarski, jak na moje oko.

2

Pierwszy kwiatuszek:

begin
 AssignFile(f1,p1);
 Reset(f1);
 Seek(f1, filesize(f1));

Otwierasz plik do odczytu, po czym przesuwasz kursor na koniec pliku - myślisz co robisz? Domyślam się, że chcesz coś dopisać do pliku, więc skorzystaj z procedury Rewrite zamiast Reset; Albo jeszcze lepiej Append, bo jak widać i tak chcesz coś dopisać do istniejącego pliku, więc nie musisz ręcznie ustawiać pozycji kursora;

No i tu masz jeszcze niezły kwiatuszek:

 finally
  baza.n:=n;
  baza.u:=u;

zmienna baza jest plikiem typowanym, więc nie możesz się odwoływać do jej pól, bo ich tam zwyczajnie nie ma; To też nie jest żadna tablica, więc nawet nie myśl o kombinowaniu z indeksami;

Ogólnie to polecam przeczytać jakikolwiek artykuł o plikach typowanych, dlatego że próbujesz je wykorzystać, nie mając pojęcia o ich obsłudze; W ogóle cały ten kod jakiś dziwny, nawet sam blok Try Finally, bo pomijając już to dziwne odwołanie do zmiennej plikowej, to w przypadku błędnej konwersji z pola edycyjnego użyjesz niezainicjowanych zmiennych n i u; Ogólnie katastrofa - przeczytaj jakiś kurs kodzenia najpierw;

A wątek przenoszę do działu Newbie, dlatego że dotyczy podstaw programowania.

0

Popełniłem mały błąd kopiując kod. Oto poprawny kod:

type
 bazadanych=packed record
  n:single;
  u:single;
 End;
 baza = file of bazadanych;
Var
 f,f2:textfile;
 f1:baza;
 p1,p2:string;

procedure TForm1.Button1Click(Sender: TObject);
Var
 n1,u1:word;
 n2,u2:byte;
 n,u:single;
begin
 AssignFile(f1,p1);
 Reset(f1);
 Seek(f1, filesize(f1));
 try ListBox1.Items.Add(Edit1.Text);
  n1:=StrToInt(Edit2.Text);
  n2:=StrToInt(Edit4.Text);
  u1:=StrToInt(Edit3.Text);
  u2:=StrToInt(Edit5.Text);
  n:=n1+n2/100;
  u:=u1+u2/100;
 finally
  baza.n:=n;
  baza.u:=u;
  write(baza,f1);
  Edit1.Text:='';
  Edit2.Text:='';
  Edit3.Text:='';
  Edit4.Text:='';
  Edit5.Text:='';
 End;
 except
  Application.MessageBox('ERROR','Pola ceny muszą zawierać liczby całkowite i dodatnie!',MB_ICONError+MB_OK);
 End;
end;

Przejrzę jeszcze te artykuły o plikach. I faktycznie, mogłem źle zainicjować plik. Dziękuję za pomoc.

2

baza to typ, a traktujesz to, jak gdyby było zmienną.

1

To są skutki braku formatowania oraz nazewnictwa zmiennych od d*py.

0

@dp116 - to nadal jest błędny kod, tyle że poprawnie przeklejony z edytora kodu; Wszystkie wskazówki, jakie do tej pory dostałeś zastosuj w kodzie, a będzie działać; Nic więcej nie można polecić.

0

Dziękuję za pomoc. Naprawiłem już błąd. :-)

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