查询问题?(100分)

  • 主题发起人 主题发起人 anthonytang
  • 开始时间 开始时间
A

anthonytang

Unregistered / Unconfirmed
GUEST, unregistred user!
怎样在DELPHI6+SQL2000中实现与搜索引擎一样的功能。如:查询既要包含'刘德华'又要包含
'MP3'的的内容,只要在搜索引擎中输入'刘德华 MP3'即可!里面空格?在DELPHI6里面怎样
实现呢?
 
模糊查询,在sql中写呀。
 
where x like '%刘德华%‘ or x like '%MP3%'
 
当然要自己处理了
var
S,SSQL:String;
i:integer;
strList:TStrings;
begin
strList:=TStringList.Create;
S:='刘德华 MP3';
ExtractStrings([' '],[],PChar(S),strList);
SSQL:='select * from tab';
if strList.Count>0 then
begin
SSQL:=SSQL+' where 字段 LIKE ''%'+strList[0]+'%''';
for i:=1 to strList.Count-1 do
SSQL:=SSQL+' OR 字段 LIKE ''%'+strList+'%''';
end;
strList.Free;
//处理SSQL
end;
随手写的,没有测试,自己改改
 
那两个关键词是在同一字段内的?请求各位高手回答
 
些个函数,把用户输入的关键字按指定的分隔符分开不就好了么,
 
老大,不要老想着一行代码都不写
 
where XXX like '%'+replace('刘德华 MP3',' ','%')+'%'
 
有谁还能再回答,我要加分了。再加50分!
 
回答什么啊,
我帮你写了个函数:
//Str:用户输入的,是将Str按Sep分隔开后的存到RStrs中;Sep默认是空格
procedure SeparateStr(Str:string;var RStrs:TStringList;const Sep:string=' ');
var
i,l:Integer;
begin
Str := Trim(Str);
l:=Length(Str);
i:= Pos(Sep,Str);
while i>0 do
begin
RStrs.Add(Copy(Str,1,i-1));
Str := Trim(Copy(Str,i+1,l-1));
i:= Pos(Sep,Str);
l:= Length(Str);
end;
RStrs.Add(Str);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
RStrs :TStringList;
i:Integer;
begin
RStrs := TStringList.Create;
SeparateStr(Edit1.Text,rstrs);
for i:=0 to RStrs.Count -1 do
begin
//按每个RStrs给query添加查询条件;
end;
end;
 
接受答案了.
 
后退
顶部