2013-04-17 28 views
0

在設置並插入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; 

我想打開它之前能夠看到的聲明,但是當我嘗試這個現在我得到帕拉姆名稱,而不是值。

+0

數據庫引擎和德爾福連接庫做u使用哪一個? http://en.wikipedia.org/wiki/Insert_sql#Retrieving_the_key –

+1

您可以選擇使用AutoInc字段:http://www.nexusdb.com/support/index.php?q=howautoincworks2.htm嗯,​​您告訴您使用[tag:nexusdb],不是嗎? –

+0

的確我是這樣做的:D + 1的提示​​! –

回答

4

通常在DBMS中替換查詢參數,即分別通過連接發送值,而不是作爲SQL語句的一部分。如果您希望一起查看SQL和值,那麼數據庫的日誌可能會幫助您。

+3

+ 1作爲select * from發票的示例,其中CustomerID =:ID'這可以在SQL-Profile中看到 'exec sp_executesql N'select * from Invoice where CustomerID = @ P1',N'@ P1 int' ,12' – bummi

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你用什麼作爲輸入。 不知何故,我無法讓德爾福在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;