AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Lazarus (IDE) Float und Integer in TDBGrid validieren
Thema durchsuchen
Ansicht
Themen-Optionen

Float und Integer in TDBGrid validieren

Ein Thema von Oniessen · begonnen am 1. Mär 2018 · letzter Beitrag vom 9. Mär 2018
 
Delphi.Narium

Registriert seit: 27. Nov 2017
2.555 Beiträge
 
Delphi 7 Professional
 
#6

AW: Float und Integer in TDBGrid validieren

  Alt 6. Mär 2018, 10:42
Zitat:
Delphi-Quellcode:
  Try
    StrToInt(Column.Field.AsString);
  except
    Column.Field.AsString := 'Bitte keinen Mist eingeben';
  end;
Bitte nicht so einen Mist.

Der arme Typ am Debugger kommt sonst und erwürgt dich.
Delphi-Referenz durchsuchenTryStrToInt oder Delphi-Referenz durchsuchenStrToIntDef
Das Beispiel war dahingehend gedacht:

Bau da bitte gefälligst eine vernünftige Fehlerbehandlung ein, aber niemals: Mach das genau so

Es sollte doch klar sein, dass man bei der Prüfung eines nummerischen Wertes, diesen im Fehlerfalle keinesfalls mit einem Text befüllt. Da kann man doch nur scheitern.

Bezüglich Dezimaltrenner:

Was steht in DefaultFormatSettings.DecimalSeparator und was wird eingegeben?

Stimmen Eingabe, Anzeige und DefaultFormatSettings.DecimalSeparator überein oder wird das "intern" bereits übersetzt?

Was soll hiermit erreicht werden, irgendwie verstehe ich es nicht:
Delphi-Quellcode:
 // #8 = Backspace; #0 = empty key ;
    if not (Key in [#8, '0'..'9', '-', MyDecSep]) then Key := #0

    else if ((Key = MyDecSep) or (Key = '-'))
             and (Pos(Key, CellText) > 0) then Key := #0

    else if (Key = '-') and (selStart <> 0) then Key := #0;
SetText wird vorher auf '' gesetzt. SelStart kann daher nur noch 0 sein, ebenso SelLength. Wann soll dann diese Bedingung erfüllt sein (selStart <> 0) ?
Wenn bei not key in auf - abgefragt wird und der - gefunden wird, wie soll dann im Else die Abfrage auf Key = '-' funktionieren?

Wie wäre es mit einem Ansatz in diese Richtung, statt If-Else-Kaskade per Case?
Delphi-Quellcode:
Case key of
  // zuerst mal alles das, was in Ordnung ist: (if not key in ...)
  #8 : ;
  '0'..'9' : ;
  '-' : ;
  ...
  // und dann das, was geändert oder verworfen werden muss.
else
  // die erste Else aus dem If bekommen wir hier schon nichtmehr
  // abgebildet, da vorher ja '-' und MyDecSep schon verarbeitet wurden.
  // In der zweiten Else wäre es eher unwahrscheinlich, dass sie
  // noch jemals zum Tragen kommt. '-' wurde vorher schon verarbeitet
  // und SelStart dürfte kaum jemals <> 0 sein.
end;
Eventuell eher so in der Art:
Delphi-Quellcode:
Case key of
  // zuerst mal alles das, was in Ordnung ist: (if not key in ...)
  #8 : ;
  '0'..'9' : ;
  '-' : ;
  ... // hier noch Dezimalseparator und ggfls. Tausendertrenner einfügen
  ... // und dann das, was geändert werden muss (wenn's sowas geben sollte).
else
  key := #0; // Alles andere wird verworfen.
end;
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:04 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz