一直对adoquery的参数传递机制很疑惑。
比如说sql.text := 'select * from (select * from a left join b on XX=XX where a.XX=:参数1) a';
然后我用Parameters.parambyname('参数1').value := '';传递参数,
接着去open这个query。就会出现错误。跟踪了sqlserver的事件探查器,发现原因是adoquery给sqlserver传的语句中,:参数的类型是text,然后sqlserver就会提示text类型不是直接用"="比较。
再比如我用Parameters.parambyname('参数1').value := '参数';传递参数,
然后执行这个query,这个query传递给sqlserver的语句里面又会把:参数的类型变成varchar(1),这样又把参数给截断了,又得不到我想要的结果了。我给Parameters.parambyname('参数1').datatype赋值也没用,会提示错误。
希望哪位达人能帮忙解决一下

解决方案 »

  1.   


      ADOQuery1.Close;
      ADOQuery1.SQL.Clear;
      ADOQuery1.SQL.Text := 'select acco_name from (select * from bs_acco_info where acco_id=:e) a';
      ADOQuery1.Parameters.ParamByName('e').Value := '0111000005';
      ADOQuery1.Open;
    exec sp_executesql N'select acco_name from (select * from bs_acco_info where acco_id=@P1) a
    ',N'@P1 varchar(10)','0111000005'
    没出现你说的情况啊,是varchar(10)啊,都是自动匹配的啊
      

  2.   


    要是ADOQuery1.Parameters.ParamByName('e').Value := '';  这样呢   事件探察器里会出现什么样的语句是不是要出现 exec sp_executesql N'select acco_name from (select * from bs_acco_info where acco_id=@P1) a
    ','@P1 text',''   然后报错