请大家找BUG!

pigherd 2002-02-20 11:42:20
有两个表:A,B 用DW来 UPDATE保存第一个表A后,再用UPDATE语句来保存第二 个表B后,发现有时会出现只更新了其中一个表的情况,出错几率大概为千分之一 ,但这就足够叫人头疼的了,细节如下,请大家抓虫:

if DW_a.update() = 1 then // 保存表A

else
messagebox('','error1')
rollback;
return
end if

update B set cost_sum = 1000 where sn = :sn_couter; / / sn_couter为变量

if sqlca.sqlcode <> 0 then //保存表B
rollback;
messagebox('','error2')
return
else
commit;
messagebox('','right!')
end if


如果有错误的话,那么正确的写法是什么?

如果保存数据中途网络故障或拥挤会不会造成只提交了一个表,如果存在这种情况的话有什么好地热解决之道?

谢谢大家!
...全文
112 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
pigherd 2002-03-09
  • 打赏
  • 举报
回复
问题解决!放分!

感谢诸位捧场!
zuoyangguang 2002-03-02
  • 打赏
  • 举报
回复
学学
pigherd 2002-03-02
  • 打赏
  • 举报
回复
powerbu(小李飞刀)同志所说的数窗UPDATE之前刷新如何实现呢?总不能RETRIEVE吧!
programbcb 2002-02-22
  • 打赏
  • 举报
回复
提出以下二点:
1.在rollback或commit语句后加messagebox,不要在前面加,不然弹出这个错误提示后,如果用户不按确定将可能造成死锁
2.如果多个数据窗口进行更新操作,采用dw_1.update(true,false),dw_1.resetupdate()的方法,不然可能造成数据丢失。
keani 2002-02-21
  • 打赏
  • 举报
回复
应该说,这是一个不可能完全避免的问题,只能是尽可能的避免,因此,建议你采用三次握手的原理。
大概可以这样做,commit A表,B表之前,检测 n(定义为int类型)
若updata A表成功,那么
如果n=1继续执行updata B表
如果n=2则 commit 继续
否则return
若updata B表成功,那么n= n+1
如果n=3则 commit

用循环完成。
xwmhn 2002-02-21
  • 打赏
  • 举报
回复
新年期间,以和为贵!
pigherd 2002-02-21
  • 打赏
  • 举报
回复
首先感谢大家的回答!
keani(基恩)说这是不可能完全避免的问题,请问诸位是否如此?
另外,惭愧的很,兄弟对流方兄的"在同一个事务中处理你的数据窗和update语法"这句话理解不是很清楚,尚请明示,有例最好!谢谢!
pbworm 2002-02-21
  • 打赏
  • 举报
回复
靠,怎么空格和缩进都没有了啊?????
pbworm 2002-02-21
  • 打赏
  • 举报
回复
给你改改程序吧
If dw_1.update() = 1Then
update B set cost_sum = 1000 where sn = :sn_couter;
If sqlca.sqlcode = 0 Then
Commit Using sqlca;
messageBox('','success')
Else
Rollback Using sqlca;
messageBox('False',sqlca.sqlerrtext)
End If
Else
Rollback Using sqlca;
messageBox('False',sqlca.sqlerrText)
End If

注意:将连接的autoCommit设置为False
liulee 2002-02-21
  • 打赏
  • 举报
回复
在同一个事务中处理你的数据窗和update语法,不然,极有可能只更新第一个的。

pbsql 2002-02-21
  • 打赏
  • 举报
回复
if DW_a.update() = 1 then
commit;// 保存表A
update B set cost_sum = 1000 where sn = :sn_couter; / / sn_couter为变量,//保存表B
else
messagebox('','error')
rollback;
return
end if
powerbu 2002-02-21
  • 打赏
  • 举报
回复
呵呵~
保存前刷新就不会有这个问题了。
因为用DW(应该说POWERSCRIP实现的数据库操作)中的内容是数据缓冲区中的内容。而用SQL语句是直接操作数据库。
所以提交到数据库中的数据并不一定是显示在DW中的数据。
Domain4.3(明小子)10.10.10更新版主要更新内容如下: 1.驱除部分死连接,恢复部分官方连接 2.改变默认显示页面为本人BLOG 3.修正程序在检测时出错的BUG 4.修正程序在部分系统中无法启动的BUG 5.加了一个功能模块,但还不成熟,隐藏了,高手的话可以用OD调出来!>!< 6.修复前段时间一些朋友反映的错误和程序宏 7.增加四款SKN皮肤! 10.10.11紧急更新: 1.修正新版程序在部分系统中启动后直接导致系统蓝屏的BUG 2.修正域名查询的几个错误 3.修正程序批量检测查询到域名的时候无反映的BUG! Domain4.2(明小子)10.01.16更新版主要更新内容如下: 1.删除所有无关数据 2.优化急速代码 3.改变启动线程 4.增加SQL数据批量导出功能 5.加入几个优化进程模块,非后门.后台运行. 6.锁定主程序栏目宽和高,不在恢复 7.删除“辅助工具”模块中全部代码 8.修正XP SP3 程序下兼容问题 9.重新改写域名查询旁站线程 程序于2010年01月16号调试完毕! 提别提示:第4个功能只能运行在完整版的windows XP 平台系统中,其他平台无法运行,如果出现恢复按钮并不能保存自行调试与本程序无关.谢谢合作! 宝宝的话:有朋友们的鼓励才会有这个版本的发布,这当是我送给大家2010年里的第一个礼物吧。 Domain4.1(明小子)0901更新版主要更新内容如下: 1.增加新系统兼容模块,全面兼容2000-2008各系统 (部分精简版系统除外) 2.优化网站打开速度,删减部分无用内核信息,全面加快程序启动速度. 3.基于09.05.20号内核提升,改变搜查循环的一个死BUG! 4.删除在0520上增加的一个补针函数,并使用新的函数替换.保证不报错. 5.不在兼容xpsp3,因为没时间去修正这个错误。所以可能部分SP3系统运行不起来本程序 6.增加部分程序扩充空格代码,为下个版本更新做好铺垫 小提示:保留旧的IP反查连接系统,原因没有到新的和稳定的IP反差服务器!如果有能提供的与本人联系!谢谢合作 Domain4.1(明小子)0520更新版主要更新内容如下: 1.基于08.10.01号内核提升,修正一次关键错误。 2.替换原程序自带的那个小马,该为最新美化免杀版的小马! 3.添加一个服务器挂钩程序(非插件),使修改后的新内核兼容vista系统。 4.程序数据库默认名为:SetData.mdb 大家使用3.5版本以上的MDB数据.其他低版本程序可能不兼容! 5.删除后台下载统计代码(以前没发现,本人也是从网站上面下的软件,排除作者自添加行为) 6.加了一个补针,针对sql注入功能中的一个小BUG。 7.删除了很多没有用的代码,最大限度的优化程序启动速度。 8.更新部分在xpsp3下出错的几个小BUG(小问题小解决,这个错误仅针对部分优化过度的XPSP3系统)。 提记:很多朋友说需要修改下程序IP域名查询功能,这里说明下.由于内核不到关键句柄导致无法更新,下个版本在仔细看看! Domain4.0(明小子)1001更新版主要更新内容如下: 1.更新部分过度优化过的系统不兼容问题。 2.修改内存识别函数,使其降低软件在使用期间所占用的内存大小。 3.基于08.09.15号内核提升,修正因修改软件所出现的几个导致软件崩溃的几个BUG。 4.换了软件自带的那个垃圾皮肤。加入兼容美化皮肤!更美观! 5.兼容前版本数据库支持功能 6.去掉了没有用的PHP入侵选项和几处小BUG...... 转贴是一种美德!分享也是一种快乐,工具仅做辅助作用勿用在非法用途上! 程序自带本BLOG连接,启动比较慢!不喜勿用!谢谢合作!

1,108

社区成员

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

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