一个简单的SQL模糊查询问题(50分)

  • 主题发起人 主题发起人 lfpsoft
  • 开始时间 开始时间
L

lfpsoft

Unregistered / Unconfirmed
GUEST, unregistred user!
一个人事数据表,有姓名,部门、性别等字段。
用ADO连接,ACCESS数据库
表中有姓名为这样的记录:
张小兵、小李、小英、刘德华
要实现的功能是:
输入个“小”字查到的记录为:张小兵、小李、小英
输入“刘”字查到的记录为:刘德华

------------------------------------------------------------------------------
//用以下代码查找“小”字得到的记录是:小李、小英,而张小兵就查不到
var
SQL: String;
begin
SQL:='Select 员工姓名,部门名称 from 员工资料 Where 员工姓名 >= :D1 AND 员工姓名 <= :D2';
Q_UserInfo.SQL.Clear;
Q_UserInfo.SQL.Add(SQL);
Q_UserInfo.Parameters.ParamValues['D1'] := UserName.Text +chr(0);
Q_UserInfo.Parameters.ParamValues['D2'] := UserName.Text+chr(255) ;
Q_UserInfo.Open ;
--------------------------------------------------------------------------
//用以下代码查找“小”字就什么记录也找不到
var
SQL: String;
begin
SQL:='Select 员工姓名,部门名称 from 员工资料 Where 员工姓名 Like :D1';
Q_UserInfo.SQL.Clear;
Q_UserInfo.SQL.Add(SQL);
Q_UserInfo.Parameters.ParamValues['D1'] := UserName.Text ;
Q_UserInfo.Open ;
---------------------------------------------------------------------------
不知我应该用怎样的方法才能实现我想要的功能呢?


 
Select 员工姓名,部门名称 from 员工资料 Where 员工姓名 Like %:D1%
 
ft1:=Edit2.Text;
with query1 do
begin
close;
sql.clear;
sql.add('select * from gc');
sql.add('where gc_mc LIKE :ft1 ');
Params[0].AsString:=Trim(Concat('%',Trim(ft1),'%'));
Open;

 
var
SQL: String;
begin
SQL:='Select 员工姓名,部门名称 from 员工资料 Where 员工姓名 >= :D1 AND 员工姓名 <= :D2';
Q_UserInfo.SQL.Clear;
Q_UserInfo.SQL.Add(SQL);
Q_UserInfo.Parameters.ParamValues['D1'] := '%'+UserName.Text +'%';
Q_UserInfo.Parameters.ParamValues['D2'] := '%'+UserName.Text+'%';
Q_UserInfo.Open ;
 
把这句改成Q_UserInfo.Parameters.ParamValues['D1'] := UserName.Text ;
Q_UserInfo.Parameters.ParamValues['D1'] := '%'+UserName.Text +'%';
其它不动,不行吗?
不过access的通配符不一定是%...,好象吧?我不记得你查一下以前我回答的问题。
 
查到了,Access的多字符通配符是'*',不是'%',所以只要把你的那句改成
Q_UserInfo.Parameters.ParamValues['D1'] := '*'+UserName.Text +'*';
就万事大吉了
 
参数前后都加通配符就可以了
 
楼上的就行了!
 
例:姓名变量为v_xm
with query do
begin
close;
sql.text:=' select * from 人事数据表 where 姓名 like ''%'+v_xm+'%''';
open
end;
 
var
SQL: String;
begin
SQL:='Select 员工姓名,部门名称 from 员工资料 Where 员工姓名 Like :D1';
Q_UserInfo.SQL.Clear;
Q_UserInfo.SQL.Add(SQL);
Q_UserInfo.Parameters.ParamValues['D1'] := '%'+trim(UserName.Text)+'%' ;
Q_UserInfo.Open ;
 
好了,应该结束了。
谢谢大家。

我还有一个经典的问题,有兴趣的请看:
http://delphibbs.com/delphibbs/dispq.asp?lid=1126581
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
928
SUNSTONE的Delphi笔记
S
后退
顶部