我有这么一个问题,请大家分析分析。
数据表名:testtable   其中有个字段  ttname是字符串类型
在Adoquery中执行查询:query.close;
query.sql.clear;
query.sql.add('select * from (select * from testtable where ttname=:tn) as tmptable');
query.parameters.parambyname('tn').value:='中国';
query.open;这条查询没有实际意义,只是用于测试子查询。
如果:query.parameters.parambyname('tn').value:='chian';对于西文可以正常执行。
如果:query.parameters.parambyname('tn').value:='中国';对于中文就不能得到查询结果,好像tn没有起作用,把它当空字符串处理了。请大家分析分析原因?

解决方案 »

  1.   

    query.parameters.parambyname('tn').value:=WideString('中国');
      

  2.   

    不行,WideString我试过,我以为是unicode的问题,但不是,如果没有子查询,一切正常。
    下面就可以正常执行:
    query.close; 
    query.sql.clear; 
    query.sql.add('select * from testtable where ttname=:tn'); 
    query.parameters.parambyname('tn').value:='中国'; 
    query.open;
      

  3.   

    把这句sql放在查询分析器里呢?
      

  4.   

    你的delphi是哪个版本的,可能是升级包的问题。
      

  5.   

    你的delphi是哪个版本的,可能是升级包的问题。
      

  6.   

     不要用參數傳遞,直接寫SQL傳進去。這是BDE下的一個BUG來的。
      

  7.   

    delphi6 和delph7下都不行,当然,如果直接写入SQL语句里是没有问题的。
    楼上的说“升级包的问题”,请指教,能不能说详细一点?
      

  8.   

    不行, 试下直接用写入SQL中query.sql.add('select * from (select * from testtable where ttname=''中国'') as tmptable'); 
      

  9.   

    楼上的:
    query.sql.add('select * from (select * from testtable where ttname=''中国'') as tmptable'); 
    肯定没问题,能执行,关键这样有安全问题,会出现SQL注入的攻击.
      

  10.   

    1.什么数据库,数据库为什么字符集;
    2.使用的IDE各打了什么补丁。
      

  11.   

    1.sqlserver 2000 (简体中文版)
    2.IDE没有补丁
      

  12.   

    大家好:刚才的问题在访问access数据库可以正常,访问ms sqlserver 2000不正常,是不是 ado的问题?