描述有点长,请耐心看完!
存储过程为:
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;
同样所有参数涉及到汉字的就不行,数字和字母的就都能查出,为什么?
存储过程为:
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;
同样所有参数涉及到汉字的就不行,数字和字母的就都能查出,为什么?
解决方案 »
- 今天终于明白了,编程里的一句名言。
- 我用vc设计了一个dll,vc和vb能正常调用该库,delphi调用时老出错,请大家帮忙看看.
- 身无分文求此解答,祝大家在新的一年里心想事成、钱程似锦(转贴有20分)
- 新手,关于BDE administrator 的设置问题,在线冰天雪地裸跪急等!!
- delphi能不能LOAD默认(default)的设计环境--(发现ctr+z,x,c,v用不了)
- 一个关于idHTTP的简单问题
- 如何快速删除Paradox数据表中所有记录
- 怎么用ListView1控件时,显示大的图标?
- 如何实现?????(这个问题因该有一点难度吧)
- 急急急!数据库错误!
- 按Enter键跳格
- 程序间通信的问题,如何让程序打开指定文件?
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 这样行吗?
louchanghong(lch),你这样做就不符合我查询的条件了,而且我在查询分析器中做是可以的,说明我的存储过程是没有问题的,对吗?
那麼, 就從前端分析出什麼問題>>with CMSP_FJczl_provider do
是什麼???
一般, 調用存儲過程我是用 SQLStoredProc1 or ADOStoredProc1, 少些用XXXquery, 沒有存在什麼漢字問題啊
CMsp_Fjczl_Provider是客户端的clientdataset.
中间层用adostoreproc和datasetprovider
Email: [email protected]
還有, 檢查, 你是否設置了 DataSetProvider1 的options 的poAllowCommandText
可能是参数从客户端到后台执行时汉字变乱码了?
谢谢你,用事件查看器只能看到我客户端参数取得的最终值,那是对的。
我的DataSetProvider1 的options 设了poAllowCommandText呀?
Result := Length(PWideString(@TVarData(Value),VOleStr)^);
将PWideString改为PAnsiStringhttp://community.csdn.net/Expert/topic/3087/3087456.xml?temp=.8497278
1, 中间层用adoquery和datasetprovider
2, DataSetProvider1 的options 的poAllowCommandText 设置为 True
3, 客户端执行下列语句:
with CMSP_FJczl_provider do
begin
Close;
CommandText := 'Msp_Jczl_FProvider ''%'',''中国大发'',''%'',''%'',''%''';
Open;
end;
那是不是中间层不能用adostorcproc和datasetprovider连呢?为什么?我以前用delphi5做三层是可能的啊,而且那样传参数也方便!
params[0].value :=
的,
一般就用 sql.text := Format(...)所以, 如果 wangjianxue 的方法可用, 是不是params設置出問題??
fim(镇江DJ) is right