dbedit cyfry z wybranego zakresu

0

Witam
Poszukuję rozwiązania problemu wprowadzania określonych liczb w pole tabeli.

Zakres jaki może wpisać użytkownik to 001-999 i tylko liczby z tego zakresu mogą być użyte a nie np. 1 zamiast 001
I teraz pytanie....jak zrobić żeby program sprawdzał czy użytkownik wpisał liczby z właściwego zakresu i pozwolił zapisać rekord lub pokazał błąd.

0

A nie możesz ustawić maski dla tego pola w tabeli?

0
kAzek napisał(a):

A nie możesz ustawić maski dla tego pola w tabeli?

baza jest w MsAcces . Maska jest tam ustawiona....ale za cholerę nie wiem jak tam poustawiać obsługę wyjątków. Dlatego wolałbym żeby kontrola wprowadzania była na EditBoxie.
znalazłem taki oto przykład :

if x in [01..99] then
ale to działa tylko dla liczb 2-cyfrowych...po wpisaniu zakresu 001-999 wyrzuca błąd :
' Constant expression violates subrange bounds'

Ma ktoś jakieś pomysły ???????

1

Rozwiązanie według mnie można zaimplementować banalną funkcją - kod poniżej:

function IsUserAreNotAnIdiot(TextToCheck : string) : boolean;
var
  V, Code : integer;
begin
  Result := False;
  Val(TextToCheck, V, Code);
  if Code = 0 then
  begin
    if (V >= 1) and (V <= 999) then
    begin
      Result := TextToCheck = Format('%.3d', [V]);
    end;
  end;
end;

Oczywisty przykład użycia - sprawdzone i działa:

//...
  if IsUserAreNotAnIdiot(Edit1.Text) then
  begin
    Caption := 'Dane w porządku.';
  end
  else
  begin
    Caption := 'Nie hackuj mi tutaj, bucu! ;)';
  end;
1

Ustaw MaxLength na 3 i w OnKeyPress:

procedure TForm1.DBEdit1KeyPress(Sender: TObject; var Key: Char);
begin
  if not (Key in ['0'..'9', #08]) then
    Key:= #00;
end;

Pozwoli to wprowadzać tylko cyfry i obsługę backspace niestety nie wymusi aby zawsze były 3 znaki.
Ewentualnie w OnExit:

procedure TForm1.DBEdit1Exit(Sender: TObject);
begin
  TDBEdit(Sender).Text:= Format('%.3d', [StrToIntDef(TDBEdit(Sender).Text, 0)]);
end;

Wtedy zawsze będą 3 znaki (zostaną dodane te poprzedzające 0 np. będzie 001 zamiast 1

0

na szybko dałem to tak:

procedure TForm1.Button1Click(Sender: TObject);
var
  x: integer;
begin
  x:=strtoint(edit1.Text);
  if (x > 001) and  (x < 999) then
    showmessage ('ok')
  else
    showmessage ('BAD!!!!');
end;

end.

co do ilości znaków to LENGHT Edita powinno załatwić sprawę ale mogę się mylić.

Olesio...super funkcja....szczególnie nazwa.
Tak () mówiąc to dziękuję za waszą uwagę i chęć pomocy

0
rodom napisał(a):

Olesio...super funkcja....szczególnie nazwa.
Tak () mówiąc to dziękuję za waszą uwagę i chęć pomocy

Spoko, proszę bardzo. Funkcja pisana na szybko to i taką nazwę sobie wymyślilem. A co do Twojego kodu. Jeżeli tylko takie rozwiązanie zastosujesz, bez wprowadzania rozwiązań, które zapropnował @kAzek lub mojego. To spróbuj wpisac w Edit, na przykład a i nacisnąc przycisk. "Wuala"! ;) Masz elegancki wyjątek. Dlatego raczej radził bym posiłkowac się wspomnianą procedurą Val lub funkcją TryStrToInt.

0
olesio napisał(a):
rodom napisał(a):

Olesio...super funkcja....szczególnie nazwa.
Tak () mówiąc to dziękuję za waszą uwagę i chęć pomocy

Spoko, proszę bardzo. Funkcja pisana na szybko to i taką nazwę sobie wymyślilem. A co do Twojego kodu. Jeżeli tylko takie rozwiązanie zastosujesz, bez wprowadzania rozwiązań, które zapropnował @kAzek lub mojego. To spróbuj wpisac w Edit, na przykład a i nacisnąc przycisk. "Wuala"! ;) Masz elegancki wyjątek. Dlatego raczej radził bym posiłkowac się wspomnianą procedurą Val lub funkcją TryStrToInt.

To było tak na szybko...wydaje mi się że twoja funkcja w połączeniu z radami Kazka załatwi temat. Sprawdzanie cyfr w OnKeyPress miałem już wcześniej więc nie było problemu z literkami. Najbardziej mi zależało żeby program odróżniał '001' od '1'. i potrafił sprawdzić wybrany zakres aż do 999

0

Ok, nie używam DBEdit, ale dla pewności posiłkuj się też moją funkcją, bo bez blokowania możliwości wklejenia danych do tego Edita, blokowanie naciśnięć klawiszy niewiele da. Należy przewidzieć wszystkie rozwiązania, by program, nie umniejszając nikomu - był na prawdę idiotoodporny. I przewidywal również wklejanie tekstu na różne sposoby.

0

Dzięki.
Twoja funkcja załatwiła sprawę...+ rady @Kazka....
Ten program to kartoteka do której ktoś przepisuje dane z kartek....chodzi tylko o to żeby to pole, konkretnie Lp. papierowej kartoteki miała 3 cyfry...
Zdarzały się przypadki wpisania 2 znaków lub nawet 1. Wszystkie wyjątki mam już oprogramowane i chyba If Użytkownikniejestidiota zadziała :DDD

dzięki wam wielkie

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