我们已将代码移植到Delphi XE2,并且需要将我们的数据访问组件从不再处于业务状态的第三方ODBCExpress更改为dbExpress的TSQLQuery。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之间有什么区别,关于什么与我有关?
查看我的回答。 DB.TParams.ParseSQL是一种将参数转换为问号的方法,如果这是您想要去的路线。我更喜欢自己的ParamByName。 – Robo 2012-02-16 22:00:46