Как вывести значение параметра в SQL после его вставки?

Можно ли извлечь оператор SQL со значениями параметров после того, как он был установлен и вставлен в компонент SQL?

Оператор SQL:

SELECT * FROM SomeTable
WHERE SomeColumn = :pSomeValue;

Код:

procedure LoadParams(aValue: string);
begin
  Qry.Close;
  Qry.ParamByName('pSomeValue').AsString := aValue;
  MessageDlg(Qry.SQL.Text, mtInformation, [mbOK], 0); // this does not show the value but the parameter name.     
  Qry.Open;
end;

Я хочу видеть оператор до его открытия, но когда я пытаюсь сделать это сейчас, я получаю имя параметра вместо значения.

2 ответа

Решение

Параметры запроса обычно подставляются в СУБД, то есть значения передаются по соединению отдельно, а не как часть оператора SQL. Если вы хотите увидеть SQL и значения вместе, журналы БД могут помочь вам в этом.

Одна вещь, которую вы можете сделать, это продублировать параметр и поместить его в SELECT:

SELECT :pSomeValueDuplicate AS paraminput, * FROM SomeTable
WHERE SomeColumn = :pSomeValue;

Qry.ParamByName('pSomeValue').AsString := aValue;
Qry.ParamByName('pSomeValueDuplicate').Value := Qry.ParamByName('pSomeValue').Value;

Затем вы можете проверить поле: paraminput для того, что вы использовали в качестве ввода. Почему-то я не могу заставить Delphi использовать один и тот же параметр дважды в одном запросе.

SELECT 'SELECT * FROM SomeTable WHERE SomeColumn ='+ :pSomeValueduplicate AS thesqlinput,* FROM SomeTable WHERE SomeColumn = :pSomeValue;

На самом деле вы можете сделать это только с одним параметром:

SELECT 'SELECT * FROM SomeTable WHERE SomeColumn ='+ SomeColumn AS thesqlinput,* FROM SomeTable WHERE SomeColumn = :pSomeValue;
Другие вопросы по тегам