Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL Abfrage verschluckt Kommas (https://www.delphipraxis.net/63320-sql-abfrage-verschluckt-kommas.html)

shadowman1985 16. Feb 2006 20:49

Datenbank: Paradox • Version: 7 • Zugriff über: BDE

SQL Abfrage verschluckt Kommas
 
Hallo,

hab da eine kleine SQL Abfrage, eigentlich klappt auch alles genau so wie es soll, aber irgendwie wird das Komma verschluckt.

Die SQL Abfrage soll lediglich ein paar Beträge addieren. Das Ergebnis wird auch richtig erfasst, lediglich "ohne" Komma.

Tabelle "endpreis" ist vom Typ String (Werte á la 129,99 oder 19,99)

Code:
Form1.Query1.Active := False;
               Form1.Query1.SQL.Clear;
                        Form1.Query1.Sql.Add('SELECT SUM(CAST(endpreis as float)) AS anzahl FROM verkaeufe WHERE CAST(Angebotsende as date) BETWEEN :tag_von AND :tag_bis');
                        Form1.Query1.ParamByName('tag_von').AsDate := StrToDate('01.'+month_data+'.'+year_data);
                        Form1.Query1.ParamByName('tag_bis').AsDate := StrToDate(IntToStr(anz_tage)+'.'+month_data+'.'+year_data);
               Form1.Query1.Open;
               showmessage(Form1.Query1.FieldByName('anzahl').AsString);
Also Ergebnis käme hier von "9,40 + 10,20" nicht "19,60" heraus, sondern "1960". Ich weiß nicht woran es liegen könnte, hab folgende SQL Abfragen bereits probiert (ohne Erfolg):

Code:
Form1.Query1.Sql.Add('SELECT SUM(CAST(endpreis as integer)) AS anzahl FROM verkaeufe WHERE CAST(Angebotsende as date) BETWEEN :tag_von AND :tag_bis');
Form1.Query1.Sql.Add('SELECT SUM(CAST(endpreis as money)) AS anzahl FROM verkaeufe WHERE CAST(Angebotsende as date) BETWEEN :tag_von AND :tag_bis');
Form1.Query1.Sql.Add('SELECT SUM(CAST(endpreis as float)) AS anzahl FROM verkaeufe WHERE CAST(Angebotsende as date) BETWEEN :tag_von AND :tag_bis');
Form1.Query1.Sql.Add('SELECT SUM(CAST(endpreis as char)) AS anzahl FROM verkaeufe WHERE CAST(Angebotsende as date) BETWEEN :tag_von AND :tag_bis');
:wall:

Vielen Dank schonmal für die Hilfe :kotz:

mkinzler 16. Feb 2006 20:54

Re: SQL Abfrage verschluckt Kommas
 
Setz mal DecimalSeparator auf ','. Es scheint so als das er die Kommas nicht als Decimal-Trenner erkennt.

marabu 17. Feb 2006 10:23

Re: SQL Abfrage verschluckt Kommas
 
Hallo Schattenmann, bei mir funktioniert das:

Delphi-Quellcode:
// uses DateUtils;

function TDemoForm.ProjectedSum(year, month: Word): Extended;
const
  SEL
    = 'SELECT SUM(CAST(endpreis as float)) '
    + 'FROM verkaeufe WHERE CAST(Angebotsende as date) '
    + 'BETWEEN :tag_von AND :tag_bis'
    ;
var
  dtPrimo, dtUltimo: TDateTime;
begin
  dtPrimo := EncodeDate(year, month, 1);
  dtUltimo := EncodeDate(year, month, DaysInAMonth(year, month));
  with QProjectedSum do
  begin
    SQL.Text := sel; // muss eigentlich nur einmal gemacht werden
    ParamByName('tag_von').AsDate := dtPrimo;
    ParamByName('tag_bis').AsDate := dtUltimo;
    Open;
    Result := Fields[0].AsFloat;
    Close;
  end;
end;
Allerdings würde ich die Tabelle so umformen, dass ENDPREIS als Währungsbetrag ($) gespeichert wird, da der Dezimalpunkt umkonfiguriert werden kann und das Programm dann nicht mehr funktioniert. Auch das Angebotsende sollte aus den gleichen Gründen den richtigen Feldtyp haben. Du kannst die Tabelle mit dem Tool Datenbankoberfläche umformen. Mache es mit einer Kopie, damit du auf eventuelle Fehler reagieren kannst. Wenn du eine dedizierte Query-Komponente spendierst, dann muss der SQL-Text nicht jedesmal neu gesetzt werden.

Grüße vom marabu


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