Delphi中不同区域设置不同格式浮点数

时间:2012-07-14 10:05:30

标签: sql delphi floating-point format comma

我想使用BDE Paradox在Delphi中创建Insert SQL Statement

value_a := 0,123;
value_b := 0,234;
value_c := 0,345;
insert into mst_value values (value_a, value_b, value_c);

它在调试后显示“无效的SQL参数”之类的错误,它显示了sql完整的语法,如

insert into mst_value values (0,123, 0,234, 0,345) 

应该是点,但是小数点上的逗号,所以我使用formatfloat('#.###,value_a)格式化它,...`它仍然使用逗号,在将控制面板上的区域设置更改为英语后, SQL参数是正确的,这是因为货币或数字格式就像123,123,123.00,所以,我如何格式化十进制数,但来自另一个国家,例如印度尼西亚,格式为123,123,123,123.00而不是123.123.123,00。谢谢......

3 个答案:

答案 0 :(得分:2)

在调用formatFloat函数之前,请尝试这种方式 可以为Delphi的变量ThousandsSeparatorDecimalSeparator设置适当的值:

FormatFloat( "$##.000", value_a );

答案 1 :(得分:1)

你怎么做这样的字符串? “插入mst_value值(0,123,0,234,0,345)”

它正在寻求SQL注入,这将允许任何人闯入你的程序。

使用TQuery.Params代替,使用严格的数据类型检查。

http://issuetracker.delphi-jedi.org/view.php?id=5916

的评论中对此进行了更多推理

答案 2 :(得分:1)

我和Arioch在一起。您应该使用参数化查询。这将让数据库引擎为您处理格式化,例如:

value_a := 0,123; 
value_b := 0,234; 
value_c := 0,345; 

Query.SQL.Text := 'insert into mst_value values (:value_a, :value_b, :value_c)'; 
Query.ParamByName('value_a').AsFloat := value_a;
Query.ParamByName('value_a').AsFloat := value_b;
Query.ParamByName('value_a').AsFloat := value_c;
Query.ExecSQL;