关于ADOQuery参数的一个奇怪问题

MackedNice 2004-04-02 09:00:15
在用ADOQuery进行一个参数化查询时发生一个奇怪的错误
提示:
ADOQ_in_store: Parameter'Param'not found
代码如下:
AnsiString sql;
sql = "Select * From in_store Where Num =:Param";
DM->ADOQ_in_store->Close();
DM->ADOQ_in_store->SQL->Clear();
DM->ADOQ_in_store->SQL->Add(sql);
DM->ADOQ_in_store->Parameters->ParamByName("Param")->Value
= Edit1->Text
DM->ADOQ_in_store->Open();
奇怪的是:
我在另外的窗体对别的表进行非常类似的参数查询是完全正确的。
为什么有的正确,有的不行呢。希望大虾斧正。
...全文
70 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
MackedNice 2004-04-02
  • 打赏
  • 举报
回复
谁知道啊。。
UP 先
MackedNice 2004-04-02
  • 打赏
  • 举报
回复
错误提示的是
ADOQ_in_store: Parameter'Param'not found
为什么啊。
明明已经定义一个参数了。。。
不明白。
MackedNice 2004-04-02
  • 打赏
  • 举报
回复
Num 是字符类型
wcccc1 2004-04-02
  • 打赏
  • 举报
回复
可能是参数的类型问题NUM可能是数值型。而EDIT->TEXT一定是字符的了。所以可能出错。适适转换一下。
对了强烈建议
DM->ADOQ_in_store->SQL->text="sql语句"
MackedNice 2004-04-02
  • 打赏
  • 举报
回复
slhuang(★心如朗月连天静,性似寒潭彻底清★)
你这样好象不行啊。。
参数查询好象“:”不可以去掉啊。。
slhuang 2004-04-02
  • 打赏
  • 举报
回复
sql = "Select * From in_store Where Num =:Param";
改为: sql="select * from in_store where Num=Param";试下。
如果不得。是不是你的表建得有问题?
feihu989 2004-04-02
  • 打赏
  • 举报
回复
关注
MackedNice 2004-04-02
  • 打赏
  • 举报
回复
我试了。加上
DM->ADOQ_in_store->Parameters->Clear();
参数该为PParam
还是不行。一查询就出错。
但是另外窗体的参数查询一点也没有改。查询的结果完全正确。
郁闷ING。。
lovebcb05 2004-04-02
  • 打赏
  • 举报
回复
up
MackedNice 2004-04-02
  • 打赏
  • 举报
回复
谢谢。
我试试先
WbtServer 2004-04-02
  • 打赏
  • 举报
回复
你的数据集打开以后要清空参数
DM->ADOQ_in_store->Parameters->ParamByName("Param")->Value
= Edit1->Text
DM->ADOQ_in_store->Open();
DM->ADOQ_in_store->Parameters->Clear();
等你下次再查询的时候就没有问题。
fleamboy 2004-04-02
  • 打赏
  • 举报
回复
我觉得对于参数最好不使用“Param“这个变量,有时候是有些问题。
hailin10 2004-04-02
  • 打赏
  • 举报
回复
到底是什么错误啊
MackedNice 2004-04-02
  • 打赏
  • 举报
回复
我查了CSDN的最新帖子。有类似的问题。但是好象也是没说出到底是为什么。
UP 先。
gycxy 2004-04-02
  • 打赏
  • 举报
回复
CB的ADOQuery会将SQL脚本中的中如Num = :Param中的Param解析为参数名,这时你就可以给参数传值了,这是个很灵活的用法,恭喜你已经找到它的用法了
SharpKing515 2004-04-02
  • 打赏
  • 举报
回复
晕死。。。没看楼上的回复。。。。。
汗。。。。。
SharpKing515 2004-04-02
  • 打赏
  • 举报
回复
DM->ADOQ_in_store->Exectue();

试试看。。好久没用了。。。

你找找关于Exectue(),Open(),Active()三种方法的区别。。。
看看是不是这里面的原因。。
MackedNice 2004-04-02
  • 打赏
  • 举报
回复
我把代码改成这样。查询就正确了
DM->ADOQ_in_store->Close();
DM->ADOQ_in_store->SQL->Clear();
DM->ADOQ_in_store->SQL->Add("Select * From in_store Where Num =:Param");
DM->ADOQ_in_store->Parameters->ParamByName("Param")->Value
= Edit1->Text
DM->ADOQ_in_store->Open();
我只是不明白为什么这样就可以。这两者有什么区别么。
这是BUG还是另有玄虚。
不懂啊。
有没有懂的大虾啊。

lovebcb05 2004-04-02
  • 打赏
  • 举报
回复
我也曾遇到过这样的问题.
关注中......
wcccc1 2004-04-02
  • 打赏
  • 举报
回复
帮顶

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧