我們已將代碼移植到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