当前位置: 代码迷 >> PB >> PB调用存储过程有关问题
  详细解决方案

PB调用存储过程有关问题

热度:23   发布时间:2016-04-29 06:53:40.0
PB调用存储过程问题
FOR ll_i = 1 TO dw_dengjinfo.RowCount()
 .
 .
 .
    DECLARE Lis_td PROCEDURE FOR @returnValue=sp_lisapp  
@applyno = :ls_checkbh, 
@pattype = '4',
@ifjz    = 0 ,  
@patno   = :ls_checkbh,
@patname = :ls_xm,
@patsex  = :ls_xb,  
@patbrith= :ldt_birthday,
@bedno   = '',
@docna   = '' ,
@depno   = '',
@dianose = '',
@testname= '',
@item    = :ls_item, 
@mode   = 0,
@applyid = :ls_retsqh OUTPUT using Tran_Inter;
     EXECUTE Lis_td;

    FETCH Lis_td Into :ll_ret,:ls_retsqh;
    IF Tran_Inter.SqlCode<>0 THEN
MessageBox(gs_messagetitle,Tran_Inter.SQLErrText + '~r~n' + ls_err)
    ELSE
    END IF
    CLOSE Lis_td ;
  .
  .
  .
NEXT

问题:我在循环体里面调用存储过程,当第循环一次执行存储过程时可以成功,但第二次以后就有错误提示了,错误信息为:cursor is not open,但第二次的存储过程执行后台已经成功

如何解决!!!

------解决方案--------------------
你的游标Lis_td 没销毁
------解决方案--------------------
哦,错了,我以为是SQL的游标,
改成这样试试
EXECUTE Lis_td;
IF Tran_Inter.SqlCode<>0 THEN
   MessageBox(gs_messagetitle,Tran_Inter.SQLErrText + '~r~n' + ls_err)
   //CLOSE Lis_td ;
   //conntine;
ELSE
    FETCH Lis_td Into :ll_ret,:ls_retsqh;
END IF
CLOSE Lis_td ;

------解决方案--------------------
动态SQL
------解决方案--------------------
CLOSE Lis_td ;
放在next後面。。。
  相关解决方案