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;

解决方案 »

  1.   


    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;我这个要如何配合用上你那代码呢? 菜得不行,呵呵
      

  2.   

    你还是没看明白我的例子和我前一帖给你说的,不能用or连接,因为只要有一个条件有数据,后面你加多少or也一样有数据,所以你根本找不到无数据的条件
    用单一条件,或者用and
      

  3.   

    把or条件都去掉,每次循环,只保留一个条件,我的代码中不是已经写了吗  for i := 0 to list.Count - 1 do
      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;
      

  4.   

    list.DelimitedText := str;
    这里我改成这样,还是不行?
    list.DelimitedText := sedit1.Text;
      

  5.   


    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,就留一个条件
      

  6.   


    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;
      

  7.   

    我还很没看懂这个多数据是怎么实现逐条查询的
    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;
      

  8.   

    arr[k-1]是什么,有值吗,你没执行一条sql,你跟踪看看sql语句的内容,以及数据库中是否有满足条件的记录
      

  9.   

    哦哦,搞错了
    但是如果我这个里面不用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;
      

  10.   

    这个我就是这样也不行,黑蝙蝠中队数据库是有的, findlist.Add(list.Strings[i]); 里也提示没有找到
    AddNoDataCondition('好人好梦,好男人,黑蝙蝠中队');
      

  11.   


    那就是sql语句的问题,你跟踪后,把sql语句取出,放到access中执行看看有没有
      

  12.   

    发现问题了
    把那个if ADOQuery1.IsEmpty then
    改成
    if  ADOQuery1.RecordCount=0  then就OK了
      

  13.   


    有点奇怪!,记得用完释放那两个StringList
      

  14.   

    问题现在我如何把我那些arr[0] arr[X]那些数据代过来?
      

  15.   


    自己组成字符串,或者把我的代码改一下,把参数改为Stringlist或者动态数组
      

  16.   


    明白了,感谢bdmh,在你和这里很多朋友的帮助下,学到了很多书本上学不到的东西,没有你们,还真的走到绝路了不得不放弃了