可能是你的参数传递的过程有点问题了啊~不知道下面的如何: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;
我发现了一个非常神奇这怪现象,还是用如下方式
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进行全文查询时参数到底是怎么传递的?
adoquery1.parameters.parabyname('a').value:=trim(edit1.text);
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;