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

locate为什么不能实现模糊查询?

楼主kyong()2004-08-01 19:07:12 在 Delphi / VCL组件开发及应用 提问

例如数据集中有一个姓名字段,其值有  
  ....  
  管理员  
  管理  
  ....  
   
  事件代码如下:  
  procedure   TForm1.Button4Click(Sender:   TObject);  
  begin  
      if   not   ADOQuery2.Locate('姓名',edit1.Text,[lopartialKey])   then  
            showmessage('No   record   found');  
  end;  
  当在edit1里输入"管"或"管理"时,能定位到那条记录,当输入"理"或"员"时,却找不到记录,请问如何在数据集里实现模糊查询(注意:只要求在数据集中实现模糊查询,不要去表里实现模糊查询) 问题点数:0、回复次数:18Top

1 楼flayyao(姚俊)回复于 2004-08-01 19:10:35 得分 0

不是locate不支持,是因为delphi不支持中文,我被这个问题也弄的头疼死了,强烈建议borland公司修复此bug,而且我已经写信向borland公司反映过,但是没有回复Top

2 楼kyong()回复于 2004-08-01 19:16:19 得分 0

但是,为什么在edit1里输入"管"或"管理"时,能定位到那条记录呢?说明delphi能支持中文呀Top

3 楼yjbnew(伟大的光荣的正确的ASP千岁千岁千千岁)回复于 2004-08-01 19:34:45 得分 0

用filter   (过滤)   就可以Top

4 楼linzhengqun(风。我回来了)回复于 2004-08-01 19:50:50 得分 0

用SQL语句不是更好吗,速度也快一些:  
   
  ADOQuery2.sql.add('select   *   from   yourTable   where   姓名=''%'+Edit1.text+'%''');Top

5 楼kyong()回复于 2004-08-01 20:03:31 得分 0

你这样写是从表里搜索,我要求的是从已经返回到本地的记录集里搜索  
  另外,请问如何使用filter,结合我的例子,Top

6 楼leeon868(Delphi无神论者)回复于 2004-08-01 20:34:44 得分 0

如果是一个合格的开发人员,  
   
  首先,就不要把你的字段之类的关键字定义为中文。这个是个最起码的前提。即便用中文也要弄成常量。  
   
  其次,如果工具不提供这些,就不要怪工具。那只能怪你自己使用不当。同样一把斧子,别人可以砍柴,你为什么不能砍?那背面砍的?斧子的利刃不用,偏偏用背面。delphi的优势不去用,偏偏用劣势。Top

7 楼lionlsl(林)回复于 2004-08-01 20:35:22 得分 0

去掉Edit1.text两边的空:trim(Edit1.text);Top

8 楼SuQingQuan(边城浪子)回复于 2004-08-01 21:23:20 得分 0

leeon868(Delphi无神论者)   ,说得有道理啊。其实Delphi只是我们手头上的一种工具,你正握反握都不重要,最主要的是能砍到材(财)。Top

9 楼getit911(Windows转Linux中)回复于 2004-08-01 21:28:35 得分 0

locate和filter只能做类似:管*这样的查询,不支持完全的模糊查询。  
   
  中文列更便于维护,而且现在的数据库都支持非英文列。Top

10 楼kyong()回复于 2004-08-01 22:45:10 得分 0

leeon868(Delphi无神论者),你好,你的道理很对,但对这个问题,你说错了,你再看看代码  
  procedure   TForm1.Button4Click(Sender:   TObject);  
  begin  
      if   not   ADOQuery2.Locate('姓名',edit1.Text,[lopartialKey])   then  
            showmessage('No   record   found');  
  end;  
  问题不在字段名为汉字"姓名",而是在于在字段里各记录存的是汉字(难道你表里存的都是英文吗?),假设将字段名改为name,该字段里有:  
  管理  
  管理员  
  管理处  
  等等记录  
  procedure   TForm1.Button4Click(Sender:   TObject);  
  begin  
      if   not   ADOQuery2.Locate('name,edit1.Text,[lopartialKey])   then  
            showmessage('No   record   found');  
  end;  
  此时,如果在edit1里输入"管"或"管理",就能找到需要的记录,如果在edit1里输入"理"或"员"就找不到需要的记录.Top

11 楼linzhengqun(风。我回来了)回复于 2004-08-01 23:05:32 得分 0

还是坚持我的观点,用SQL语句,最强大的查询方式Top

12 楼anbangs(大邦)回复于 2004-08-02 01:59:38 得分 0

我想楼主不用SQL语句,可能是考虑到读取速度吧Top

13 楼hanly2008(郁闷人)回复于 2004-08-02 07:52:48 得分 0

if   not   ADOQuery2.Locate('姓名',edit1.Text,[lopartialKey])   then  
            showmessage('No   record   found');  
  将lopartialKey去掉,改成:  
  if   not   ADOQuery2.Locate('姓名',edit1.Text,[])   then  
            showmessage('No   record   found');Top

14 楼kyong()回复于 2004-08-02 12:15:57 得分 0

是呀,为了减轻服务器负担,同时为了速度.  
  那些数据已经返回到记录集,没必要再到去服务器去找了,是不是?  
  hanly2008(郁闷人),你的方法不行呀,它只能做到精确查找.Top

15 楼Delphi78()回复于 2004-08-02 12:36:25 得分 0

你的‘姓名’字段是否为关键字?loPartialKey选项在我的印象中针对的是关键字。  
  locate是用来定位的,不是模糊查找,你到底要实现的是定位还是模糊查找?  
  还有,用Filter可以实现你要的模糊查找--前提是你要的是模糊查找而不是定位Top

16 楼viaboy(平凡)回复于 2004-08-02 12:38:04 得分 0

用SQL语句吧,比较通用。Top

17 楼kyong()回复于 2004-08-02 23:42:31 得分 0

是呀,我要的是模糊查询,而不是定位,用locate无法实现,用filter如何实现呢?Top

18 楼Delphi78()回复于 2004-08-04 09:02:02 得分 0

Filter:='姓名>='+''''+trim(edit1.Text)+''''+chr(0)+'   and   姓名<='+trim(edit1.Text)+chr(255)+'''';  
  Top

相关问题

  • 怎样实现模糊查询??????
  • asp如何实现模糊查询?
  • 如何实现“模糊查询”?
  • 如何实现ado的模糊查询?
  • php中怎么实现模糊查询
  • 如何用Tadotable实现模糊查询?
  • 怎样实现模糊查询
  • 如何实现模糊查询? ..:PARAM1 LIKE %
  • 如何实现模糊组合查询????
  • vb如何实现模糊查询

关键词

  • 查询
  • 字段
  • 语句
  • 中文
  • delphi
  • 数据
  • 管理
  • edit1
  • lopartialkey
  • 姓名

得分解答快速导航

  • 帖主:kyong

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

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