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个的不起作用,这是为什么?
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个的不起作用,这是为什么?
后面那个条件多了个括号,不知道你的具体情况。
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) )
A or B//A为真,B就不执行啊不管A在前,还是B在前,都是一样的啊。没仔细看你代码,不知道是不是这问题。
放到查询分析器执行,逐个条件去掉看看有啥不同,要学会怎么调试
s:=s+' not ((InStr(1,LCase(简介),LCase(:'+pk.Strings[i]+'),0)=0) and (InStr(1,LCase(标题),LCase(:'+pk.Strings[i]+'),0)=0) )