三层结构中的参数传递问题???(100分)

  • 主题发起人 slimbamboo
  • 开始时间
S

slimbamboo

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TForm3.Button1Click(Sender: TObject);
begin
ClientDataSet1.FetchParams;
ClientDataSet1.Params.ParamByName('pname').AsString:=trim(edit1.Text);
ClientDataSet1.Close;
ClientDataSet1.Open;
end;
在服务器端是
ADOconnection ADOquery Datasetprovider
ADOquery 的 sql 是select * tbl_Dep where depname=:pname
当客户端的edit 中输入数字或字母 能正确得到返回数据
当客户端的edit 中输入汉字 就一个劲儿的报错说什么字符串右截位
哪怕我输入一个汉字,它也报错。这是什么原因??
 
用value代替asString一下试试看
 
我发现一个问题
我现在连的是SQLserver2000,有问题
但换成Access 就不出错了
 
跟着看看
 
ClientDataSet1.Params.ParamByName('pname').AsString:='"'+trim(edit1.Text)+'"';
 
可能是delphi的BUG,我也有这种情况。
解决的方法:
 用+号来连接实际的字符串, 如'select * from ' + Edit.text
可能的原因,在三层中只有widestring类型,没有string类型可能是在转化的过程中出错。
你试试
ClientDataSet1.Params.ParamByName('pname').AsString:=trim(WideString(edit1.Text));
我没有试过。
 
问题依然存在!!!!
 
不用参数,传递SQL语句。
 
我试过传sql语句没问题。但中文参数的问题能解决吗?
 
To Slimbamboo:
adoQuery中的参数如果是中文,确实有问题,我已经遇到很多次了。
最简单的方法是做如下修改:
ClientDataSet1.Params.ParamByName('pname').AsString:='%'+trim(edit1.Text)+'%%%%%';
另外:你的adoQuery也要把条件改为:
where depname like :pname
不知这样能否解决你的问题。
Dolly.

 
delphi的ADO下三层问题很多。能找到一个可以用的就不错了。。。
你就不要强求了。
 
看来只能这样了,多谢大家关注
 
多人接受答案了。
 
顶部