修改失败是因为事务对象占用了吗?

hhdehh 2003-12-18 01:29:57
declare CUR_roomcancel CURSOR FOR
select yd_df_roomid,yd_df_date
from yd_df
where yd_df_prearrangeid=:ii_preid;

open CUR_roomcancel;

do until ii_preid<0
FETCH CUR_roomcancel INTO :li_roomid,:ld_date;
if SQLCA.SQLCode=100 or SQLCA.SQLCode=-1 then exit
update yd_df
set yd_df_use = '0'
where yd_df_prearrangeid=:ii_preid and yd_df_roomid=:li_roomid and yd_df_date=:ld_date;
if sqlca.sqlcode=-1 then
rollback ;
messagebox("警告","数据库修改出错")
return -1
end if

运行时报错messagebox("警告","数据库修改出错"),如果是因为事物对象占用,那是否要重新注册一个事物对象给游标呢?
...全文
37 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
hhdehh 2003-12-19
  • 打赏
  • 举报
回复
to:: baoqiangwang(我是一只小小鸟)
存储过程该怎么写呀:我在sybase里这样写了一个存储过程还是不行

CREATE PROCEDURE dbo.dw_content
@prearrangeid numeric(10,0)
AS

BEGIN
select yd_df_roomid,yd_df_date
from yd_df
where yd_df_prearrangeid=@prearrangeid

END

hhdehh 2003-12-19
  • 打赏
  • 举报
回复
up
suzh1133 2003-12-18
  • 打赏
  • 举报
回复
update 写在游标里面到没什么问题,应该是事务对象占用

你把
if sqlca.sqlcode=-1 then
rollback ;
messagebox("警告","数据库修改出错")
return -1
删除。

在游标结束后使用commit。执行程序后,到数据库中看下数据是否真确的存进去了
mittee 2003-12-18
  • 打赏
  • 举报
回复
为何要在循环中update,我觉得这样不妥
  • 打赏
  • 举报
回复
见已拟改成存储过程就没事了
dw_content 的sql语法为
select yd_df_roomid,yd_df_date
from yd_df
where yd_df_prearrangeid=:ii_preid;

datastore ids_data
ids_data=create datastore
ids_data.dataobject= 'dw_contect'
ids_data.settransobject(SQLCA)
ids_data.retireve(para)
for i = 1 to ids_data.rowcount()
li_roomid=ids_data.object.roomid[i]
ld_date=ids_data.object.date[i]
update yd_df
set yd_df_use = '0'
where yd_df_prearrangeid=:ii_preid and yd_df_roomid=:li_roomid and yd_df_date=:ld_date;
if sqlca.sqlcode=-1 then
rollback ;
messagebox("警告","数据库修改出错")
return
end if
next
hhdehh 2003-12-18
  • 打赏
  • 举报
回复
我用的是sybase11.5,用sqlca.sqlerrtext,没显示任何错误文本,
workhand 2003-12-18
  • 打赏
  • 举报
回复
改成messagebox('',sqlca.sqlerrtext)就可以看到具体的错误信息了,把它贴出来看看

1,075

社区成员

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

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