模糊查询(20分)

  • 主题发起人 主题发起人 yyjqtww
  • 开始时间 开始时间
Y

yyjqtww

Unregistered / Unconfirmed
GUEST, unregistred user!
谁会模糊查询啊,请告诉我!!我用了好多方法都不行!下面是我的语句:
1。str:='SELECT * FROM ychubanshangtab WHERE chubanshang_name LIKE %'+''''+edit1.text+''''+'%';
2。str:='SELECT * FROM ychubanshangtab WHERE chubanshang_name LIKE ‘%'+''''+edit1.text+''''+'%'';
第一句:编译时没有错,可是运行时就会出现错误。
第二句:编译都通不过,说什么无效%之类。
还试了双引号,可是只要加上双引号就不行了,请问哪位老师能帮帮我啊,很急的,谢谢!
 
str:='SELECT * FROM ychubanshangtab WHERE chubanshang_name LIKE :s'
parambyname('s').asstring:='%'+edit1.text+'%';
 
哦 楼上的 还快啊
 
我的程序中的语句:
SQL.text:='select * from '+libtablename+' where '+enfieldname+' like '+qfieldname+'';
 
str:='SELECT * FROM ychubanshangtab WHERE chubanshang_name LIKE ''%' + edit1.text + '%'''
即可
 
楼上讨论的都是SQL语句, 显然正统, 不过我觉得不管黑猫黄猫, 只要逮老鼠就行,
用一下数据集组件的Filter属性吧, 它的过滤字串与SQL语句有异曲同工之妙。
优越性是: 语法比SQL简单, 随意, 且更容易实现模糊查询
还有一个好处:即使条件不满足,它也不报错,顶多令数据集IsEmpty而已
大家知道,SQL语句没有一个统一的规范,随后端数据库管理系统的不同而不同,而
这个Filter属性的过滤字符串就不管这一套,通吃。并且它也支持通配符,语法和SQL也很象。
另外可用的还有一个Locate属性, 原理基本同上,不过这个属性, 只要在它后一参数中
指定一下, 就可以在精确查询和模糊查询之间任意选择。
最妙的是, 利用它的返回值(True/False)可以判断是否过滤到了东西, 并且即使没有过滤到东西,它
也不会大惊小怪地报SQL错误
具体用法,详见Delphi帮助, 很浅显的。
 
szdy is right
 
你的'%'位置错了,应该是:
str:='SELECT * FROM ychubanshangtab WHERE chubanshang_name LIKE '+''''+ '%'+ edit1.text + '%'+ '''';
当然,用楼上ugvanxk的方法更容易。
 
'SELECT * FROM ychubanshangtab WHERE chubanshang_name LIKE %'+''''+edit1.text+''''+'%'
移到前面<--^^^^ ^^^^-->移到%后面不然你的被
DELPHI解释成'…… LIKE % 'string'%' 而我们要'…… LIKE '%LIKE%'
 
你写错啦,%应该包括在单引号里面的
1。str:='SELECT * FROM ychubanshangtab WHERE chubanshang_name LIKE '''%'+edit1.text+'%''';
 
'select * from tablename where name like '+'%'+Trim(edit1.text)+'%';
保证OK
 
我使用了 szdy的方法,成功,谢谢!
也谢谢各位帮我的朋友!
 
后退
顶部