数据提交并发控制问题之一(附代码,请高手捉虫),在线献分!
代码如下:
long sn = 0
if dw_1.update(true,false) = 1 and dw_2.update(true,false) = 1 and dw_3.update(true,false) = 1 and dw_4.update(true,false) = 1 and dw_5.update(true,false) = 1 then
commit using sqlca;
dw_1.resetupdate()
dw_2.resetupdate()
dw_3.resetupdate()
dw_4.resetupdate()
dw_5.resetupdate()
else
rollback using sqlca;
messagebox('提示窗',"数据提交失败,请重试!",exclamation!)
return
end if
if sqlca.sqlcode <> 0 then
messagebox("提示窗","提交数据失败,错误类型为:" + string(sqlca.sqlcode) + sqlca.sqlerrtext,exclamation!)
return
end if
sn = sn + 1
正常情况下上述语句执行无误,每提交一次,sn加1,提交失败,sn不会加1。
但是最近却出现了一次异样情况:
当时机器a中上述各dw正在update时,另一台机器b上正在用sql语句执行删除dw_1对应的表里的数据。机器a出现了英文提示,并且sn没有加1,但我发现dw_1至dw_5该笔数据竟然都保存进数据库了,这就比较奇怪了,我分析出现英文提示说明commit语句执行失败,return自然sn就不会加1,但是数据怎么又给保存了呢?
请高手分析,事关重大,请大家给出相应的解释
并且欢迎大家指出上述语句的问题所在,言请凿凿。