![]() |
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:
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):
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);
Code:
:wall:
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'); Vielen Dank schonmal für die Hilfe :kotz: |
Re: SQL Abfrage verschluckt Kommas
Setz mal DecimalSeparator auf ','. Es scheint so als das er die Kommas nicht als Decimal-Trenner erkennt.
|
Re: SQL Abfrage verschluckt Kommas
Hallo Schattenmann, bei mir funktioniert das:
Delphi-Quellcode:
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.
// 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; Grüße vom marabu |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:17 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz