![]() |
Datenbank: Firebird • Version: 2.1.1 • Zugriff über: Dataset
Berechnungen in der select-Anweisung
Hallo,
möchte gerne in der select-Anweisung bestimmte Spalten mit einem Faktor muliplizieren. Mit select VKPREIS * 80/100 as VKPREIS, funktioniert das auch. Mit 'select VKPREIS * ' + QuotedStr(FloatToStr(Quotient)) + ' as VKPREIS, usw.' funtioniert es nicht Es gibt einen Dynamic sql-Error. Bitte um Hilfe. Gruß, Luckner |
AW: Berechnungen in der select-Anweisung
Wieso QuotedStr? Benutz doch lieber SQL-Parameter, damit sparst Du Dir die Konvertierungen.
|
AW: Berechnungen in der select-Anweisung
Hallo DeddyH,
welche Parameter meinst Du. Bitte ein Beispiel. |
AW: Berechnungen in der select-Anweisung
Zitat:
|
AW: Berechnungen in der select-Anweisung
Hallo DaddyH,
ohhjaa, das ist ein guter Hinweis. Klar ein ',' ist das Problem. Danke |
AW: Berechnungen in der select-Anweisung
Man kann im SQL-Statement Parameter definieren und sie anschließend befüllen. Das sollte wann immer möglich die bevorzugte Vorgehensweise sein, da man einerseits nicht mit Konvertierungen am Hut hat und sich so außerdem vor SQL-Injection schützt.
Delphi-Quellcode:
Query.SQL.Text := 'SELECT VKPREIS * :Quotient AS VKPREIS FROM Tabelle';
Query.ParamByName('Quotient').Value := Quotient; Query.Open; |
AW: Berechnungen in der select-Anweisung
Leider verarbeiten manche Datenbanken die Parametertypen von Delphi nicht korrekt, so dass man zur Sicherheit evtl. auch noch folgendes machen kann / sollte:
Code:
Query.SQL.Text := 'SELECT VKPREIS * CAST(:Quotient AS SQL_DOUBLE) AS VKPREIS FROM Tabelle';
|
AW: Berechnungen in der select-Anweisung
Hallo DaddyH, Union
Leider gibt es in beiden Fällen einen "Dynamic SQL SQL Error expression evaluation not supported". Unterstützt Firebird diesen SQL-String nicht. Habe ebenfalls das ',' gegen '.' getauscht. Komischt ist nur, dass wenn icht diesen Quotienten im selectstring mit 80/100 ersetze, dann funktioniert es. Irgendwie mag die Select-Anweisung die Multiplikation * + String-Variable + nicht. |
AW: Berechnungen in der select-Anweisung
Wieso denn String? Was genau hast Du versucht?
|
AW: Berechnungen in der select-Anweisung
Hallo DeddyH,
hier ein Auszu aus meinem Prog: Prozentquotient := DatamoduleStamm.DataModule3.IBDataSetStammdaten.Fi eldByName('PROZENTSATZ').AsFloat /100; TempString := StringReplace(FloatToStrF(Prozentquotient,ffFixed, 10,2), ',', '.', [rfIgnoreCase, rfReplaceAll]); Prozentquotient := StrToFloat(TempString); ... ... IBDataSetGridAuftrag.SelectSQL.Add('SELECT POSITIONSSUMME * CAST(:Prozentquotient as DECIMAL(10,2)) as POSITIONSSUMME FROM TABLE XYZ'); DatamoduleAuftrag.DataModule2.IBDataSetGridAuftrag .ParamByName('Prozentquotient').Value := Prozentquotient; Jetzt gibt es den Fehler" 0.80 ist kein gültiger Gleitkommawert". |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:01 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 by Thomas Breitkreuz