3

我想使用 BDE Paradox 在 Delphi 中插入 SQL 语句,它是

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

它在调试后显示类似'invalid SQL parameter'的错误,它表明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。之前谢谢...

4

3 回答 3

2

试试这样,在调用 formatFloat 函数之前,可以为 Delphi 的变量ThousandsSeparatorDecimalSeparator设置合适的值:

FormatFloat( "$##.000", value_a );
于 2012-07-14T10:15:39.683 回答
1

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

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

改用 TQuery.Params,并进行严格的数据类型检查。

在http://issuetracker.delphi-jedi.org/view.php?id=5916的评论中对此进行更多推理

于 2012-07-18T14:04:50.170 回答
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;
于 2012-07-18T23:24:00.893 回答