这几天拿到公司以前项目中的一个用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和直接连接字符串的方式。
在这里记上一笔,希望以后能够找到原因。。。