Autor Beitrag
basti_1984
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 104

Linux, Win Xp, Win 2000
Delphi, C, C++, PHP,
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1593
Erhaltene Danke: 20

Win95-Win10
Delphi 10 Seattle, Rad Studio 2007, Delphi 7 Prof., C++, WSH, Turbo Pascal, PHP, Delphi X2
BeitragVerfasst: Di 06.02.07 10:42 
Guten Morgen!

Typ-Block?

Meinst du vielleich Try-Except-Block?

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
 try
  tempint:= StrToDate(deinEdit.text);
  tempdate:= StrToDate(deinEdit.text);
  
  //Alles ok...
  //Schreibe in Datenbank
 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10184
Erhaltene Danke: 1259

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 104

Linux, Win Xp, Win 2000
Delphi, C, C++, PHP,
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 380


D3 Prof, D4 Prof
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 104

Linux, Win Xp, Win 2000
Delphi, C, C++, PHP,
BeitragVerfasst: Di 06.02.07 15:20 
Danke für deine tollen vorschläge werde sie gleich mal ausprobieren. :lol:

_________________
Wissen ist Macht. Nichts zu Wissen macht auch nichts
basti_1984 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 104

Linux, Win Xp, Win 2000
Delphi, C, C++, PHP,
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 380


D3 Prof, D4 Prof
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 104

Linux, Win Xp, Win 2000
Delphi, C, C++, PHP,
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 104

Linux, Win Xp, Win 2000
Delphi, C, C++, PHP,
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 380


D3 Prof, D4 Prof
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 380


D3 Prof, D4 Prof
BeitragVerfasst: Mi 07.02.07 10:31 
hi ich nochmal
Scheiß Grippe
Also, hier einmal eine richtige Eingabeprüfung für eine Integer..


ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
Procedure TMyForm.MyEditKeyPress(Sender:TObject;Var Key:Char);
Begin
  If Key<>Chr(8then
  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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 104

Linux, Win Xp, Win 2000
Delphi, C, C++, PHP,
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 380


D3 Prof, D4 Prof
BeitragVerfasst: 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
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10184
Erhaltene Danke: 1259

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: 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... :P

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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 380


D3 Prof, D4 Prof
BeitragVerfasst: 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....