Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   kaufmännisches Runden in einer SQL-abfrage (https://www.delphipraxis.net/132501-kaufmaennisches-runden-einer-sql-abfrage.html)

khh 14. Apr 2009 08:58


kaufmännisches Runden in einer SQL-abfrage
 
Hallo zusammen,

zum kaufmänischen Runden habe ich hier im Forum folgende Function gefunden:
Delphi-Quellcode:
function RoundCurrency(const Value:Currency; const nk:Integer):Currency;
const
  faktors : array[-3..3] of Integer = (
     10000000, 1000000, 100000, 10000, 1000, 100, 10);
var
  x : Int64;
  y : Int64;
begin
  // Currency hat ja nur 4 Nachkommastellen
  if (nk>=4) or (Value=0) then
  begin
    Result := Value;
    Exit;
  end;
  if nk < Low(faktors) then
    raise EInvalidArgument.CreateFmt('RoundCurrency(,%d): invalid arg', [nk]);


  // Currency nach Int64 casten
  x := PInt64(@Value)^;
  y := faktors[nk];

  if x > 0 then
    x := ((x+(y div 2)) div y)*y
  else
    x := ((x-(y div 2)) div y)*y;

  // Int64 nach Currency casten
  Result := PCurrency(@x)^;
end;
das funktioniert auch soweit richtig, zumindest habe ich in der Kürze der Zeit keinen Fehler finden können.

jetzt stellt sich mir folgendes Problem:
in einer sql-Abfrage habe ich ein berechnetes feld:


..., (nettopreis + (nettopreis/100 * CAST(:mwstsatz AS NUMERIC(15,2)))) as bruttopreis,....

diese wird für die darstellung im Grid folgendermassen formatiert:

TFloatField(FpreiseQuery.Fields[4]).DisplayFormat := '######0.00';

wie kann ich den bruttopreis jetzt kaufmännisch runden ?




Danke für eure Ideen.


Gruss KH

nahpets 14. Apr 2009 09:38

Re: kaufmännisches Runden in einer SQL-abfrage
 
Hallo,

wie wäre es mit Round?

SQL-Code:
Round(nettopreis + (nettopreis/100 * CAST(:mwstsatz AS NUMERIC(15,2)))),2) as bruttopreis

khh 14. Apr 2009 10:29

Re: kaufmännisches Runden in einer SQL-abfrage
 
Zitat:

Zitat von nahpets
Hallo,

wie wäre es mit Round?

SQL-Code:
Round(nettopreis + (nettopreis/100 * CAST(:mwstsatz AS NUMERIC(15,2)))),2) as bruttopreis

danke, scheint zu funktionieren, wobei mir noch nicht klar ist weshalb

bruttopreis := Round(bruttopreis,2);
nicht funktioniert?
hier bekomme ich :
Error: Wrong number of parameters specified for call to "round"


danke gruss KH

DeddyH 14. Apr 2009 10:39

Re: kaufmännisches Runden in einer SQL-abfrage
 
Meinst Du das Delphi-Round? Das kennt nur einen Parameter, ich vermute, Du suchst RoundTo.

khh 14. Apr 2009 10:41

Re: kaufmännisches Runden in einer SQL-abfrage
 
Zitat:

Zitat von DeddyH
Meinst Du das Delphi-Round? Das kennt nur einen Parameter, ich vermute, Du suchst RoundTo.

ja aber was ist das denn für ein round in der SQL abfrage?
das sind doch 2 parameter, oder seh ich nicht richtig?



Round(nettopreis + (nettopreis/100 * CAST(:mwstsatz AS NUMERIC(15,2)))),2) as bruttopreis

Gruss Kh

DeddyH 14. Apr 2009 10:45

Re: kaufmännisches Runden in einer SQL-abfrage
 
Ja, aber das ist Runden in SQL, nicht in Delphi.

khh 14. Apr 2009 10:52

Re: kaufmännisches Runden in einer SQL-abfrage
 
Zitat:

Zitat von DeddyH
Ja, aber das ist Runden in SQL, nicht in Delphi.

;-)
aha, das ist also ne sql-funktion!

dann ist das CAST in:
Round(nettopreis + (nettopreis/100 * CAST(:mwstsatz AS NUMERIC(15,2)))),2) as bruttopreis

auch ne sqlfunktion?

heisst delphi -funktionen sind im sql-statement nicht möglich?

Danke gruss KH

DeddyH 14. Apr 2009 10:54

Re: kaufmännisches Runden in einer SQL-abfrage
 
Dazu müsste das DBMS ja Delphi verstehen :zwinker:

mkinzler 14. Apr 2009 10:54

Re: kaufmännisches Runden in einer SQL-abfrage
 
Zitat:

heisst delphi -funktionen sind im sql-statement nicht möglich?
Ja, da die Abfrage ja auf dem Server ausgeführt wird und nur das Ergebnis an den Client übertragen wird.

khh 14. Apr 2009 10:56

Re: kaufmännisches Runden in einer SQL-abfrage
 
Zitat:

Zitat von DeddyH
Dazu müsste das DBMS ja Delphi verstehen :zwinker:

ok, wie recht du hast ;-)



ich danke euch


Gruss Kh


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