应该是程序传递参数的问题. 与SQL的处理没关系.

解决方案 »

  1.   

    为防止全文索引因包含很多对检索没有帮助的词而变得臃肿,a、and、is 或 the 这类额外的词都忽略不计你传递string估计只包括这些干扰词
      

  2.   

    我传递的都是病名,比如“小儿麻痹症”之类的,而且我已经把干扰词文件noise.chs清空了。
      

  3.   

    如果你懒得看下面的一大段的文字,请直接告诉我delphi使用ado对sql server进行全文查询时参数到底是怎么传递的?
    我发现了一个非常神奇这怪现象,还是用如下方式
    adoquery1.close;
    adoquery1.sql.clear;
    adoquery1.sql.add('select id,nr from table1 where contains(nr, :a)');
    adoquery1.parameters.parabyname('a').value:=''''+trim(edit1.text)+'''';
    adoquery1.open;
    然后用
    edit1.text:=adoquery1.parameters.paravalue['a'];在edit1(就是那个原来填写参数的编辑框)里面显示最后发送的参数,我执行一次查询,edit1框里面就多了一对单引号,点n次,就多n对单引号,是吧?结果很惊人(这里假设我每次输入的查询条件都必然至少有一条结果):
    当我输入两个字比如“儿童”,就需要执行两次查询才出结果,也就是说实际参数是 ''儿童'',当我输入“布宜诺斯艾利斯”时就要执行7次才会有查询结果,也就是说实际参数是'''''''布宜诺斯艾利斯''''''',好像单引号的个数必须和输入的双字节字符的个数一样才能执行一样,不过也不是每一次都这样,比如我输入一个“布宜诺斯艾利斯是”的时候,只要执行6次就出结果了,也就是说实际参数又变成了''''''布宜诺斯艾利斯是''''''了。真是见鬼了,那个高手能解释一下,或者直接告诉我delphi使用ado对sql server进行全文查询时参数到底是怎么传递的?
      

  4.   

    那是你把引号也当参数传过去了,你把引号传过去干什么?改成下面的试试:
    adoquery1.parameters.parabyname('a').value:=trim(edit1.text);
      

  5.   

    to:pbsql(风云) 不对吧,是不是应该这样写adoquery1.parameters.parabyname('a').value:='+trim(edit1.text)+';
      

  6.   

    可能是你的参数传递的过程有点问题了啊~不知道下面的如何:with adoquery1 do
    begin
     close;
     sql.clear;
     sql.text := 'select is,nr from table1 where nr like :a ';
     parameters.parambyname('a').value :='%'+trim(edit1.text)+ '%'; 
     open;
    end; 或是 with adoquery1 do
    begin
     close;
     sql.clear;
     sql.text := 'select is,nr from table1 where nr like :a ';
     parameters[0].values:= quotedstr( edit1.text + '%');
     open;
    end; 
      

  7.   

    SQL Server的联机丛书中写明使用contains时,条件参数至少要带引号,有时候也要带双引号,但我不知道什么时候需要,所以传递参数时要带上引号传递,在sql.add('asfas')里面不能用引号或者''''的方式,那样adoquery不能识别':'的参数标记。再次强烈发问:请直接告诉我delphi使用ado对sql server进行全文查询时参数到底是怎么传递的?谢谢了!