Может ли TSQLQuery dbExpress использовать? в качестве параметров?

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

5
задан Robo 14 February 2012 в 04:54
поделиться