在设置并插入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;
我希望能够在打开之前看到该语句,但是当我尝试这个时,我得到了param名称而不是值。
答案 0 :(得分:4)
查询参数通常在DBMS中替换,即值分别通过连接发送,而不是作为SQL语句的一部分。如果您希望一起查看SQL和值,则DB的日志可能会帮助您。
答案 1 :(得分:1)
您可以做的一件事是复制参数并将其放在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在1次查询中两次使用相同的参数。
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;