Autor Beitrag
AceTheFace
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 39



BeitragVerfasst: So 05.01.03 23:18 
Hi,

wenn ein user in mein editFeld (Integer)-Zahlen eintippt und ich den Inhalt in eine DB schreiben will, kommt eine eConvertError-Exception, da meine DB in der Spalte nur Strings haben will (soll ja so sein *g*!).
Aber Exceptions im fertigen Programm sind ja nicht sehr schön, deshalb will ich es jetzt so machen, dass sobald der User ein Zeichen eintippt, geprüft wird, ob das ein String oder eine Integerzahl ist. Wie mache ich denn das?
Ich dachte daran, es einfach mal so zu probieren:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
function TForm1.checkInput(edit:TEdit):boolean;
var zahl:Integer;
begin
try
   zahl:=StrToInt(edit.text);
   result:=true;
except
   result:=false;
   edit.text:='';
   end;

end;


Leider wirft er trotzdem die gleiche exception (warum eigentlich? Müssten doch alle exceptions abgefangen werden...)

Dies Funktion soll immer über das onChange-Ereignis des EditFelds aufgerufen werden.

Kann mir jemand helfen?

Gruss und danke,

Ace
[/code]
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: So 05.01.03 23:29 
Wenn Du Dein Programm in Delphi startest, werden auch die Exceptions angezeigt, die in try-except-Blöcken stehen. Versuch' mal, das Programm außerhalb von Delphi laufen zu lassen und guck dann, ob die Exceptions noch da sind. Soltlen eigentlich nicht.

Man kann auch irgendwie ausstellen, dass die Exceptions in Delphi angezeigt werden. Ich habe leider vergessen, wie das geht, bin mir aber ziemlich sicher, es hier im Forum mal gelesen zu haben.

MfG,
Peter

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Wolff68
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 302
Erhaltene Danke: 1

WinXP home
D6 Prof
BeitragVerfasst: So 05.01.03 23:56 
Um zu prüfen, ob es ein Integer ist hab ich mir mal folgende Funktion gebastelt:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
function TMainForm.IsValidInteger(s: String): Boolean;
var
  i : integer;
begin
  result := false;
  IF length(s) = 0 then exit;
  IF NOT (s[1] in ['-', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'])
    then exit;
  For i := 2 to length(s) do begin
    IF NOT (s[i] in ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'])
      then begin
        result := false;
        exit;
      end;
  end;
  result := true;
end;


Vielleicht kannst das ja gebrauchen.

_________________
"Der Mensch ist nicht was er sich vorstellt oder wünscht zu sein, sondern das was andere in ihm sehen."
AceTheFace Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 39



BeitragVerfasst: Mo 06.01.03 00:00 
Einmal Copy-Past und ein riesen Dankeschön!! :D

Gruss,

Ace
Tom
Gast
Erhaltene Danke: 1



BeitragVerfasst: Mo 06.01.03 09:34 
AceTheFace hat folgendes geschrieben:
Einmal Copy-Past und ein riesen Dankeschön!! :D

Nicht zu früh freuen: Rufe die Funktion mal nur mit dem Parameter '-' auf. Die Funktion liefert in diesem Fall True zurück. Ein nachfolgender Aufruf von StrToInt liefert eine Exception.

Du solltest eher den Borland-Funktionen VAL oder StrToIntDef vertrauen.

Gruß Tom