在三层中输入中文参数,查询不出结果,请问怎么解决?

解决方案 »

  1.   

    ClientDataSet1.close;
    ClientDataSet1.CommandText:='select * from where ......';
    ClientDataSet1.Open;
      

  2.   

    ClientDataSet1.close;
    ClientDataSet1.CommandText:='select * from where  PARAM1=:PARAM......';
    ClientDataSet1.ParamByName('PARAM').AsString := '...';  //这里的参数无所谓中英文,只要保证正确
    ClientDataSet1.Open;
      

  3.   

    参数是在服务端设置的
    如GoodsID=:GoodsID
    在客户端
    ClientDataSet1.close;
    ClientDataSet1.Paramts.Parambyname('GoodsID').value := '商品'
    ClientDataSet1.Open;
    这样查询不出,如果换成英文则可以!
    有办法解决吗?
      

  4.   

    不知你是用什么连接的数据库。
    如果数据库是SqlSelver,请使用:Ole DB Provider for Sql Server 来连接数据库。
    否则可能会发生你遇到的问题!
      

  5.   

    是SqlServer,
    本来就是用Ole DB Provider for Sql Server 连接数据库的!
      

  6.   

    帮忙
    同时又发现一个问题
    过滤时有中文也不行
    如: filter := 'name like '%'笔'%'';
    查不出结果!而数据库中是确实存在这样的数据!
      

  7.   

    经过跟踪发现,
    如果不是全包含就没问题
    如: filter := 'name like ''笔'%'';
    这是怎么回事??
      

  8.   

    用服务器端是不是用ado了
    如果是的话,请不要用clientdataset的locate,filter了,不能用
    可能是数据库和ado驱动的关系
    我也遇到这个问题,没有能解决
    我用cxGrid了,它可以filter,
    当我的服务器端用dbExpress可以使用locate filter 
    我们数据库是orcale的,
      

  9.   

    1 在三层中输入中文参数,查询不出结果,请问怎么解决?
     试用一下CLientDataset.DataRequest 方法传参数2、有没有人用过asta?
      asta 是什么??3、如果不是全包含就没问题
    如: filter := 'name like ''笔'%'';
    这是怎么回事??  这种可以用ClientDatset.commandtext 传 入SQL语句试试
      

  10.   

    function EncodeUnicodeSQL(Value:WideString):String;
    //encode the widestring to string of unicode ascii set
    //be used for search unicode char in SQL server
    //2003.03.21
    var
      I:Integer;
    begin
      Result:='';
      for I:=1 to Length(Value) do begin
        if I>1 then begin
          Result:=Result+'+';
        end;
        Result:=Result+'NCHAR('+IntToStr(Word(Value[I]))+')';
      end;
    end;useage:
      try
        if Length(MusicName)>0 then begin
          sql:=' (music_name LIKE ''%'' + ' + EncodeUnicodeSQL(MusicName) + ' + ''%'')';
        end;
        if Length(AlbumName)>0 then begin
          if Length(sql)>0 then begin
            sql:=sql + ' AND ';
          end;
          sql:=sql + ' music_id IN (SELECT music_id FROM music_album WHERE album_id IN '
              + ' (SELECT album_id FROM album_m WHERE album_name LIKE ''%'' + ' + EncodeUnicodeSQL(AlbumName) + ' + ''%''))';
        end;
        if Length(ArtistName)>0 then begin
    ....
      

  11.   

    另,以上用到的NCHAR()函数,仅适用于SqlServer。。
      

  12.   

    先试一下ylyxd622(yxd) 和 tonylk(=www.tonixsoft.com=)
    的方法