当前位置: 代码迷 >> PB >> !游标语句部分无法成功执行
  详细解决方案

!游标语句部分无法成功执行

热度:87   发布时间:2016-04-29 05:35:42.0
求助!游标语句部分无法成功执行!
本帖最后由 u014674466 于 2014-04-14 18:03:40 编辑
这个游标是建立在open事件上的,本想在游标中设立一个条件语句,但“select status into :kl from member where status='1'and member=:zth1;”以及 “if trim(kl)=''  then”总是无法成功执行,如果成功执行,最后的结果是只要满足这个条件,ddlb_2 下拉框不添加当前游标。以下是源代码:

boolean r_flag1=true
string zth1,kl
declare C2 cursor for  SELECT Name  FROM Master..SysDatabases ORDER BY Name  ; 
  open C2;
  do while r_flag1=true   
  fetch C2 into :zth1;
  zth1=Trim(zth1)
  if sqlca.sqlcode=100 then
  r_flag1=false   
  end if
  if sqlca.sqlcode =-1 then
  messagebox("提示","非审计项目数据仓库!",exclamation!)
  return
  end if
  if sqlca.sqlcode=0 then
select status into :kl from member where status='1'and member=:zth1;///////////////无法成功执行!
 if trim(kl)=''  then///////////////无法成功执行!
 ddlb_2.additem(zth1)
     end if
  end if   
 loop  
close C2;
------解决方案--------------------
你在脚本中跟踪一下sql语句执行的返回错误,看看是下面的错误吗?
 '.......不能手动或分布事务中创建新的事务错误'
如果是,可以用下面的问题解决。
在PB脚本中用游标访问SQLSERVER数据库,声明游标用using sqlca; 但进入do while sqlca.sqlcode = 0 后,里面的sql语句要用另外一个事务对象。以下的例句,看看能否帮到你。

除sqlca 外再声明一个事务对象
Transaction    ltras

ltras = create transaction

ltras.DBMS = ‘OLE DB‘
ltras.Logpass = ******
ltras.login = *******
ltras.autocommit = false
.......

declare c2  cursor for ... Using sqlca;
open c2;
fetch c2 into ...
do while sqlca.sqlcode = 0
       select .... using ltras;

loop

close c2;

Disconnect using ltras;

  相关解决方案