描述有点长,请耐心看完!
存储过程为:
CREATE procedure Msp_Jczl_FProvider
  @gysbh varchar(20)='',--供应商编号
  @gysjc varchar(50)='',--供应商简称
  @type varchar(20)='',--类型
  @status varchar(10)='',--状态
  @jyfs varchar(20)=''--经营方式
asbegin
  
  select * from jczl_provider 
  where isnull(gysbh,'') like @gysbh and
        isnull(gysjc,'') like @gysjc and
        isnull(type,'') like @type and
        isnull(status,'') like @status and
        isnull(jyfs,'') like @jyfs  
end 
return
在Sql查询分析器中执行exec Msp_Jczl_FProvider '%','中国大发','%','%','%'
                     exec msp_jczl_FProvider '%','Maniform','%','%','%'都没问题,而在客户端取值时当取到供应商简称(gysjc)为中文时(如中国大发)就查不出来,我客户端的语句是:
procedure TFrm_Pub_Find.BitBtn1Click(Sender: TObject);
var
  gysbh,gysjc,type1,status,jyfs:string;
begin
    if (trim(edt_gysbh.text)<>'') and checkbox1.Checked then
       gysbh := trim(edt_gysbh.text)
    else
       gysbh :='%';
    if (trim(edt_gysjc.text)<>'') and checkbox2.Checked then
       gysjc := trim(edt_gysjc.text)
    else
       gysjc :='%';
    if (trim(edt_type.text)<>'') and lbl_type.Checked then
       type1 := trim(edt_type.text)
    else
       type1 :='%';
    if (trim(edt_status.text)<>'') and lbl_status.Checked then
       status := trim(edt_status.text)
    else
       status :='%';
    if (trim(edt_jyfs.text)<>'') and lbl_jyfs.Checked then
       jyfs := trim(edt_jyfs.text)
    else
       jyfs :='%';
    with CMSP_FJczl_provider do
    begin
      disablecontrols;
      close;
      params[0].value :=gysbh;
      params[1].value :=gysjc;
      params[2].value :=type1;
      params[3].value :=status;
      params[4].value :=jyfs;
      open;
      enablecontrols;
    end;
end;
同样所有参数涉及到汉字的就不行,数字和字母的就都能查出,为什么?

解决方案 »

  1.   

    select * from jczl_provider 
      where isnull(gysbh,'') like @gysbh or
            isnull(gysjc,'') like @gysjc or
            isnull(type,'') like @type or
            isnull(status,'') like @status or
            isnull(jyfs,'') like @jyfs  这样行吗?
      

  2.   

    Bes96261(秋水孤鶩),中间层应该没问题,至于你说条件变量放到一个表中是什么意思?
    louchanghong(lch),你这样做就不符合我查询的条件了,而且我在查询分析器中做是可以的,说明我的存储过程是没有问题的,对吗?
      

  3.   

    isnull(gysjc,'%')  试一下.
      

  4.   

    >>在Sql查询分析器中执行正确
    那麼, 就從前端分析出什麼問題>>with CMSP_FJczl_provider do
    是什麼???
    一般, 調用存儲過程我是用 SQLStoredProc1 or ADOStoredProc1, 少些用XXXquery, 沒有存在什麼漢字問題啊
      

  5.   


    CMsp_Fjczl_Provider是客户端的clientdataset.
    中间层用adostoreproc和datasetprovider
      

  6.   

    能将你的数据发给我一下吗?我帮你看看...
    Email: [email protected]
      

  7.   

    用 事件查看器跟踪, 最終的解決方法
    還有, 檢查, 你是否設置了 DataSetProvider1 的options 的poAllowCommandText
      

  8.   

    以前用delphi5.0没这样的问题,是不是delphi6.0要打什么补丁?
    可能是参数从客户端到后台执行时汉字变乱码了?
      

  9.   

    aiirii(ari-爱的眼睛)
    谢谢你,用事件查看器只能看到我客户端参数取得的最终值,那是对的。
    我的DataSetProvider1 的options 设了poAllowCommandText呀?
      

  10.   

    解决方法如下,修改Delphi源代码重新编译一下就可以了。adodb.pas 1227行
    Result := Length(PWideString(@TVarData(Value),VOleStr)^);
    将PWideString改为PAnsiStringhttp://community.csdn.net/Expert/topic/3087/3087456.xml?temp=.8497278
      

  11.   

    请使用下面的方法(我一直都是这么用的):
    1, 中间层用adoquery和datasetprovider
    2, DataSetProvider1 的options 的poAllowCommandText 设置为 True
    3, 客户端执行下列语句:
      with CMSP_FJczl_provider do
      begin
        Close;
        CommandText := 'Msp_Jczl_FProvider ''%'',''中国大发'',''%'',''%'',''%''';
        Open;
      end;
      

  12.   

    fim(镇江DJ)(DJ=DelphiJava) 的方法也可以
      

  13.   

    fim(镇江DJ)(DJ=DelphiJava) 改了也不行!还是传不了汉字???
      

  14.   

    好消息,wangjianxue() 的方法可以,就是说中间层用adoquery和datasetprovider连
    那是不是中间层不能用adostorcproc和datasetprovider连呢?为什么?我以前用delphi5做三层是可能的啊,而且那样传参数也方便!
      

  15.   

    我比較少用
    params[0].value := 
    的, 
    一般就用 sql.text := Format(...)所以, 如果 wangjianxue 的方法可用, 是不是params設置出問題??
      

  16.   

    没有用D5做过三层,D6,D7下都存在这样的问题,以前三层传中文参数的问题也困扰了我好久,我后来都是这么解决的,为什么楼主不能成功呢?wangjianxue()的方法和爱的眼睛相同,但是这样的话,有点不像三层的感觉了:)
      

  17.   

    我同意fim(镇江DJ)(DJ=DelphiJava)的看法,那样做是有点象两层里的调用!
      

  18.   

    我是想让你回答留言,我还是想用adostorcproc和datasetprovider连!
      

  19.   

    我以前在delphi6中,用params[0].value = 中文,也碰到过这个问题,一直没找到原因。
    fim(镇江DJ) is right
      

  20.   

    问题解决,把参数在中间层和客户端都改为ftfixchar,问题解决!