向高手求解多站点数据提交的SCRIPT!!!100分

pigherd 2002-03-06 06:24:02
向高手求解多站点数据提交的SCRIPT!!!


提出问题:
在C/S中多站点同时提交的情况下,如何同步地完整地提交保存多个表A,B,C,D,E...中的数据?

保存要求:
1.保存方式要包含用DW的UPDATE()函数和直接用UPDATE语句修改表中数据两种方式。
2.所有表必须同步保存,即要么所有表都保存成功,要么就都保存失败。
3.要有防止其中某一表用DW的UPDATE()函数保存时由于已有其他站点修改了该表的数据而 导致保存失败的情况发生的解决办法。
4.尽最大可能令数据能够成功提交,尽量减少提交失败的几率。

兄弟的SCRIPT远未能达到上述要求,如下:

if dw_a.update() = 1 and dw_b.update() = 1 and ... then//保存用UPDATE()函数提交的表
update C SET ... ; //保存用UPDATE语句提交的表
update D SET ... ;
.
.
.
if sqlca.sqlcode = 0 then //
commit;
mesagebox('','所有表均保存完毕!')
else
rollback;
mesagebox('','UPDATE语句提交导致失败!')
end if
else
rollback;
mesagebox('','UPDATE()函数提交导致失败!')
end if



请有兴趣的高手改一下SCRIPT,希望能有脚本注释!
若能指出兄弟SCRIPT中的不当之处,当十分感激!
谢谢!


...全文
86 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
ALLTEC 2002-03-09
  • 打赏
  • 举报
回复

!!!!!!!!!!!!!!!!!

格式全变了 ?????????????
ALLTEC 2002-03-09
  • 打赏
  • 举报
回复
int rtncode
rtncode = dw_2.Update(TRUE, FALSE)
IF rtncode = 1 THEN
rtncode = dw_4.Update(TRUE, FALSE)
IF rtncode = 1 THEN
rtncode = dw_log.Update(TRUE, FALSE)
END IF
END IF

IF rtncode = 1 THEN
COMMIT USING gnv_trans; // Commit them
dw_2.ResetUpdate()
dw_4.ResetUpdate()
dw_log.ResetUpdate()
ELSE
ROLLBACK USING gnv_trans;
END IF
pigherd 2002-03-09
  • 打赏
  • 举报
回复
问题解决!放分!

感谢诸位热心捧场!
liulee 2002-03-09
  • 打赏
  • 举报
回复
我的缩进是用全角空格做的,需要的话这里粘贴
下面一行包含了一个全角空格
 
上面一行包含了一个全角空格
liulee 2002-03-09
  • 打赏
  • 举报
回复
其实,dw的update函数和 update table .... 的原理是一样的,你在一个事务内处理都不会有问题的.
譬如
if dw_1.update(True,false) = 1 then
  Update table set .....
  if sqlca.sqlcode = 0 then
    commit;
    dw_1.resetupdate()
  else
    rollback;
  end if
else
  rollback;
end if

china_hfz 2002-03-09
  • 打赏
  • 举报
回复
if dw_a.update() = 1 and dw_b.update() = 1 and ... then改为:
if dw_a.update(true,false) = 1 and dw_b.update(true,false) = 1 and ... then
pigherd 2002-03-08
  • 打赏
  • 举报
回复
哎,自己GZ一下!
pigherd 2002-03-06
  • 打赏
  • 举报
回复
to pbsql(风云):
我update后有commit呀!
pigherd 2002-03-06
  • 打赏
  • 举报
回复
希望有高手给出完整的解决方案!
pbsql 2002-03-06
  • 打赏
  • 举报
回复
你update后不commit别人就不能修改表的,自己锁住了
2000pinbo 2002-03-06
  • 打赏
  • 举报
回复
要有防止其中某一表用DW的UPDATE()函数保存时由于已有其他站点修改了该表的数据而 导致保存失败的情况发生的解决办法。

解决办法:数据窗口放宽更新条件,update where clause 选择 key columns即可,不知道行不行
pbsql 2002-03-06
  • 打赏
  • 举报
回复
把上面的改一改:
integer n1,n2,n3...
sqlca.autocommit = false
if dw_a.update() = 1 and dw_b.update() = 1 and ... then//保存用UPDATE()函数提交的表
update C SET ... ; //保存用UPDATE语句提交的表
n1=sqlca.sqlcode
update D SET ... ;
n2=sqlca.sqlcode
......
if n1=0 and n2=0 and ... then //
commit;
mesagebox('','所有表均保存完毕!')
else
rollback;
mesagebox('','UPDATE语句提交导致失败!')
end if
else
rollback;
mesagebox('','UPDATE()函数提交导致失败!')
end if


sqlca.autocommit = true
//^也可不要

pigherd 2002-03-06
  • 打赏
  • 举报
回复
楼上的回答似乎也不完整,在线等待!
zhanwei 2002-03-06
  • 打赏
  • 举报
回复

sqlca.autocommit = false

//^^^^
if dw_a.update() = 1 and dw_b.update() = 1 and ... then//保存用UPDATE()函数提交的表
update C SET ... ; //保存用UPDATE语句提交的表
update D SET ... ;
.
.
.
if sqlca.sqlcode = 0 then //
commit;
mesagebox('','所有表均保存完毕!')
else
rollback;
mesagebox('','UPDATE语句提交导致失败!')
end if
else
rollback;
mesagebox('','UPDATE()函数提交导致失败!')
end if


sqlca.autocommit = true
//^也可不要

740

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 脚本语言
社区管理员
  • 脚本语言社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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