procedure AddNoDataCondition(str: string); //参数str为查询条件字符串,逗号分开
var
list,findlist:TStringList;
i:Integer;
begin
list := TStringList.Create;
findlist := TStringList.Create;
list.Delimiter := ',';
list.DelimitedText := str;
if list.Count = 0 then Exit;
for i := 0 to list.Count - 1 do
begin
ADOQuery1.Close;
ADOQuery1.SQL.Text := 'select * from 数据库 where 名称 like '+QuotedStr('%'+list.Strings[i]+'%');
ADOQuery1.Open;
if ADOQuery1.IsEmpty then
findlist.Add(list.Strings[i]);//添加无数据的条件
end;
end;
var
list,findlist:TStringList;
i:Integer;
begin
list := TStringList.Create;
findlist := TStringList.Create;
list.Delimiter := ',';
list.DelimitedText := str;
if list.Count = 0 then Exit;
for i := 0 to list.Count - 1 do
begin
ADOQuery1.Close;
ADOQuery1.SQL.Text := 'select * from 数据库 where 名称 like '+QuotedStr('%'+list.Strings[i]+'%');
ADOQuery1.Open;
if ADOQuery1.IsEmpty then
findlist.Add(list.Strings[i]);//添加无数据的条件
end;
end;
procedure TForm1.duoge;
var
i, j,k:integer;
strs :TStrings;
arr:array [0..30] of string;
arr2:array [0..30] of string;beginstrs := TStringList.Create;
strs.Delimiter := ',';
strs.CommaText := sedit1.Text;
for i := 0 to Strs.Count-1 do
begin
arr[i]:= Strs[i];
end;arr2[0]:='a0'; arr2[5]:='a5'; arr2[10]:='a10'; arr2[15]:='a15';arr2[20]:='a20';
arr2[1]:='a1'; arr2[6]:='a6';arr2[11]:='a11'; arr2[16]:='a16';arr2[21]:='a21';
arr2[2]:='a2'; arr2[7]:='a7';arr2[12]:='a12'; arr2[17]:='a17';arr2[22]:='a22';
arr2[3]:='a3'; arr2[8]:='a8';arr2[13]:='a13'; arr2[18]:='a18';arr2[23]:='a23';
arr2[4]:='a4'; arr2[9]:='a9';arr2[14]:='a14'; arr2[19]:='a19';arr2[24]:='a24';
begin
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.text:= 'select * from 数据库 where 名称 like ''%'+arr[0]+'%'' or 名称 like ''%'+arr[1]+'%'' ';
if Strs.Count >2 then
begin
for k:=3 to Strs.Count do
ADOQuery1.SQL.Add(' or 名称 like ''%'+arr[k-1]+'%''');
end;
ADOQuery1.Open;
tianjia();
end;
end;我这个要如何配合用上你那代码呢? 菜得不行,呵呵
用单一条件,或者用and
begin
ADOQuery1.Close;
ADOQuery1.SQL.Text := 'select * from 数据库 where 名称 like '+QuotedStr('%'+list.Strings[i]+'%');//这里之一个查询条件,不要用or组合
ADOQuery1.Open;
if ADOQuery1.IsEmpty then
findlist.Add(list.Strings[i]);//添加无数据的条件
end;
这里我改成这样,还是不行?
list.DelimitedText := sedit1.Text;
procedure AddNoDataCondition(str: string); //参数str为查询条件字符串,逗号分开
var
list,findlist:TStringList;
i:Integer;
begin
list := TStringList.Create;
findlist := TStringList.Create;
list.Delimiter := ',';
list.DelimitedText := str;
if list.Count = 0 then Exit;
for i := 0 to list.Count - 1 do
begin
ADOQuery1.Close;
ADOQuery1.SQL.Text := 'select * from 数据库 where 名称 like '+QuotedStr('%'+list.Strings[i]+'%');
ADOQuery1.Open;
if ADOQuery1.IsEmpty then
findlist.Add(list.Strings[i]);//添加无数据的条件
end;
end;就用上面这个函数,调用如下
AddNoDataCondition('a,b,c,d,e,f,g');//字符串你可以自己修改,AddNoDataCondition过程就用我给你的试,你可以修改其中的sql语句,注意不能用or,就留一个条件
procedure TForm1.duoge;
var
i, j,k:integer;
strs :TStrings;
arr:array [0..30] of string;
arr2:array [0..30] of string;beginstrs := TStringList.Create;
strs.Delimiter := ',';
strs.CommaText := sedit1.Text;
for i := 0 to Strs.Count-1 do
begin
arr[i]:= Strs[i];
end;arr2[0]:='a0'; arr2[5]:='a5'; arr2[10]:='a10'; arr2[15]:='a15';arr2[20]:='a20';
arr2[1]:='a1'; arr2[6]:='a6';arr2[11]:='a11'; arr2[16]:='a16';arr2[21]:='a21';
arr2[2]:='a2'; arr2[7]:='a7';arr2[12]:='a12'; arr2[17]:='a17';arr2[22]:='a22';
arr2[3]:='a3'; arr2[8]:='a8';arr2[13]:='a13'; arr2[18]:='a18';arr2[23]:='a23';
arr2[4]:='a4'; arr2[9]:='a9';arr2[14]:='a14'; arr2[19]:='a19';arr2[24]:='a24';
begin
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.text:= 'select * from 数据库 where 名称 like ''%'+arr[0]+'%'' ';
if Strs.Count >2 then
begin
for k:=3 to Strs.Count do
ADOQuery1.SQL.Add(' or 名称 like ''%'+arr[k-1]+'%''');
end;
ADOQuery1.Open;
tianjia();
AddNoDataCondition(arr[k-1]);
end;
end;procedure TForm1.AddNoDataCondition(str: string); //参数str为查询条件字符串,逗号分开
var
list,findlist:TStringList;
i:Integer;
begin
list := TStringList.Create;
findlist := TStringList.Create;
list.Delimiter := ',';
list.DelimitedText := str;
if list.Count = 0 then Exit;
for i := 0 to list.Count - 1 do
begin
ADOQuery1.Close;
ADOQuery1.SQL.Text := 'select * from 数据库 where 名称 like '+QuotedStr('%'+list.Strings[i]+'%');
ADOQuery1.Open;
if ADOQuery1.IsEmpty then
findlist.Add(list.Strings[i]);//添加无数据的条件
application.MessageBox(pchar(list.Strings[i]),'找不到文件 ',mb_ok);
end;
end;
begin
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.text:= 'select * from 数据库 where 名称 like ''%'+arr[0]+'%'' ';
if Strs.Count >2 then
begin
for k:=3 to Strs.Count do
ADOQuery1.SQL.Add(' or 名称 like ''%'+arr[k-1]+'%''');
end;
ADOQuery1.Open;
但是如果我这个里面不用or 的话,只能查询出第一条数据啊?就是逗号前面的第一条
begin
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.text:= 'select * from 数据库 where 名称 like ''%'+arr[0]+'%'' or 名称 like ''%'+arr[1]+'%'' ';
if Strs.Count >2 then
begin
for k:=3 to Strs.Count do
ADOQuery1.SQL.Add(' or 名称 like ''%'+arr[k-1]+'%''');
end;
ADOQuery1.Open;
tianjia();
AddNoDataCondition(arr[k-1]);
end;
end;
AddNoDataCondition('好人好梦,好男人,黑蝙蝠中队');
那就是sql语句的问题,你跟踪后,把sql语句取出,放到access中执行看看有没有
把那个if ADOQuery1.IsEmpty then
改成
if ADOQuery1.RecordCount=0 then就OK了
有点奇怪!,记得用完释放那两个StringList
自己组成字符串,或者把我的代码改一下,把参数改为Stringlist或者动态数组
明白了,感谢bdmh,在你和这里很多朋友的帮助下,学到了很多书本上学不到的东西,没有你们,还真的走到绝路了不得不放弃了