请大家找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


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

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

谢谢大家!
...全文
158 12 打赏 收藏 举报
写回复
用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中的数据。
【变分多谐波对偶模式追踪】从噪声信号中提取重复瞬态分量的方法(Matlab代码实现)内容概要:本文介绍了“变分多谐波对偶模式追踪”这一信号处理方法,旨在从含有噪声的信号中有效提取重复出现的瞬态成分。该方法结合了变分模态分解与多谐波分析的优势,通过构建对偶模式追踪模型,实现了对微弱瞬态特征的精准分离与增强,特别适用于机械故障诊断、生物医学信号处理等领域。文中详细阐述了算法原理、数学模型构建及其实现步骤,并提供了基于Matlab的代码实现,便于读者复现与应用。; 适合人群:具备一定信号处理基础,从事机械故障诊断、生物医学工程或相关领域的研究生及科研人员。; 使用场景及目标:①从强噪声背景中提取机械设备的周期性冲击信号以进行故障预警;②分析生物医学信号中的重复生理事件,如心电图或脑电图中的特定波形;③为需要高精度瞬态特征提取的研究提供可靠的算法支持与实现范例。; 阅读建议:此资源以Matlab代码实现为核心,不仅展示了算法的具体编程细节,还强调了理论与实践的紧密结合。学习者应在理解算法原理的基础上,动手运行并调试所提供的代码,通过改变参数观察结果变化,从而深入掌握该方法的应用技巧与优化策略。
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究(Matlab代码实现)内容概要:本文研究了非线性值迭代自适应动态规划(ADP)方法,旨在解决离散时间非线性系统的最优控制问题。通过构建近似动态规划框架,结合值迭代算法,利用函数逼近器(如神经网络)对系统代价函数进行学习与优化,逐步逼近最优控制策略。文中详细阐述了算法的数学推导、收敛性分析及其实现流程,并以典型非线性系统为例,采用Matlab进行仿真验证,展示了该方法在处理复杂非线性系统优化控制方面的有效性与优越性。; 适合人群:具备自动控制理论、最优化方法及Matlab编程基础的研究生、科研人员以及从事智能控制、工业自动化等相关领域的工程技术人员。; 使用场景及目标:①研究和解决离散时间非线性系统的最优控制问题;②学习和掌握自适应动态规划(ADP)及值迭代算法的核心思想与实现技巧;③利用Matlab进行先进控制算法的仿真与验证,为复杂系统控制设计提供理论依据和技术支持。; 阅读建议:此资源侧重于理论与实践的结合,建议读者在学习过程中,不仅关注算法的数学推导,更要动手实践Matlab代码,通过调整参数、更换被控对象等方式加深理解,并尝试将其应用于其他类型的非线性系统控制问题中。

1,111

社区成员

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

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