jak uniknąć dodawania pustych pól do tabeli?

0

witam
napisałem prostą aplikacje opartą o baze danych dBase for Windows, i sama aplikacja działa dobrze. do obsługi rekordów w bazie danych używam DBNavigatora i wszystko byłoby pięknie, gdyby nie to, że nie wiem jak zrobić sprawdzanie czy wszystkie pola na formatce zostały wypełnione przed dodaniem do bazy. próbowałem w zdarzeniu BEFOREACTION tego nawigatora umieścić kod sprawdzający i wyświetlający komunikat i stosowałem tam nawet funkcje EXIT, ale sprawdzenie nastąpiło, komunikat sie wyświetlił a i tak rekordy z pustymi polami zostały wprowadzone do bazy. potem wprowadziłem taką procedure:

procedure TForm1.DBNavigator1BeforeAction(Sender: TObject;
  Button: TNavigateBtn);
var
  plik: textfile;
  i: integer;
  tmp, nowy: string;
  jest: boolean;
begin
   if (DBEdit1.Text<>'') and (DBComboBox1.Text<>'') and (DBComboBox2.Text<>'') and
         (DBComboBox3.Text<>'') and (DBComboBox4.Text<>'') and (DBComboBox5.Text<>'') then
        begin
//tu obsługa kolejnych instrukcji
        end
  else
    begin
      Showmessage('Nie wypełniłeś wszystkich wymaganych pól!');
      exit;
    end;
end;

ale niestety to też nie skutkuje. próbowałem też użyć try...finally ale pomimo tego że wyświetlało komunikat to i tak rekord był wpisywany do bazy. stąd moje pytanie - czy ktoś z Szanownych Forumowiczów mógłby mi podsunąć jakiś pomysł jak inaczej to rozwiązać, ewentualnie jak napisać procedurę dla konkretnego przycisku w DBNavigatorze (wiem jak zasymulować naciśnięcie danego przycisku ale nie wiem jak sie rozpoznać ten, który został naciśnięty). za wszelką pomoc i podpowiedzi z góry dziękuje i pozdrawiam
stupido

0

Popróbuj coś z tym:

 Radiobutton1.Checked:=
    (length(Edit1.Text)>0)
      and (length(Edit2.Text)>0)
       and (length(Edit3.Text)>0);
        if Radiobutton1.Checked=true then
         Button1.Enabled:=true else
          Button1.Enabled:=false;

Radiobutton może sygnalizować uzupełnienie danych.
Jeśli Edity z danymi zostały wypełnione to Button1 jest włączony (true), a jak nie zostały wypełnione to wyłączony (false). To może wyeliminować wprowadzenie pustych pól do bazy.
Procedura ta może być np. w Timerze.

0

witam
Redbak dzięki za pomysł - coprawda nie wykorzystałem go dosłownie, ale stanowił on podstawe do rozwiązania, które zastosowałem - co to znaczy odpowiednio kogoś nakierunkować [browar]
oto kod który uzyłem

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if (DBEdit1.Text<>'') and (DBComboBox1.Text<>'') and (DBComboBox2.Text<>'') and
     (DBComboBox3.Text<>'') and (DBComboBox4.Text<>'') and (DBComboBox5.Text<>'') then
    begin
      if Form1.DBNavigator1.VisibleButtons=[nbFirst, nbPrior, nbNext, nbLast, nbDelete, nbEdit, nbCancel] then
        begin
          Form1.DBNavigator1.VisibleButtons:=Form1.DBNavigator1.VisibleButtons+[nbInsert];
          Form1.DBNavigator1.VisibleButtons:=Form1.DBNavigator1.VisibleButtons+[nbPost];
          Form1.DBNavigator1.Width:=234;
        end
    end
  else
    begin
      if Form1.DBNavigator1.VisibleButtons=[nbFirst, nbPrior, nbNext, nbLast, nbDelete, nbEdit, nbInsert, nbPost, nbCancel] then
        begin
          Form1.DBNavigator1.Width:=234;
          Form1.DBNavigator1.VisibleButtons:=Form1.DBNavigator1.VisibleButtons-[nbInsert];
          Form1.DBNavigator1.VisibleButtons:=Form1.DBNavigator1.VisibleButtons-[nbPost];
        end;
    end
end;

i ta część juz działa
raz jeszcze wielkie podziękowania za podrzucenie pomysłu :) wiedziałem ze na WAS zawsze można liczyć [soczek]
stupido

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