AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Displayformat "0," bei DBEdit
Thema durchsuchen
Ansicht
Themen-Optionen

Displayformat "0," bei DBEdit

Ein Thema von mikelpahl · begonnen am 4. Feb 2006 · letzter Beitrag vom 7. Feb 2006
Antwort Antwort
mikelpahl

Registriert seit: 28. Jun 2004
Ort: Karlsruhe
12 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

Displayformat "0," bei DBEdit

  Alt 4. Feb 2006, 20:48
Datenbank: Firebird • Version: 1.5 • Zugriff über: IBX
Delphi6:
Ich habe ein IntergerFeld bei dem ich im Displayformat "0," stehen habe. Das soll dann auch für das Edit-Fromat gelten, da dieses leer ist. Das habe ich so gemacht damit ich die Tausenderpunkte bekomme.

In einem Formular habe ich eine DBEdit drauf gesetzt

Jetzt kommt mir das DBEdit mit einem Umwandlungsfehler (EDatabaseError) wenn ich Zahlen mit Tausenderpunkt manuell ändere und einen schon vorhandenen Tausenderpunkt stehen lassse oder ich das Datenbankfeld auf einen Wert größer 1000 setze solange das DBEdit aktiv das es dann laut Diplaformat als z.b "1.200" dargestellt.

Das Problem habe ich nicht nur bei dem Feld....
Michael Pahl
  Mit Zitat antworten Zitat
Ferber

Registriert seit: 9. Mär 2005
Ort: Wien Umgebung
155 Beiträge
 
Delphi 2006 Architect
 
#2

Re: Displayformat "0," bei DBEdit

  Alt 5. Feb 2006, 08:46
Guten Morgen Michael !

Die Eigenschaften DisplayFormat und EditMask sind IMHO Relikte aus der Zeit von TurboProfessional (TP4).

Wesentlich flexibler sind die Erreignismethoden OnGetText und OnSetText.
Hier kannst Du Daten umwandeln und überprüfen, wie es benötigt wird.
Speziell für Datumseingaben super. Da kann dann auch das Komma als Trennzeichen verwendet werden,
oder bei Zahlen ist es dann egal ob . oder , als Dezimaltrennzeichen verwendet wird.
Du musst nur die entsprechenden Prüf- und Umwandlungsfunktionen schreiben.

Ich stöbere mal in meiner Bibliothek und hänge im Edit Umwandlungsfunktionen für Prozent, Datum, und Float an.

Delphi-Quellcode:
unit YourName;

uses ...;

interface

function Bool2Str(v:Boolean):String; // Boolean -> X (= angekreuzt)
function Str2Bool(S:String):Boolean; // irgendwas -> Boolean

function Int2Str(v:Integer):String; // Integer -> String
function Str2Int(S:String):Integer; // String -> Integer

function Rab2Str(v:double):String; // Rabatt to String | 0.03 -> '3%' Nullwerte
function Str2Rab(s:String):Double; // String to Rabatt | '3%' -> 0.03 werden NICHT angezeigt

function Cur2Str(v:double):String; // currency to string | 2.5 -> '2,50'
function Str2Cur(s:String):Double; // string to currency | '2,50' -> 2.5

function Dat2Str(v:TDateTime):String;
function Str2Dat(S:String):TDateTime;

implementation

function Bool2Str(v:Boolean):String;
begin
  if v then Result:='X'
       else Result:='';
end;

function Str2Bool(S:String):Boolean;
begin
  Result:=Trim(s)<>'';
end;

function Int2Str;
begin
  if v=0
    then Result:=''
    else Str(v,Result)
end;

function Str2Int;
var c:Integer;
begin
  s:=Trim(s);
  Val(s,Result,c)
end;

function Rab2Str(v:double):String; // rabatt to string | 0.03 -> '3%'
begin
  if v=0.0
    then Result:=''
    else begin
           Str(v*100.0:0:0, Result);
           Result:=Result+'%';
         end
end;

function Str2Rab(s:String):Double; // string to rabatt | '3%' -> 0.03
begin
  s:=Trim(s);
  if s=''
    then Result:=0.0
    else if s[Length(s)]='%'
         then Result:=Str2Prz(s)
         else Result:=Str2Cur(s)*0.01
end;

function Str2Prz(s:String):Double; // string to prozent | '3%' -> 0.03
var c:Integer;
begin
  s:=Trim(s);
  if s=''
    then Result:=0.0
    else begin
           while (length(s)>0) and (s[Length(s)]='%') do Delete(s, length(s), 1); // % löschen
           Val(s, Result, c);
           Result:=Result*0.01;
         end;
end;

function Clean(s:String):String;
var p:Integer;
begin
  Result:=Trim(s);
  if Result='then exit;
  while Instr(Result, '.', p) do
    Delete(Result, p, 1);
  if InStr(Result, ',', p) then
     Result[p]:='.';
end;

function Cur2Str(v:double):String; // currency to string | 2.5 -> '2,50'
begin
  if v=0.0
    then Result:=''
    else Result:=FloatToStrF(v, ffNumber, 15, 2)
end;

function Str2Cur(s:String):Double; // string to currency | '2,50' -> 2.5
var c:Integer;
begin
  s:=Clean(s);
  if s=''
     then result:=0.0
     else Val(s, Result,c);
end;

function Dat2Str(v:TDateTime):String;
begin
  Result:=DateToStr(v)
end;

function Str2Dat(S:String):TDateTime;
begin
  Result:=stod(s);
end;

function stod;
var
  p:Integer;
begin
  p:=pos(',', s);
  while p>0 do
  begin
    s[p]:='.';
    p:=pos(',', s);
  end;
  s:=trim(s);
  if s=''
     then Result:=0
     else Result:=StrToDate(S)
end;

end.
Anwendung:
Delphi-Quellcode:
procedure TForm1.Table1DatumGetText(Sender: TField; var Text: String; DisplayText: Boolean);
begin
  Text:=Dat2Str(Sender.AsDateTime);
end;

procedure TForm1.Table1DatumSetText(Sender: TField; const Text: String);
begin
  Sender.AsDateTime:=Str2date(Text);
end;
Ist mehr geworden als ich eigentlich vorhatte
Otto
  Mit Zitat antworten Zitat
mikelpahl

Registriert seit: 28. Jun 2004
Ort: Karlsruhe
12 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

Re: Displayformat "0," bei DBEdit

  Alt 7. Feb 2006, 16:34
Vielen Dank werde ich dann wohl so machen müssen.
Ist ja echt krass dass man sich darum selber kümmern muss. Ich dachte das Delphi in der Ecke schon fertig wäre.
Michael Pahl
  Mit Zitat antworten Zitat
Antwort Antwort


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 08:10 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz