這幾天拿到公司以前項目中的一個用C++Builder做的程序,在我機器上調試,結果提示出錯:Operation not applicable
使用斷點跟蹤之后發現錯誤出在使用TQuery時執行open方法時,回追根源,得出以下反饋:
m_pqQuery
->
SQL
->
Add(?
"
Select?*?From?Table1?Where?Id?=?:PId?
"
?);
m_pqQuery
->
ParamByName(?
"
PId
"
?)
->
AsInteger?????
=
?某個int變量;
執行完這句之后,按正常情況,參數PId應該被賦予了一個整形值,但是Debug跟蹤顯示其值還是跟未賦值前是同樣表示的未知值。所以在執行open方法時出錯了。
如果我不是用該方法,直接把SQL語句寫死:
m_pqQuery
->
SQL
->
Add(?
"
Select?*?From?Table1?Where?Id?=?0?
"
?);
運行正常
或者用
char
?sql[
80
];
int
?n?
=
?某整形變量?;
sprintf(sql,
"
Select?*?From?Table1?Where?Id?=?%d
"
,n);
pqQuery
->
SQL
->
Add(sql);
也運行正常
查了下,原來給參數賦值的方法并沒有錯誤,編譯也能通過,況且以前該程序肯定是能正常運行的。。真是奇怪為什么在我這里就賦不上值。。調試了很久也沒能找到原因,只好作罷,為了順利運行,只能改為sprintf和直接連接字符串的方式。
在這里記上一筆,希望以后能夠找到原因。。。