TClientDataSet带返回值的存储过程运行问题???急急急急!!!!!! ( 积分: 50 )

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

sweidong

Unregistered / Unconfirmed
GUEST, unregistred user!
我在服务器的远程数据模块添加一个TADOStoredProc控件,为他加上DataSetProvider1;
然后我在客户端做好DCOMConnection,添加ClientDataSet1和服务端的DataSetProvider1
关联
存储过程:create proc p1 @lx int,@maxbh int output
as select @maxbh=maxbh from b1
where lx=@lx
go
客户端:
dm1.clientdataset1.params.clear;
dm1.clientdataset1.commenttext:='p1';
dm1.clientdataset1.createparams(ftinteger,'@lx',ptinput);
dm1.clientdataset1.createparams(ftinteger,'@maxbh',ptoutput);
dm1.clientdataset1.params.paramsbyname('@lx').asinteger:=1;
dm1.clientdataset1.open;
edit1.text:=dm1.clientdataset1.params.paramsbyname('@maxbh').asstring;
但运行出错:说“不正常的定义了参数对象,提供了不一致或者不完整信息”,
如何解决?急急急急!!!!!
 
我在服务器的远程数据模块添加一个TADOStoredProc控件,为他加上DataSetProvider1;
然后我在客户端做好DCOMConnection,添加ClientDataSet1和服务端的DataSetProvider1
关联
存储过程:create proc p1 @lx int,@maxbh int output
as select @maxbh=maxbh from b1
where lx=@lx
go
客户端:
dm1.clientdataset1.params.clear;
dm1.clientdataset1.commenttext:='p1';
dm1.clientdataset1.createparams(ftinteger,'@lx',ptinput);
dm1.clientdataset1.createparams(ftinteger,'@maxbh',ptoutput);
dm1.clientdataset1.params.paramsbyname('@lx').asinteger:=1;
dm1.clientdataset1.open;
edit1.text:=dm1.clientdataset1.params.paramsbyname('@maxbh').asstring;
但运行出错:说“不正常的定义了参数对象,提供了不一致或者不完整信息”,
如何解决?急急急急!!!!!
 
直接把参数带在‘p1 Param1,Param2 ’这样不就可以了吗,
不要用这种方式
dm1.clientdataset1.createparams(ftinteger,'@lx',ptinput);
dm1.clientdataset1.createparams(ftinteger,'@maxbh',ptoutput);
看着麻烦而且容易出错
 
要在存储过程里定义好参数,
按位置的先后顺序就 OK 了
 
还是不行,用此方法在adoquery上运行或adostoredproc上运行都正常,但到clientdataset上就不行,请各位大侠赐教!
 
哥们,给一些提示吧!嫌分少?另加!
 
dm1.clientdataset1.Close
dm1.clientdataset1.commenttext:='Declare @maxbh int'#13#10
+ 'exec p1 1 ,@maxbh output'#13#10
+' Select @Maxbh as Maxbh';
dm1.Open;
edit1.text:=dm1.clientdataset1.FieldByName('Maxbh').AsString;
 
为何edit1.text:=dm1.clientdataset1.params.paramsbyname('@maxbh').asstring;不行???
 
to WirePull,
我问题主要目的是取得存储过程的返回值,还有好办法吗?在这里只是举个例,你的回答只是对我的例子有效。
 
如果取2个以上返回值就很麻烦,各位朋友,再替我想想办法吧
 
在你的服务端都已经设置好的相应的参数,在客户端就没有必要在从新创建参数
dm1.clientdataset1.params.clear;
dm1.clientdataset1.FetchParams//只需加上这句即可.
dm1.clientdataset1.params.paramsbyname('@lx').asinteger:=1;
dm1.clientdataset1.open;
edit1.text:=dm1.clientdataset1.params.paramsbyname('@maxbh').asstring;
 
后退
顶部