Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Runden bei einer SQl Abfrage (https://www.delphipraxis.net/62617-runden-bei-einer-sql-abfrage.html)

stonimahoni 7. Feb 2006 11:12

Datenbank: Access • Version: 2000 • Zugriff über: ADO Komponenten

Runden bei einer SQl Abfrage
 
Hi Leute...


mir scheint ich sehe grad den Wald vor lauter Bäumen nicht.

Habe hier folgendes SQL Statement :

SQL-Code:
SELECT kundendienst.Firma1 AS [Firma], Avg([auftrag]![Rep_zurueck_datum]-[auftrag]![ausgangsdatum]) AS [Mittlere Reparaturdauer], Avg(auftrag.Reparaturkosten) AS [Mittlere Kosten], Sum(auftrag.Reparaturkosten) AS [Gesamtreparaturkosten]
FROM kundendienst INNER JOIN auftrag ON kundendienst.kundendienstnr = auftrag.Kundendienstnr;

sooo...nun habe ich das "Problem", dass ich dann in meinem Grid, in dem ich mir die Daten anzeigen lasse, Zahlen bei Mittlere Reparaturdauer rausbekomme wie 8,3333333333.
Wie kann ich das bitte Runden auf sagen wir max. 2 Nachkommastellen ?


Vielen Dank.


MFG

Carsten

sir-archimedes 7. Feb 2006 11:16

Re: Runden bei einer SQl Abfrage
 
Es gibt für jedes Feld deines DataSets die Eigenschaft DisplayFormat. Setze dieses z.B. auf #0.00 Dann bekommst du die Anzeige immer mit 2 Nachkommastellen und mind. einer Stelle vor dem Komma.

WePo 9. Feb 2006 14:10

Re: Runden bei einer SQl Abfrage
 
Hi,
kenne mich mit access nicht aus, aber dies ist ja wohl ein Problem der Darstellung im DBGrid.
Für nicht persistente Felder, sql-code wie gewünscht,
ein DBGrid mit der datasource einer (zu füllenden) query verbinden
und dann die einzelnen Felder iterieren.
Ich habe dies für mich so gelöst:
Delphi-Quellcode:
procedure Tfsql.DBgridEnter(Sender: TObject);
var
ft:Tfieldtype;
fn,s:string;
i:integer;
begin
      i:=0;
      with query do
      begin
            active:=false;
            sql.clear;
            sql.add(sql.text);
            open;
            dbgrid.datasource:=datasource;
            for i:=0 to fieldcount-1 do
            begin
                  ft:=fields[i].DataType;
                  fn:=fields[i].fieldname; // siehe weiter unten
                  if ft=ftstring then ...
                  if ft=ftinteger then ...
                  if ft=ftword then ...
                  if ft=ftfloat then
                  begin
                         Tfloatfield (fields[i]).displayformat:='0.00';
                         // dein Avg sollte wohl von diesem Typ sein
                  end;
            end; // for to
      end; // with query
end;
Der Zugriff auf den fieldname stellt dir noch weiteres zur Verfügung.
Über weitere if /case Abfragen fields[i].displaywidth einstellen, DBgrid.columns[i].alignment usw.

Werner

Hansa 9. Feb 2006 16:24

Re: Runden bei einer SQl Abfrage
 
SQL-Code:
AS
gilt auch im Zusammenhang :

SQL-Code:
6.666666666 CAST AS DECIMAL (15,2)
würde 6.67 zurückliefern !

Hier noch konkretes Beispiel, welches funktioniert :

SQL-Code:
GESNETTO = CAST (BETRAG / (1 + MWSTPROZ / 100) AS DECIMAL (15,2));


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:45 Uhr.

Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf