如何在单表中实现多字段的模糊查询? 急(50分)

  • 主题发起人 主题发起人 housiba
  • 开始时间 开始时间
H

housiba

Unregistered / Unconfirmed
GUEST, unregistred user!
我想用 AQuery 实现 8 个字段的模糊查询, SQL 如下:
with at1 do
begin
Close;
SQL.Clear;
SQL.Add('SELECT * FROM PI WHERE');
SQL.Add('Country LIKE ''%' + cb1.Text + '%'' AND');
SQL.Add('Customer LIKE ''%' + cb2.Text + '%'' AND');
SQL.Add('Main_material_name LIKE ''%' + cb3.Text + '%'' AND');
SQL.Add('Main_material_PN LIKE ''%' + cb4.Text + '%'' AND');
SQL.Add('Secondary_material_name LIKE ''%' + cb5.Text + '%'' AND');
SQL.Add('Secondary_material_PN LIKE ''%' + cb6.Text + '%'' AND');
SQL.Add('Product_name LIKE ''%' + cb7.Text + '%'' AND');
SQL.Add('Market_name LIKE ''%' + cb8.Text + '%''');
Open;
end;

后发现无法实现模糊,只有完全匹配才能找到,求高手帮忙,急!!
 
你用那么多and条件去select当然是这样的结果,
取的是交集啊,全改成or... ...
 
全改成 OR 之后找到了好多呀, 而且并不是最接近的 :'(
 
呵呵,那你要什么样的结果呢?
and取交集你觉得范围太小,or取并集你觉得范围太大了。
这我也搞不懂了,你要取到什么范围里?
 
我觉得你这样做模糊查找的话,取and交集更加合理一些。
不是每个条件都一定有值的。。。也许时候某几个有,
这样取到记录更接近实际需要的那条记录。
 
取 OR 后整个表的数据都被查到了,我希望能找到最接近的一个.
 
那你原先的写法没错,找到的肯定是最接近的那些!
 
有没有别的写法呀? 现在我只要在任一字段删除或添加一个字母,就什么也找不到了,不能实现模糊查询.
 
if tedit.text<>'' then sql.add('..');
试试?
 
查询结果是一样的
 
这还用模糊啊。 你每个edit对应每个字段了都。。 那必须是and关系了。
 
那这样吧,为每个条件设个重点度,查不到结果时对所有重点度进行自减操作,直到查询记录数超过0,或所有重点度小于0且查询结果为空。
 
var
s:array of integer;
isfirst:boolean;
begin
s[1]:=1;
s[2]:=2;
s[3]:=4;
s[4]:=3;
...
repeat
begin
...
isfirst:=true;
if s[1]>0 and isfirst then sql.add('...')
else sql.add(' and '+...);
if s[2]>0 and isfirst then ....
...
open;
if recordcount=0 then
begin
s[1]:=s[1]-1;
....
end;
until recordcount>0 or (s[1]<-1 and s[2]<-1 and...)
end;
 
可以吗?可以的话赏点分,谢谢^^
 
多人接受答案了。
 
后退
顶部