| Autor |
Beitrag |
basti_1984
      
Beiträge: 104
Linux, Win Xp, Win 2000
Delphi, C, C++, PHP,
|
Verfasst: Di 06.02.07 10:26
Guten Morgen, ich habe ein Problem.
Ich habe ein Eingabefeld für eine Zahl und eins für ein Datum . Da ich die Daten in eine Datenbank schreibe möcht auf Plausibilität prüfen.ich wollte das mit den funktionen
StrToInt() für die Zahlen und StrToDate() für das Datum machen .
Ich weis auch das man im fehlerfall exceptions bekommt. nun meine fage kann mir jemand zeigen wie ich das in einem typ block verarbeite.
vielen dank
|
|
ZeitGeist87
      
Beiträge: 1593
Erhaltene Danke: 20
Win95-Win10
Delphi 10 Seattle, Rad Studio 2007, Delphi 7 Prof., C++, WSH, Turbo Pascal, PHP, Delphi X2
|
Verfasst: Di 06.02.07 10:42
Guten Morgen!
Typ-Block?
Meinst du vielleich Try-Except-Block?
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| try tempint:= StrToDate(deinEdit.text); tempdate:= StrToDate(deinEdit.text); except on e: exception do begin messagebox(application.handle, pchar('Daten nicht korrekt' + e.message), 'Datenplausibilitätsprüfung', MB_IconERROR); exit; end; end; |
LG
Stefan
_________________ Wer Provokationen, Ironie, Sarkasmus oder Zynismus herauslesen kann soll sie ignorieren um den Inhalt meiner Beiträge ungetrübt erfassen zu können.
|
|
Narses
      

Beiträge: 10184
Erhaltene Danke: 1259
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Di 06.02.07 10:43
Moin!
Es gibt doch die TryStrTo...-Funktionen, damit sollte das einfacher gehen, als mit Exceptions und Abfangen dieser.
cu
Narses
//EDIT: zu langsam... 
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
basti_1984 
      
Beiträge: 104
Linux, Win Xp, Win 2000
Delphi, C, C++, PHP,
|
Verfasst: Di 06.02.07 10:45
Hey Danke genau so was habe ich gesucht. Werde es gleich mal ausprobieren. Meinte natürlich den try block
Danke nochmal.
_________________ Wissen ist Macht. Nichts zu Wissen macht auch nichts
|
|
oldmax
      
Beiträge: 380
D3 Prof, D4 Prof
|
Verfasst: Di 06.02.07 14:12
Hi
Nun, eine Eingabeprüfung macht ja Sinn, aber warum verhinderst du nicht schon bei der Eingabe einen Fehler ? Zahlen abzufangen ist relativ einfach über die OnKeypress-Ereignismethode, alles, was nicht nach Zahl oder Steuerzeichen aussieht, überschreibst du mit einem Key:=0. Mach dir ein eigenes Editfeld dafür und die Welt ist glücklich, denn nichts ist frustrierender, wenn ein Anwender eine Real eingibt und er 3mal rausfliegt, weil das Komme ein Punkt sein muß oder umgekehrt. Beim Datum nehm ich einfach den TDateTimePicker, da stimmt das Format eigentlich immer. Ist ja auch nur für Felder wie Geburtstag oder so, ein aktuelles Datum gewinnst du ja aus Date oder Now. Willst du Datum zum Suchbegriff haben, bau dir ein Listenfeld und füll es mit der SQL Anweisung "Select Distinct Datum ...". Dann kannst du Datum aus diesem dann auswählen und abrufen.
So würd ich mal denken....
Gruß oldmax
_________________ Zier dich nich so, ich krieg dich schon....
|
|
basti_1984 
      
Beiträge: 104
Linux, Win Xp, Win 2000
Delphi, C, C++, PHP,
|
Verfasst: Di 06.02.07 15:20
Danke für deine tollen vorschläge werde sie gleich mal ausprobieren. 
_________________ Wissen ist Macht. Nichts zu Wissen macht auch nichts
|
|
basti_1984 
      
Beiträge: 104
Linux, Win Xp, Win 2000
Delphi, C, C++, PHP,
|
Verfasst: Di 06.02.07 15:26
Okay jetze habe ich ein Problem habe den TDateTImePicker mal genommern ich kann aber bloß ein Datum eingeben was muss ich tun damit ich auch noch ein eUhrezit eingeben kann?
_________________ Wissen ist Macht. Nichts zu Wissen macht auch nichts
|
|
oldmax
      
Beiträge: 380
D3 Prof, D4 Prof
|
Verfasst: Mi 07.02.07 07:50
Hi
| Zitat: | | was muss ich tun damit ich auch noch ein eUhrezit eingeben kann? |
vielleicht mal in die Hilfe schauen ?... F1, Help; Hilfe...
ok, mal sehen, es wäre möglich, aus einem DatePicker einen TimePicker zu machen, jeweils einen zu nehmen und beide Werte dann zusammenzuführen. Beides zusammen in einem geht soweit ich es jetzt weiß, nicht.
Gruß oldmax
_________________ Zier dich nich so, ich krieg dich schon....
|
|
basti_1984 
      
Beiträge: 104
Linux, Win Xp, Win 2000
Delphi, C, C++, PHP,
|
Verfasst: Mi 07.02.07 09:29
Ich habe mich jetzt doch entschieden eine Eingabeprüfung zu machen, aber ich möchte nicht das ich mit Key:=0 einfach den wert überschreibe sondern das er dann nichts schreibt auch kein Leerzeichen wie mache ich das
_________________ Wissen ist Macht. Nichts zu Wissen macht auch nichts
|
|
basti_1984 
      
Beiträge: 104
Linux, Win Xp, Win 2000
Delphi, C, C++, PHP,
|
Verfasst: Mi 07.02.07 10:03
Hab eine LÖsung gefunden .
Ich nehme jetze das Mask Edit damit geht es sehr einfach trotzdem danke für eure Hilfe.
_________________ Wissen ist Macht. Nichts zu Wissen macht auch nichts
|
|
oldmax
      
Beiträge: 380
D3 Prof, D4 Prof
|
Verfasst: Mi 07.02.07 10:17
Hi
| Zitat: | | Ich habe mich jetzt doch entschieden eine Eingabeprüfung zu machen, aber ich möchte nicht das ich mit Key:=0 einfach den wert überschreibe sondern das er dann nichts schreibt auch kein Leerzeichen wie mache ich das |
Natürlich mit Key:=0, man könnte sagen, das ist wie ''.
Na ja, die Mask-Edits, also, ich war damit nie wirklich glücklich.
Gruß oldmax
_________________ Zier dich nich so, ich krieg dich schon....
|
|
oldmax
      
Beiträge: 380
D3 Prof, D4 Prof
|
Verfasst: Mi 07.02.07 10:31
hi ich nochmal
Scheiß Grippe
Also, hier einmal eine richtige Eingabeprüfung für eine Integer..
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| Procedure TMyForm.MyEditKeyPress(Sender:TObject;Var Key:Char); Begin If Key<>Chr(8) then begin If (Key<'0') or (Key>'9') then Key:=Chr(0); end; end; |
Das war ich dir schuldig...
geuß oldmax
_________________ Zier dich nich so, ich krieg dich schon....
|
|
basti_1984 
      
Beiträge: 104
Linux, Win Xp, Win 2000
Delphi, C, C++, PHP,
|
Verfasst: Mi 07.02.07 10:31
Naja ich denke das ist geschamsckssache. mir gefällt es jedenfalls so sehr gut und bin zufrieden es endlich geschafft zu haben.
Trotzdem vielen dank für deine ideen.
_________________ Wissen ist Macht. Nichts zu Wissen macht auch nichts
|
|
oldmax
      
Beiträge: 380
D3 Prof, D4 Prof
|
Verfasst: Mi 07.02.07 10:49
Nun ja, aber Mask- Edits fangen nicht wirklich falsche Eingaben auf. Nach wie vor kann ich irgendeinen Blödsinn eingeben und bekomme erst nach Abschuß / Übernahme eine Fehlermeldung. Ich finde das etwas frustrierend, als Anwender.....
Durch die kleine Procedure für Integer z.B. lasse ich falsche eingaben gar nicht erst zu, bzw. übernehme sie nicht. Auch kann ich, wenn es erforderlich ist, bspw. ein Enter in ein Tab wandeln. z.B. bei einer Zwangsreihenfolge von Eingaben. Na ja, und ich brauche diese Procedure nur einmal schreiben und kann sie mehreren Editfeldern als KeyPress-Methode verpassen.
Zugegeben, Real sind ein kleinwenig aufwändiger, aber eben nur ein klein wenig.....
mit der Abfrage
Delphi-Quelltext 1:
| If ((Key=',') and (Pos(',',Sender as TEdit).Text)>0)) Or (Key<'0') or ... |
hab ich schon das 2. Komma verhindert.
Aber egal, wenn du mit den Maskedits glücklich bist, wichtig ist, du hast dein Ziel erreicht.
Gruß oldmax
_________________ Zier dich nich so, ich krieg dich schon....
|
|
Narses
      

Beiträge: 10184
Erhaltene Danke: 1259
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mi 07.02.07 12:22
Moin!
Also diese OnKeyPress-Geschichte ist ja ganz nett, aber dann solltest du auch erwähnen, dass man dann immer noch über die Zwischenablage per Strg+V "ungültige" Eingaben machen kann...
Deshalb finde ich die OnChange-Variante besser.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
oldmax
      
Beiträge: 380
D3 Prof, D4 Prof
|
Verfasst: Mi 07.02.07 14:03
Hi
Bei der du dann wieder den ganzen Inhalt vom Editfeld prüfen mußt, weil kein direkter Zugriff auf den Key - Char erfolg ? Nun ja, jede Methode führt immer nur ein Stückchen in Richtung Perfektion. Soll es denn wirklich alles absichern, so ist der Nutzcode ca. 5%, die Sicherungs- und Prüfungsroutinen 95%
Ich war mal so richtig stolz auf eine Datumseingabe noch unter DOS. Es wurden sogar Schaltjahre geprüft und die Februartage entsprechend überwacht und dann kommt mein Kunde und gibt Datum 00.12.19xx ein..... Crash !
Ich denke, jeder muß irgendwo seine Kompromißgrenze finden, um noch genügend nützlichen Code ausführen zu lassen.
Gruß oldmax
_________________ Zier dich nich so, ich krieg dich schon....
|
|
|