Giną rekordy zapisywane do bazy Paradox - dlaczego?

0

Windows 7, Delphi 5, lokalna baza Paradox
Zdarza się, że rekordy zapisane wg niżej podanego kodu giną, czasami jest to spowodowane zanikiem napięcia, złym wyłączeniem,
a czasami nie mam pojęcia dlaczego. Czy jest na to sposób programowy. Zastosowanie UPS-sa pomijam.
Wczoraj przenoszono komputer z pokoju do pokoju. kilkadziesiąt danych wprowadzonych tego dnia wyparowało.

If znaleziony then
      tab_uczni.Edit
   else
      tab_uczni.Append ;

        tab_uczni.FieldByName('Nazwisko').AsString := E_nazwisko.Text ;
        tab_uczni.FieldByName('Imie').AsString := E_imie.Text ;
        tab_uczni.FieldByName('Pokoj').AsString := E_pokoj.Text ;
        tab_uczni.Post  ;


    tab_dokad.Open ;
    tab_dokad.Append ;
    tab_dokad.FieldByName('Dokad').AsString := E_dokad.Text ;
    tab_dokad.FieldByName('Godz_wyjscia').AsString := E_godz.Text  ;
    tab_dokad.Post ;
1

na 99% to nie wina delphi i BDE tylko systemu. Jeśli to paradox to zapewne dostęp ma wiele stanowisk a same pliki bazy leżą na jakimś zasobie sieciowym. Jeśli tak to w grę może wchodzić cache, którego używa system, który udostępnia zasób. Na początku możesz spróbować po zapisie (post) zrobić Tabela.FlushBuffers. Jak to nie pomoże to szukaj przyczyny w systemie

EDIT:
rozumiem, że zmiana z BDE na cokolwiek nowszego nie wchodzi w grę?

1

Ustaw w Configuration-System-INIT-LOCAL SHARE na TRUE.

Michał

0

Dzięki.
Idę właśnie do pracy i wprowadzę sugerowane zmiany.

0

Ustawiłem Configuration-System-INIT-LOCAL SHARE na TRUE,
ale znalazłem jeszcze w necie taką informację:

W zdarzeniu AfterPost każdej tabeli danych wymusić zapis buforów BDE na dysk poleceniem: Check(dbiSaveChanges(Table.Handle)).

Zrobiłem to:

procedure TWyjscia.Tab_dzienAfterPost(DataSet: TDataSet);
begin
  Check(DbiSaveChanges(Tab_dzien.Handle));
end;

i wywala mi komunikat:

[Error] Unit3.pas(581): Undeclared identifier: 'DbiSaveChanges'

Co robię źle ?

0

Nie chciało działać:

Check(DbiSaveChanges(Tab_dzien.Handle));

ale:

początku możesz spróbować po zapisie (post) zrobić Tabela.FlushBuffers.

działa !!!!
Mam nadzieję, że to już koniec moich kłopotów.
Dzięki abrakadaber

1

jakbyś doczytał to byś wiedział, że FlushBuffers robi DbiSaveChanges plus jeszcze sprawdza czy nie trzeba wcześniej zrobić Post

0

Nie doczytałem, w pracy nie mam podręcznika.
W domu na pewno doczytam.
Jeszcze raz dzięki.

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