![]() |
Datenbank: ZEN • Version: 14 • Zugriff über: FireDAC/ ODBC
FireDac-Query.Fields[Idx].AsString gibt 147 aus anstelle 147,00
Hallo,
ich muss eine csv-Datei erzeugen mit Daten aus einer Datenbank. Dabei muss ich für alle nummerischen Werte eine Norm einhalten (nnn,nn). Also wende ich im SQL-Statement brav
Code:
an. Das Result zeigt auch alle nummerischen Werte in dem Format nnn,nn an.
CAST( <SPALTE_X> As DECIMAL(3,2) )
Wenn ich nun in Delphi Qry.Fields[Idx].AsString anwende, wird anstelle 147,00 dann nur noch 147 ausgegeben. Ich muss das als ".AsString" casten wegen Ausgabe in eine TStringList, die später das Ganze als csv-Datei wegspeichert. Erschwerend: Es ist ein dynamisches SQL-Statement, dass der Anwender über einen Dialog zusammenstellt. Ich weiß also nicht welche Spalte welchen Datentyp hat. Ich will vermeiden, dass ich die ganzen Datentypen pro Spalte abprüfen muss um es dann entsprechend zu formatieren. Weiß jemand wie ich bei Verwendung des Cast "AsString" bei einer Query das Ganze so anpassen kann, dass bei Zahlen diese immer im Format nnn,nn ausgegeben werden? In den ganzen Query-Optionen habe ich nichts gefunden. Vielen Dank! |
AW: FireDac-Query.Fields[Idx].AsString gibt 147 aus anstelle 147,00
Zitat:
|
AW: FireDac-Query.Fields[Idx].AsString gibt 147 aus anstelle 147,00
Danke @DeddyH.
Ich habe jetzt erst einmal eine Q&D-Lösung. Gefällt mir nicht, scheint aber in ersten Tests zu funktionieren. Ihr kennt das auch, oder? Wenn nicht genügend Zeit ist, dann muss man auch mit Q&D- Lösungen leben, wenn sie denn funktionieren.
Code:
s := FD_Qry.Fields[Idx].AsString;
IF TryStrToFloat( s, ls_FloatValue ) THEN Zeile := Zeile + Separator_from_ini + FormatFloat( '000.00', ls_FloatValue ) ELSE Zeile := Zeile + Separator_from_ini + s |
AW: FireDac-Query.Fields[Idx].AsString gibt 147 aus anstelle 147,00
AsString ist dafür nicht geeignet. Um das DisplayFormat-Setzen bei dem Feld kommst du zwar trotzdem nicht herum, aber den damit erzeugten String bekommst du über das Property DisplayText.
|
AW: FireDac-Query.Fields[Idx].AsString gibt 147 aus anstelle 147,00
Danke Uwe!
Ich habe das jetzt geändert in
Code:
s := FD_Qry.Fields[Idx].DisplayText;
|
AW: FireDac-Query.Fields[Idx].AsString gibt 147 aus anstelle 147,00
Erzeugt ein CAST(... AS DECIMAL) nicht ein TBCDField statt eines TFloatField?
|
AW: FireDac-Query.Fields[Idx].AsString gibt 147 aus anstelle 147,00
Den CAST brauchst du doch garnicht, da du eh in deinem Delphi Programm die Formatierung mit DisplayFormat und DisplayText machst.
|
AW: FireDac-Query.Fields[Idx].AsString gibt 147 aus anstelle 147,00
Danke an alle Helfenden!
@by Frickler, Du hast Recht, ein CAST(... AS DECIMAL) erzeugt ein TBCDField. Ein CAST(... AS FLOAT) erzeugt ein TFloatField, aber beide Varianten ändern nicht das Verhalten, das die Ausgabe von 147,00 (aus dem SQL-Result) bei der Ausgabe von Qyr.Fields[Idx].DisplayText oder Qyr.Fields[Idx].AsString nur den String 147 ausgibt , anstelle 147,00. Dein Anstoss mit den TField-Typen hat mich nun aber in eine ganz neue Richtung gelenkt! :-D Ich habe jetzt folgendes umgesetzt:
Delphi-Quellcode:
Ich hoffe ich habe alle Typen, die Nachkommastellen haben können, aufgeführt und kann so in meiner Schleife über die Query alles korrekt formatiert in String ausgeben.
my_Format := '0.00';
TFloatField( Qyr.Fields[Idx] ).DisplayFormat := my_Format; TBCDField( Qyr.Fields[Idx] ).DisplayFormat := my_Format; TFMTBcdField( Qyr.Fields[Idx] ).DisplayFormat := my_Format; TCurrencyField( Qyr.Fields[Idx] ).DisplayFormat := my_Format; s := Qyr.Fields[Idx].DisplayText; @Rolf Frei, Danke für den Tipp mit dem CAST. Den hatte ich tatsächlich noch im SQL-Statement drin. :oops: |
AW: FireDac-Query.Fields[Idx].AsString gibt 147 aus anstelle 147,00
Zitat:
Delphi-Quellcode:
my_Format := '0.00';
TNumericField( Qyr.Fields[Idx] ).DisplayFormat := my_Format; s := Qyr.Fields[Idx].DisplayText; |
AW: FireDac-Query.Fields[Idx].AsString gibt 147 aus anstelle 147,00
Hallo Uwe,
TNumericField kannte ich noch nicht. Vielen Dank für diese Erleuchtung! :thumb: Gute Nacht! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:15 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 by Thomas Breitkreuz