急呀!我用的是PB8.03发现以下的程序,定义的游标在DO...LOOP一直的循环,为什么?

mmjhcg 2003-08-22 12:47:07
declare select_information cursor for
select id from kh_information where personel_id=:personel_information.id
and gc_type_id=:type_id;
open select_information;
fetch select_information into :khid;
do while sqlca.sqlcode<>100
insert into temp_erea
(username,userpassword,
name,nameid,
typename,typeid,kh_id)
values (:personel_information.login_name,:personel_information.login_password,
:personel_information.name,:personel_information.id,
:type_name,:type_id,:khid );
commit;
fetch select_information into :khid;
loop
close select_information;
...全文
26 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
firmbank 2003-08-22
  • 打赏
  • 举报
回复
commit后游标将会关闭,之后fetch将使sqlca.sqlcode < 0
我的习惯做法:
定义游标;
打开游标;
Do While TRUE
fetch .....
if sqlca.sqlcode <> 0 then exit
.
.
.
Loop
关闭游标;

mmjhcg 2003-08-22
  • 打赏
  • 举报
回复
不行呀handi,是不是在游标中间不能用INSERT语句,我不屏蔽了INSERT后跟踪,就可以了,为什么会这样呢,PB8.03的BUG呀
handi 2003-08-22
  • 打赏
  • 举报
回复
用 do while sqlca.sqlcode = 0
gcg_cumt 2003-08-22
  • 打赏
  • 举报
回复
同意 firmbank(2003.8.6 开始学VC++) 的说法,在游标中不能有commit语句。其他写法没有问题。
fiend_terminator 2003-08-22
  • 打赏
  • 举报
回复
你写的程序不好!很差!
建议你从新学习算法与pb的事务
你完全可以用一个sql解决问题
handi 2003-08-22
  • 打赏
  • 举报
回复
那就把commit放到循环以外把。像楼上说的那样。
不过判断的时候最好还是用sqlca.sqlcode = 0来判断
runsoft 2003-08-22
  • 打赏
  • 举报
回复
SQLCODE条件错了,所以一直循环
do while sqlca.sqlcode = 0
....
loop

1,075

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 相关问题讨论
社区管理员
  • 基础类社区
  • WorldMobile
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧