TTable i Access Violation

0

Witam, pisząc ten program tak naprawde ucze sie Delphi. Program to "Test Pianina", a dokładnie test znajomości brzmienia Pianina. Sam Test Działa Dobrze bez zarzutów, tak samo jak i inne elementy, skupie sie na błędzie. Program przy starcie łaczy się z bazą danych Test1.dbf poprzez koponenty TTable i TDataSource
na początku w Form1 Wpisuje sie Użytkownika TO:

Table1.Active:=false;
  Table1.DatabaseName:= ExtractFilePath(ParamStr(0));//upewniam sie gdzie sa pliki
    Table1.Open;
szukajN:=Edit3.Text;//Imie do wyszukania
szukajI:=Edit2.Text;
  s:=0;
Repeat
    s:=s+1;
    bazaI:=Table1.FieldByName('Imie').AsString; //imie z bazy
    bazaN:=Table1.FieldByName('Nazwisko').AsString;
    if ((szukajI=bazaI) AND (szukajN=bazaN)) Then
     Begin
      Label6.Caption:='Student Znaleziony';
     Edit1.Text:=Table1.FieldByName('Kierunek').AsString;
     Edit4.Text:=Table1.FieldByName('Grupa_rok').AsString;
     Edit2.Text:=Table1.FieldByName('Imie').AsString;
     End else Table1.Next;
     If (s=Table1.RecordCount) then Begin Label6.Caption:='Brak Studenta, dodaj nowego'; break End; //jak znajdzie przerywa szukanie
  Until ((szukajI=bazaI) OR (s=Table1.RecordCount)) AND ((szukajN=bazaN) OR (s=Table1.RecordCount)); //szukam do konca
Table1.Free;

sprawdza czy Student jest w Bazie (pomysł na Search wymyśliłem sam więc jest Dziwny). i to działa Hula aż sie kurzy.
Po czym przechodze do form2, gdzie następuje wyrafinowany ;) test, jego wyniki umieszczam w Recordzie. po czym pojawia się na chwilke Form3 gdzie podliczane są wyniki i wyświetlane podsumowanie Testu, i wracam do Form1 aby zapisać wyniki z Rekordu do Bazy Danych. dodam że przy przejściu między Formami używam Form1.Hide/Show, a inne Close/Show):

if ildzw>0 then
      begin
      Memo1.Lines.Add(Student.Traf);
      Memo1.Lines.Add(Student.NTraf);
      Memo1.Lines.Add(Student.Wynik);
   Tabela1.Open;
//     Table1.Active:=true;
//      Table1.Wynik.Assign(Memo1.Lines);
      Tabela1.FieldByName('Wynik').Assign(Form1.Memo1.Lines);
       Table1.Free;
      end;

No i tu zabawa sie kończy: "Access violation at ....", a dokładnie przy PRÓBIE OTWARCIA BAZY DANYCH NIE ZAŚ PRZY WPISANIU ICH. Za // linijki to moje propozycje na wpisanie z Memo do Table1.Wynik (która ma Typ TMemoField).

PS. sorki za błędy i jeśli będą potrzebne jakieś dodatkowe info o prog. to pisać.
dzięki za pomoc ;)

0

Skorzystaj z ClientDataSet

0

Jak dla mnie mieszasz cos z table1 i tabela1, a to table1.free tez mnei nipokoi, nie lepiej normalnei sqlem dzialac przez query?

0

lepiej normalnei sqlem dzialac przez query?

W sumie dobrym pomysłem byłoby skożystać z Query. Nie wiem jak to jest w BDE bo korzystam z komponentów MyDAC (bardzo polecam znacznie szybsze niż BDE) Kiedy użyjesz Query możesz za pomocą SQL zrobić update tabeli lub np za pomocą DBGrid po prostu dopisywać do bazy (tak jak w tabeli) a komponent sam generuje odpowiedni kod SQL...

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