Мы переносим код на Delphi XE2, и нам нужно изменить наши компоненты доступа к данным со стороннего ODBCExpress, который больше не работает, на TSQLQuery от dbExpress.
У нас есть параметризованный 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 с точки зрения того, что мне важно?