三层中调用存储过程反回结果集的问题.(50分)

  • 主题发起人 主题发起人 pendy3721
  • 开始时间 开始时间
P

pendy3721

Unregistered / Unconfirmed
GUEST, unregistred user!
我在客户层这样调用,第一次执行成功,接着第二次就出错了,弹出找不到参数'@PageSize'
:MasterDataSet:Parameter '@PageSize'not found.
with MasterDataSetdo
begin
FETCHPARAMS;
Close;
Params.ParamByName('@PageSize').Value := iPageSize;
Active := True;
end;
请问如何解决啊
 
MasterDataSet 就是 TclientDataSet
 
我已使用了FETCHPARAMS;
为何还找不到参数呢!
分不够 可加?
 
参数名用错了吧???????
应该不要"@"这个符号..
 
第二次调用的时候是不是没清理参数
Parameters.Clear
 
谢谢weichao9999的指点,我现在改成下面的试过,有所改善,但是第一次执行成功,第二次执行就失败,第三次成功,第四次又失败,如此类推....
with MasterDataSetdo
begin
Params.Clear;
FETCHPARAMS;
Close;
Params.ParamByName('@PageSize').Value := iPageSize;
Active := True;
end;
 
我现在只能这样应付着
procedure TForm1.OpenPro;////**
begin
with MasterDataSetdo
begin
try
Params.Clear;
FETCHPARAMS;
close;
Params.ParamByName('@PageSize').Value := iPageSize;
Active := True;
except
OpenPro;
////**
end;
end;
end;
 
这么麻烦干什么,直接把数据发成XML文件后面再用clientdataset取就行了,中间用variant存储就行了,这样的话数据量大了还可以先加密压缩后传输,到客户那里再解压解密
 
我不会XML啊
 
没必要那么做的.
先在组件发属性里设置好存储过程名,那么限制条件会自动添加,就不会出现找不到参数'@PageSize'
MasterDataSet.prepare:=True;
 
谢谢 恭喜发才 的提示. 我试试.
现在又出现一个新问题了:其实我还有一个条件参数的,它要传中文.
当只传一个中文时就正常,超过一个中文时出错..当传偶数个中文字,错误提示为字串中最后一个单引号没了.当传奇数个中文字时,错误提示为字串最后一个单引号没了,而且最后一个中文字变成?号了.
是不是MIDAS.dll的问题.怎样解决啊?? 谢谢!
procedure TForm1.OpenPro;////**
begin
with MasterDataSetdo
begin
try
Params.Clear;
FETCHPARAMS;
close;
Params.ParamByName('@PageSize').Value := iPageSize;
Params.ParamByName('@strWher').Value :='心形';
//传给存储过程中的Where语句
Active := True;
except
OpenPro;
////**
end;
end;
end;
 
不要用ClientDataSet直接传中文参数
在服务端定义一接收参数的过程和一设置参数的过程
再在客户端调用接收参数的过程传递你的中文参数
再在服务端调用设置参数的过程对DataSetProvider参数设置
客户端:ClientDataSet.Open;
祝你好运
 
多人接受答案了。
 
这实际是参数未清除造成的,每次调用前必须清一下
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
666
import
I
S
回复
0
查看
928
SUNSTONE的Delphi笔记
S
后退
顶部