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