比如我在中间层放了一个ADOQuery1,一个DataSetProvider1,客户端放一个ClientDataSet1。然后ADOQuery1.sql:='select * from Employee where name=:man_name ' 然后在ADOQuery1.(TParameters)中有个参数:man_name。
在客户端连接这个DataSetProvider1后得到ClientDataSet1.(TParams),该参数值不能输入中文。跟踪发现在服务器端得到的参数值被截取了。如:ClientDataSet1.Params.ParamByName('man_name').value:='小明',在服务器得到  ADOQuery1.Parameters.ParamByName('man_name').value:='小';
感觉好像是把一个中文认为一个字符,而截取了一个字。用Sql Server 事件跟踪发现得到的参数长度为varchar(2)。如用三个中文就得到varchar(3)。
所以请问不知这是什么原因。怎样解决???多谢!!!

解决方案 »

  1.   

    并不是你说的客户端不能用中文查询了。这是 SQL Server 的问题,我也遇到过,它把字符串 '小明' 长度当作 2 ,而在delphi 里面,它是4个字符长度的。
      

  2.   

    肯定是,我在ADOQuery1中查询都可以,而且我一直跟踪状态,就在加上三层后就不行了
      

  3.   

    这个问题我发觉不是Sql Server的问题,是Delphi的问题还是有其他设置希望那位老大能给我一点提示!关系我的生计,谢谢!!
      

  4.   

    bde设置太麻烦了.我是先学bde后学ado现在都放弃了bde了.
      

  5.   

    SQL Server 2000就有这毛病:
    例如SubString函数,取长度时中文字的长度也认为是1。应该和UNICODE字符编码标准有关。
      

  6.   

    我开发三层应用如果用ADO就有这个问题,难道要我回到BDE吗?我不喜欢BDE,唉!!!!!!!!!!救命啊Borland.
      

  7.   

    刚才试了一下,发现用ACCESS数据库就一切正常,怪,怎么SQL 2000就不行呢?另外如果是二层应用也没有这个问题呀,应该不是SQL 2000的问题,多半是DELPHI的ADO接口没有做好,各位知道怎样向borland反映这个问题呢?盼早日解决。
      

  8.   

    如果实在不行,你可以在服务器端写一个方法
    然后在客户端调用就行了。参数类型用*variant
      

  9.   

    我只有用动态Sql语句的方法解决这个问题。然后把条件和查询作为一条Sql语句执行。