AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Runden bei einer SQl Abfrage

Runden bei einer SQl Abfrage

Ein Thema von stonimahoni · begonnen am 7. Feb 2006 · letzter Beitrag vom 9. Feb 2006
Antwort Antwort
stonimahoni

Registriert seit: 12. Okt 2004
146 Beiträge
 
Delphi 7 Professional
 
#1

Runden bei einer SQl Abfrage

  Alt 7. Feb 2006, 12:12
Datenbank: Access • Version: 2000 • Zugriff über: ADO Komponenten
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
Carsten
  Mit Zitat antworten Zitat
sir-archimedes

Registriert seit: 2. Jan 2006
Ort: Münster
167 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Runden bei einer SQl Abfrage

  Alt 7. Feb 2006, 12:16
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.
  Mit Zitat antworten Zitat
WePo

Registriert seit: 11. Jan 2006
Ort: Buttenheim
20 Beiträge
 
Delphi 6 Professional
 
#3

Re: Runden bei einer SQl Abfrage

  Alt 9. Feb 2006, 15:10
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
Machen wir dem Fehlerteufel einen Knoten in den Schwanz
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#4

Re: Runden bei einer SQl Abfrage

  Alt 9. Feb 2006, 17:24
AS gilt auch im Zusammenhang :

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

Hier noch konkretes Beispiel, welches funktioniert :

GESNETTO = CAST (BETRAG / (1 + MWSTPROZ / 100) AS DECIMAL (15,2));
Gruß
Hansa
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 22:42 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