模糊查询问题,急(30分)

  • 主题发起人 主题发起人 basin
  • 开始时间 开始时间
B

basin

Unregistered / Unconfirmed
GUEST, unregistred user!
我用一面的模糊查询却常常漏记录或者查询不到, 不知是什么原因,请告知.
是不是DELPHI自身的问题,还是数据库的问题(我用的是ACCEESS)?

procedure TFindCustomerForm.Button1Click(Sender: TObject);
var sqla,sqlb,sqlc,sqld,sql : string ;
begin
sqla := edit1.Text; // 客户编号
sqlb := edit2.Text; // 客户名称
sqlc := edit3.Text; // 客户电话
sqld := edit4.Text; // 客户地址

//模糊查询语句
sql := 'SELECT 自动编号 , 客户编号 , 客户名称 , 客户电话 , 客户地址 , 所属地区 , 注册日期 , 备注 ';
sql := sql + 'FROM 客户资料 ';
sql := sql + ' WHERE 客户编号 LIKE '+ QuotedStr('%' + trim(sqla) +'%')+ ' AND 客户名称 LIKE ' + QuotedStr('%' + trim(sqlb) +'%')+ ' AND 客户电话 LIKE ' + QuotedStr('%' + trim(sqlc) +'%')+ ' AND 客户地址 LIKE ' + QuotedStr('%' + trim(sqld) +'%');

//执行查询
CustomerForm.ADOQueryCustomerData.Close;
CustomerForm.ADOQueryCustomerData.SQL.Clear;
CustomerForm.ADOQueryCustomerData.SQL.Add(sql);

try
CustomerForm.ADOQueryCustomerData.Open;
except
Raise Exception.create('No records Matched your choices');
end;

end;
 
我记得应该是 str like"%% xxx %%"
要有俩个% ,再试试
 
應該是數據庫的問題,用SQL SERVER不會出現。
 
可以采用如下的方式:
str:=str+' where (filename like "'+'%'+edit1.text+'%'+'") and ('+
'content like "'+'%'+edit2.text+'%'+'")';
在ANSI sql中采用like实现部分匹配要采用如下的语法:
like '%X%'
//x为任意的字符,%为全部匹配,#为单字符
在调试的过程中,可采用showmessage来显示sql语句的正确性。
 
请将结果告之
 
你要查询的字段有没有 NULL 值存在?
 
同意樓上
 
楼上的说得对,我今天测试时发现,我想查询的几项在数据库中必须存在值,否则就查询不到..
有一项空的也查不到.就是这样了.语句没错.分糖啦,呵呵....
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部