这个游标是建立在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;