Мы перенесли код на 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 в том, что касается меня?