s:='select * from data where'+
s:=s+'  (InStr(1,LCase(简介),LCase(:'+pk.Strings[i]+'),0)<>0) or  (InStr(1,LCase(标题),LCase(:'+pk.Strings[i]+'),0)<>0) ) ';
为什么只有前面一个InStr(1,LCase(起作用,后面一个InStr(1,LCase(不起作用?我测试下,前面一个 (InStr(1,LCase(简介),LCase(:'+pk.Strings[i]+'),0)<>0)可以模糊搜索到内容,
          后面一个(InStr(1,LCase(标题),LCase(:'+pk.Strings[i]+'),0)<>0) )不起作用。
把2者调一下,总是前1个起作用,后1个的不起作用,这是为什么?

解决方案 »

  1.   

    (InStr(1,LCase(标题),LCase(:'+pk.Strings[i]+'),0)<>0) )
    后面那个条件多了个括号,不知道你的具体情况。
      

  2.   

    楼上把你的改成这样的语句试试查询结果:
    s:='select * from data where'+
    s:=s+' not ((InStr(1,LCase(简介),LCase(:'+pk.Strings[i]+'),0)=0) and (InStr(1,LCase(标题),LCase(:'+pk.Strings[i]+'),0)=0) )  
      

  3.   

    and 就没内容了。貌似模糊查询只能执行1个条件?
      

  4.   

    大哥,应该是or的缘故吧。
    A or B//A为真,B就不执行啊不管A在前,还是B在前,都是一样的啊。没仔细看你代码,不知道是不是这问题。
      

  5.   

    ShowMessage(s);
    放到查询分析器执行,逐个条件去掉看看有啥不同,要学会怎么调试
      

  6.   

    s:='select * from data where'+
    s:=s+' not ((InStr(1,LCase(简介),LCase(:'+pk.Strings[i]+'),0)=0) and (InStr(1,LCase(标题),LCase(:'+pk.Strings[i]+'),0)=0) )