一个三层中TClientDataSet执行中间层(服务端)的存储过程问题?共同探讨!在线等待……(100分)

  • 主题发起人 主题发起人 xiaokun
  • 开始时间 开始时间
X

xiaokun

Unregistered / Unconfirmed
GUEST, unregistred user!
服务端(中间层)放一个TADOStoredProc,用于执行客户端提交的存储过程,TADOStoredProc是跟oracle连接并指定了一个存储过程,这个存储过程是有4个输入参数4个返回参数,然后TdatasetProvider与TADOStoredProc连接,客户端有一个TClientDataset通过一个dcom连接到服务的端的服务上了,并获得了TADOStoredProc的参数,我进行测试时在TClientDataset的输入参数分别输入了4个值,然后把active激活,但出现提示说“不正常的定义参数对象。提供不正确或不完整的信息”
 
我在执行另外一个TClientDataset调用有输入参数以及只有返回游标的存储过程时正确。但调用有输入参数与输入参数的存储过程时就出现以上提出的错误信息了!提大家帮忙!~
 
你的参数类型不对吧?
你可以在客户端用设参数值来测试
 
参数不正确 吧 , 好好检查检查/
 
to :aizhuzhu ,我的参数值是正确的! 因为我把存储过程改了没有输出参数的 就可以执行,说明参数类型是正确的,我觉得可能是TClientDataSet不支持即有输入参数又有输出参数的,它可以支持有输入参数有输出游标的,但就是不能输出参数!
 
不可能的。我们开发过的系统用的就是这个。不存在你所说的问题。
你在它的TParams里去给他一个值去看看。
 
to:aizhuzhu,
我看过了,就是不行!我还请教了同事还是不行,TClientDataSet在调用中间层的存储过程时不支持即有输入参数又有输出参数的,不过我现在暂用变换的方法解决了这个问题,就是把所有输出的参数当成一个字段从dual表中输出返回游标,这样也可以访问返回的参数了 !输入时就用:myclient.Params.ParamValues['bb']:=cc;
输出时用:myclientdataset.Fields.FieldByName('aa').asstring;
 
明天我做个Demon给大家看看!要不谁有个实例也可以拿出来大家参考一下!包括存储过程代码!(随便写一个语句,有输入也有输出参数的)。谢谢大家的参与!
 
老大 怎么在TClientDataset里输入参数 谢谢了
 
TClientDataset 中的输入参数就是存储过程的输入参数呀,点击右健就可获得,输出参数可以由数据库返回的游标中的字段作为输出参数!
 
ClientDataset.Close;
ClientDataset.CommandText:='';
ClientDataset.CommandText:=('exec login :p1,:p2,:p3');
ClientDataset.Params.ParamByName('p1').Value:=trim(edit1.Text);
ClientDataset.Params.ParamByName('p2').Value:=trim(edit2.Text);
ClientDataset.Params.ParamByName('p3').Value:=trim(combobox1.Text);
//clogin.Params.ParamByName('p4').Value:=0;
ClientDataset.Open;
我都是这样输入参数的。。。不过输出参数取不出来
ClientDataset.Close;
ClientDataset.CommandText:='';
ClientDataset.CommandText:=('exec login :p1,:p2,:p3,:p4');
ClientDataset.Params.ParamByName('p1').Value:=trim(edit1.Text);
ClientDataset.Params.ParamByName('p2').Value:=trim(edit2.Text);
ClientDataset.Params.ParamByName('p3').Value:=trim(combobox1.Text);
clogin.Params.ParamByName('p4').Value:=0;
ClientDataset.excute;
输入出参数的值不会修改的。。。。取不出来。。。
 
TParam有input和output之分
 
后退
顶部