【发布时间】:2012-02-14 04:54:01
【问题描述】:
我们已经将代码移植到 Delphi XE2,并且需要将我们的数据访问组件从不再使用的第三方 ODBCExpress 更改为 dbExpress 的 TSQLQuery。
我们有参数化的 SQL 查询,例如:
sSQL :=
'UPDATE ZTestData SET '+
' StringField =?, '+
' IntField = ?, '+
' DecimalField = ?, '+
' BooleanField = ?, '+
' DateTimeField = ?, '+
' TextField = ? '+
' WHERE UniqueID = 3';
如果我们使用以下代码:
var
qry:TSQLQuery;
begin
qry.Close;
qry.SQL.Text := sSQL;
ShowMessage(IntToStr(qry.Params.Count));
end;
它返回 0,所以我们无法让绑定工作,但是如果我们将 sSQL 更改为:
sSQL :=
'UPDATE ZTestData SET '+
' StringField =:Param1, '+
' IntField = :Param2, '+
' DecimalField = ?, '+
' BooleanField = ?, '+
' DateTimeField = ?, '+
' TextField = ? '+
' WHERE UniqueID = 3';
它返回 2。
将所有 SQL 查询更改为新的参数语法会很麻烦。无论如何,TSQLQuery 是否可以识别?语法?
我看到 DBXCommon.TDBXCommand 使用 ?语法:
http://www.andreanolanusse.com/en/parameterized-queries-with-dbexpress-dbx-framework/
但这意味着丢弃我们使用 TSQLQuery 的代码。解决此问题的最快/最简单方法是什么?无论如何,TSQLQuery 和 TDBXCommand 有什么区别,与我相关的是什么?
【问题讨论】: