CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  其他数据库开发 >  Access

【挑战高手:忽略空格的查询,有没有人能做到,先摆 20 分,解决了一定给 200,说话算数】

楼主inelm(木野狐)2004-09-04 16:51:47 在 其他数据库开发 / Access 提问

我的某个表的某个字段有如下数据:  
   
  001   02   AB02   123  
  00   034   RS   F033  
  ....  
   
  是产品的型号,   其中在不确定的位置有空格,   现在客户的要求是要能够输入任意连着的数字或字母检索出来相关的产品,   比如:  
   
  输入   '2A'   要求能够检索出   第一条记录。   简单一点也就是忽略空格的查询。  
   
  我很想用   where   '%'   +   replace(xxx,   '   ',   '')   +   '%'   like   '%'   +   replace(yyy,   '   ',   '')   +   '%'  
  这样的语句来查询,   可是   Access   中似乎没有这个   replace   函数。  
   
  我是用   delphi   来操作这个数据库的,   如果谁能够告诉我如何解决这个问题,   再多的分也可以。   谢谢!  
  如果是告诉我   access   没法做到的就不用回复了。  
   
  注意,空格的位置和数目是不确定的,   所以如果想告诉我寻找某种规律也不用说了。 问题点数:100、回复次数:18Top

1 楼alexzhang00(三角猫)回复于 2004-09-04 17:54:59 得分 0

ACCESS   支持   REPALCE   啊,我这里是   ACCESS   2003,支持的  
   
  DELPHI的代码:  
   
  var   sql:   string;  
  begin  
          sql   =   'SELECT   *   FROM   [tablename]   WHERE   REPLACE(field_name,   "   ",   "")   LIKE   ''%'   +   trim(传入的条件)   +   '%''';  
          adodb_query.sql.text   =   sql;  
          adodb_query.open;  
          //.....  
  end;Top

2 楼inelm(木野狐)回复于 2004-09-04 17:57:01 得分 0

猫猫,   碰到你了,呵呵,谢谢!  
  不过这个没解决啊,   我是要把   mdb   文件刻到光盘上的,   客户的机器不一定有   2003   啊。Top

3 楼alexzhang00(三角猫)回复于 2004-09-04 17:58:30 得分 0

不好意思,漏了:   是  
  sql   :=   'SELECT   *   FROM   [tablename]   WHERE   REPLACE(field_name,   "   ",   "")   LIKE   ''%'   +   trim(传入的条件)   +   '%''';  
   
  Access   2000   ,我没试过,我想应该是支持的Top

4 楼alexzhang00(三角猫)回复于 2004-09-04 17:59:30 得分 0

没关系啊,   和平常的程序一样的,   只要用户机子装了   JET   4   驱动就OK了Top

5 楼inelm(木野狐)回复于 2004-09-04 18:00:14 得分 0

Access   2000   不支持,我没试成功。唉,只好再看看其他人有没有办法了..Top

6 楼inelm(木野狐)回复于 2004-09-04 18:00:50 得分 0

就是因为没法用   replace   函数才来这里问的。Top

7 楼JohnShen(因果网)回复于 2004-09-04 18:15:17 得分 0

这是基本函数啊,2000也应该支持的,是不是你的语句写的有问题?  
  where   '%'   +   replace(xxx,   '   ',   '')   +   '%'   like   '%'   +   replace(yyy,   '   ',   '')   +   '%'  
  改成  
  WHERE   REPLACE(field_name,   "   ",   "")   LIKE   ''%'   +   trim(传入的条件)   +   '%'''  
  再试一下Top

8 楼alexzhang00(三角猫)回复于 2004-09-04 18:33:45 得分 0

我试了一下,确实不支持,   而起ACCESS   也不支持正则  
   
  我有个方法,   不过效率就低了,如果应付客户做DEMO应该是可以用的,  
   
  sql   :=   'SELECT   *   FROM   [tablename]';  
  ado_query.sql.text   =   sql;  
  ado_query.open;  
  while   not   ado_query.eof   do  
  begin  
          if   pos(trim(传入的条件变量),   AnsiReplaceStr(ado_query.fieldbyname('field_name').value,   '   ',   ''))   >   0   then  
          begin  
              //   输出此条记录  
          end  
          ado_query.next  
  end;  
  ado_query.close;  
  end;Top

9 楼alexzhang00(三角猫)回复于 2004-09-04 18:35:01 得分 0

在   USES   里引用   strUtilsTop

10 楼alexzhang00(三角猫)回复于 2004-09-04 18:37:16 得分 0

ado_query.sql.text   :=   sql;  
   
  好长时间不用DELPHI,   语法有些生疏了Top

11 楼inelm(木野狐)回复于 2004-09-04 20:12:25 得分 0

三角猫,   这样循环遍历也是可以的,   可是我要做的是将得到的记录集绑定到   DBGridPlus,   一个类似于   DBGrid   的控件,   有办法吗?Top

12 楼alexzhang00(三角猫)回复于 2004-09-04 21:56:45 得分 80

简接实现:  
  var  
    id_list:   string;  
  begin  
  sql   :=   'SELECT   *   FROM   [tablename]';  
  ado_query.sql.text   :=   sql;  
  ado_query.open;  
  while   not   ado_query.eof   do  
  begin  
          if   pos(trim(传入的条件变量),   AnsiReplaceStr(ado_query.fieldbyname('field_name').value,   '   ',   ''))   >   0   then  
          begin  
              //   记录唯一字段  
              id_list   :=   id_list   +   ','   +   inttostr(ado_query.fieldbyname('id').value);  
          end  
          ado_query.next  
  end;  
  ado_query.close;  
  delete(id_list,   1,   1);  
  id_list   :=   '('   +   id_list   +   ')';  
  sql   =   'SELECT   *   FROM   [tablename]   WHERE   id   IN   '   +   id_list;  
  ado_query.sql.text   =   sql;  
  ado_query.open;  
   
  //   把   ADO_QUERY   绑定到   DBGRIDPLUS  
   
  end;  
  Top

13 楼inelm(木野狐)回复于 2004-09-05 12:02:38 得分 0

太感谢你了!   我试试再说,   不过担心这样会有个问题,   就是记录如果极多的话,   这样组合的   sql   可能会超出   ado   的限制,   不知道会不会。Top

14 楼alexzhang00(三角猫)回复于 2004-09-05 14:56:09 得分 0

不会的,   ADO   的   SQL   的字符串长度理论上是没有限制的,   在2G以内吧  
  如果一行超过   255   的话,   就换行,采用  
  adoquery.sql   :=   adoquery.sql   +   str1;  
  adoquery.sql   :=   adoquery.sql   +   str2;Top

15 楼changechange(http://access911.net 是我的个人网站,欢迎光临)回复于 2004-09-05 17:22:25 得分 20

不会的,   ADO   的   SQL   的字符串长度理论上是没有限制的,   在2G以内吧-------------谁告诉你的?微软的资料么?Top

16 楼alexzhang00(三角猫)回复于 2004-09-05 17:28:08 得分 0

不是,好像从   BORLAND   看到的,具体哪里忘记了Top

17 楼alexzhang00(三角猫)回复于 2004-09-05 18:01:11 得分 0

可能是我记错了,   我说的可能是   STRING   类型吧。  
   
  ADO的有多长我搞不清,   我最多只用过1000个左右的字符Top

18 楼inelm(木野狐)回复于 2004-09-05 18:27:01 得分 0

我先按照你这个方法做好了,   可是担心以后会有问题..  
   
  再等等,看有没有更好的办法。  
   
  changechange   兄也请多指教,谢谢!Top

相关问题

  • 数据流图的问题!分不够可以加到300,说话算数!
  • 说话算数!请白菜哥哥把我仅剩下的100也拿走吧!!
  • 远程 解决问题后 即可得到2Q币 说话算数
  • 怎么改变的按钮等控件的背景颜色??50分!!!我说话算数
  • 给一位准备学asp的初学者 一点点帮助!!!(给分 说话算数)
  • 600分的WinSock问题!!想做下个月专家榜的第一吗???说话算数肯定给!
  • 谁要是告诉我狙击手的故事的网址,这点分全给,说话算数!!!
  • 大家快来拿分,只要能骂,都有分,说话算数。要知详情,请进。。。。
  • 大家好!我遇到一个问题,大家来看看,好吗?一定结贴,说话算数的
  • 大家对在asp.net中用owc 组件发表一下看法吧!!!来者有分!!!说话算数.

关键词

  • ado
  • 查询
  • 函数
  • 解决
  • 客户
  • access
  • sql
  • query
  • 空格
  • 传入的条件

得分解答快速导航

  • 帖主:inelm
  • alexzhang00
  • changechange

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo