Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Ausgabe von Money-Werten in DBGrid (https://www.delphipraxis.net/112238-ausgabe-von-money-werten-dbgrid.html)

texmurphy901 17. Apr 2008 10:57


Ausgabe von Money-Werten in DBGrid
 
Hallo Allerseits,

ich habe da folgendes Problem:
Ich habe eine Datenbank-Tabelle (MSSQL) in der u.a. ein Money-Wert abgespeichert wird. Den Inhalt der Tabelle lasse ich auf ein DBGrid ausgeben. Soweit so gut.
Das Problem ist, dass das Grid die Ausgabe der Money-Werte offensichtlich formatiert, denn aus "ganzen" Werten, wie z.B. 12.00 macht das Grid einfach "12", es läßt also die 2 Nachkommastellen einfach weg. Das sieht nicht nur unschön aus ist obendrein auch noch verwirrend.
Ein Versuch, das ganze in varchar zu konvertieren hat zwar geklappt, aber dann wird die Spalte auf einmal linksbündig ausgegeben, was wiederum unschön ist.(Das Konvertieren erfolgte in MSSQL mittels convert...)

Daher meine Frage(n):
Weiß jemand, wie ich das Grid überreden kann, bei Money -Werten die Nachkommastellen "00" mit auszugeben?
ODER
Weiß jemand, wie ich das automatische Ändern der Bündigkeit beim Umwandeln in varchar abschalten kann?


Für jeden Tipp dankbar
grüßt
Murphy

DeddyH 17. Apr 2008 11:04

Re: Ausgabe von Money-Werten in DBGrid
 
Du könntest im OnDrawColumnCell das Zeichnen selbst übernehmen.

Helld_River 17. Apr 2008 11:09

Re: Ausgabe von Money-Werten in DBGrid
 
Hey,

folgenden Ansatz haben wir verfolgt:
1.) Schleife über alle Felder des Grids
2.) CASE-Anweisung für alle Datatypes:
Delphi-Quellcode:
case aTable.Fields[i].DataType of
3.) pro DataType das gewünschte DisplayFormat setzen
Delphi-Quellcode:
TCurrencyField(aTable.Fields[i]).DisplayFormat:=

nochmals als Codesnippet:
Delphi-Quellcode:
for i := 0 to aTable.FieldCount -1 do
begin
  case aTable.Fields[i].DataType of
        ...
        ftCurrency:TCurrencyField(aTable.Fields[i]).DisplayFormat := ...
        ...
  end;
end;
Hoffe, das hilft dir weiter.

gruß, Helld

texmurphy901 17. Apr 2008 12:23

Re: Ausgabe von Money-Werten in DBGrid
 
Besten Dank Helld ! Die Antwort klappte wunderbar!

Bem.: Ich weiß nicht, ob es daran liegt, dass ich eine ADOQuery und keine TTAble verwende, aber die Spalte vom Typ MONEY bekommt im DBGrid (bzw. in der ADOQuery) den Datentyp ftBCD und nicht den erwarteten ftCurrency. Warum das so ist, weiß ich leider nicht, aber als ich das dann endlich herausbekommen habe, funktioniert die Formatierung:
Delphi-Quellcode:
       ftBCD:TCurrencyField(query.Fields[i]).DisplayFormat :='#,0.00;-#,0.00';
Also nochmal besten Dank für die schnelle Antwort!
Murphy

Helld_River 17. Apr 2008 12:44

Re: Ausgabe von Money-Werten in DBGrid
 
Hi,

hmm, mit ADO hab ich selbst noch nicht gearbeitet, aber die Delphihilfe sollte ja hierzu auch eine Auflistung aller Typen haben ;)

Freut mich, geholfen zu haben...

Gruß, Helld

norwegen60 22. Apr 2008 10:40

Re: Ausgabe von Money-Werten in DBGrid
 
Hallo zusammen,

ihr habt jetzt die Formatierung über den Quellcode vorgenommen. Aber gibt es keine Möglichkeit, diese direkt im SQL festzulegen? Mit
SQL-Code:
Select cast(preis as money), ...
oder
SQL-Code:
Select convert(money, preis), ...
wird die Anzeige wenigstens gezwungen unendlichen Nachkommastellen auf 4 zu reduzieren. Blöderweise werden aber 0 unterdrückt, so dass z.B. 12,1000 als 12,1 angezeigt wird. Ich möchte aber alle mit 2 und wenn sein muss auch mit 4 Nachkommastellen. Ich denke die 4 Stellen sind eine Einstellung in der DB.

Ich arbeite mit ADO und MsSQL

Gerd


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:15 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