Как вывести значение параметра в 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;