请问形如“SELECT * FROM tblMain WHERE ID LIKE '%'”的语句为什么TADOTable不能正确执行,而企业管理器却可以正确执行?

uhian 2005-12-01 04:59:30
在CB中想实现在编辑框输入的同时实现过滤功能,故在编辑框的Change事件中写代码如下:
adotblMain->Filtered=false;
adotblMain->Filter="select * from tblMain where id like "+QuotedStr(edtID->Text+"%");
adotblMain->Filtered=true;
可是这样当编辑框一旦为空的时候就会出现异常,提示信息为:
“参数类型不正确,或不在可以接受的范围内,或与其他参数冲突”。
以为是编辑框为空的原因,所以直接将Filter设定成“SELECT * FROM tblMain WHERE ID LIKE '%'”结果还是出错,可是在企业管理器和查询分析器中却可以正确执行。
这是为什么?TADOTable对语句有要求?
...全文
205 7 打赏 收藏 举报
写回复
7 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
uhian 2005-12-02
ID是字符型,varchar(10)。ID内容就是姓名拼音缩写。
刚才做了测试,ADOTable就是不支持这种Filter语句:“ID LIKE '%'”。
ADOQuery这样就没问题,可能跟ADOTable的过滤方式有关?或者是个BUG?
  • 打赏
  • 举报
回复
guanshangming 2005-12-01
ID的类型是什么?是字符型吗?如果是字符型,应该是没有问题的。
  • 打赏
  • 举报
回复
uhian 2005-12-01
to:setdefault(山转水也转)
汗,是我复制错了。其实是没有“select * from tblMain where ”这一部分的,我这是将最终的SQL不自觉地翻译出来了。其实我写的是:
adotblMain->Filter="id like "+QuotedStr(edtID->Text+"%");

to:tompkins2000(AirHunter),UTzlpower(鸡骨草)
应该不是这些原因,因为当edtID->Text不为空的时候是可以正确执行的。
  • 打赏
  • 举报
回复
UTzlpower 2005-12-01
id是一个关键字,按下列方式试一试:
"select * from tblMain where [id] like "+QuotedStr(edtID->Text+"%")
或者程序中处理;
if (QuotedStr(edtID->Text=="")
adotblMain->Filter="select * from tblMain";
  • 打赏
  • 举报
回复
空中猎手 2005-12-01
adotblMain->Active=false;
adotblMain->SQL->Text ="select * from tblMain where id like "+QuotedStr(edtID->Text+"%");
adotblMain->Active=true;

这样才对么,你用错属性啦
  • 打赏
  • 举报
回复
setdefault 2005-12-01
在Filter中%通配符没有试过,想这么用可以使用ADOQuery来代替ADOTable,在ADOQuery->SQL中使用你的SQL语句
  • 打赏
  • 举报
回复
setdefault 2005-12-01
Filter中是一个判断,不放SQL语句
  • 打赏
  • 举报
回复
发帖
数据库及相关技术

1167

社区成员

C++ Builder 数据库及相关技术
社区管理员
  • 数据库及相关技术社区
加入社区
帖子事件
创建了帖子
2005-12-01 04:59
社区公告
暂无公告