请问:有关Filter的问题

huang_jihua 2003-02-24 01:48:14
我的数据库是ACCESS,表中有日期字段dtbirthday,和整数型字段iage
我在我的ADOQUERY中的Filter上写上"dtbirthday like '*2003-02-24*" 和"dtbirthday like '%2003-02-24%"均出错,提示Filter不能被打开,
同样,整型字段也有这样的问题,字符型字段就没用,请大家帮帮忙!
...全文
23 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
huang_jihua 2003-02-28
  • 打赏
  • 举报
回复
谢谢 yyfzy(singler) 的参与,还是没找到合适的解决方法,我最后是用在SQL 里面用语句实现的,分都给你了吧
yyfzy 2003-02-25
  • 打赏
  • 举报
回复
试试:
try
{
StrToDate(Edit1->Text+"-1-1 00:00:00"); //输入合法性检查
}
catch(...)
{
ShowMessage("请输入正确的年份!");
return;
}
//
ADOQuery1->Filter="dtbirthday>='"+Edit1->Text+"-1-1'And dtbirthday<='"+Edit1->Text+"-12-31'";
ADOQuery1->Filtered=true;
huang_jihua 2003-02-25
  • 打赏
  • 举报
回复
TO yyfzy(singler) :假设用户要查询20**年的数据,怎么查?
yyfzy 2003-02-25
  • 打赏
  • 举报
回复
那样你可以首先对用户的输入进行合法性检查,如果有误提示用户输入正确的年份或月份。
huang_jihua 2003-02-25
  • 打赏
  • 举报
回复
to yyfzy(singler): 你说的方法在SQL语句中是可行的,但是FILTER上面就不行。
~当然还有别的方法实现,例如:
~1。查询dtbirthday为2003年的所有记录:
~ "dtbirthday>='2003-1-1' And dtbirthday<=2003-12-31";
~2。查询dtbirthday为2003年1月的所有记录:
~ "dtbirthday>='2003-1-1' And dtbirthday<2003-2-1";

~等等,看借助别的方法能不能实现你的要求!我只有用TTable和TIBTable做过类型的操作。
用这个方法的话,如果用户输入“200”,“2003-”之类的怎么办?
yyfzy 2003-02-25
  • 打赏
  • 举报
回复
当然还有别的方法实现,例如:
1。查询dtbirthday为2003年的所有记录:
"dtbirthday>='2003-1-1' And dtbirthday<=2003-12-31";
2。查询dtbirthday为2003年1月的所有记录:
"dtbirthday>='2003-1-1' And dtbirthday<2003-2-1";

等等,看借助别的方法能不能实现你的要求!我只有用TTable和TIBTable做过类型的操作。
yyfzy 2003-02-25
  • 打赏
  • 举报
回复
楼主是想实现模糊查找吗?按道理
"dtbirthday = '2003*'"; //类型不匹配
"dtbirthday like '2003%'";//Filter can not be opened
可以实现模糊查找的。
huang_jihua 2003-02-25
  • 打赏
  • 举报
回复
"dtbirthday = '*2003-02-24*'"; //类型不匹配
"dtbirthday like '%2003-02-24%'";  //Filter can not be opened
"dtbirthday = '2003-02-24'";    //OK,但是只是过滤等于的内容
"dtbirthday like '2003-02-24'" ;  //OK ,但是只是过滤等于的内容
"dtbirthday = '2003*'"; //类型不匹配
"dtbirthday like '2003%'";//Filter can not be opened
yyfzy 2003-02-25
  • 打赏
  • 举报
回复
你分别试试下面的几种:
"dtbirthday = '*2003-02-24*'";
"dtbirthday like '%2003-02-24%'";
"dtbirthday = '2003-02-24'";
"dtbirthday like '2003-02-24'" ;
"dtbirthday = '2003*'";
"dtbirthday like '2003%'";

以上都是用代码设置时的情况,如果是直接设置属性,要去掉双引号!

huang_jihua 2003-02-25
  • 打赏
  • 举报
回复
up
huang_jihua 2003-02-24
  • 打赏
  • 举报
回复
我软件中有一部分可以让用选择字段和关系,填入内容,就可以过滤表中的数据,就是实现这个功能的时候出现了这个问题,碰到日期和数字就不行,大家帮忙看看。
huang_jihua 2003-02-24
  • 打赏
  • 举报
回复
提示:Filter can not be opened
yyfzy 2003-02-24
  • 打赏
  • 举报
回复
那么你把错误提示贴出来看看吧
huang_jihua 2003-02-24
  • 打赏
  • 举报
回复
你设置Filtered=true;了没有? //就是设置Filtered=true的时候才会提示错误


日期类型用between ... and ...
比较好
你用的like方式不对

//哪里不对?
纪俊 2003-02-24
  • 打赏
  • 举报
回复
日期类型用between ... and ...
比较好
你用的like方式不对
yyfzy 2003-02-24
  • 打赏
  • 举报
回复
你设置Filtered=true;了没有?
yyfzy 2003-02-24
  • 打赏
  • 举报
回复
对TADOQuery、TQuery、TIBQuery等我一直没有使用过Filter.
huang_jihua 2003-02-24
  • 打赏
  • 举报
回复
字符型字段可以用like
同时日期类型的用 like '2003-02-20' 可以实现跟 ='2003-02-20'一样的功能但是不是模糊查询
halibut 2003-02-24
  • 打赏
  • 举报
回复
Filter中不能用 like 吧?
huang_jihua 2003-02-24
  • 打赏
  • 举报
回复
可是我现在有个地方用到了FILTER,而且比使用语句更方便,所以还是想解决这个问题
加载更多回复(2)

1,178

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 数据库及相关技术
社区管理员
  • 数据库及相关技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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