起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 288|回复: 8

【搞定】[请求]关于多数据集事务处理的问题**

[复制链接]
发表于 2007-3-28 17:21:52 | 显示全部楼层 |阅读模式
下面是qq对话:
依山傍水  (2007-03-28 15:02:09)
我现在有3个数据集,一主两从,两个从数据集的BeforeApplyUpdates事件中都有更新sql,只要有一个数据集中的更新不满足的话,另外两个都不能提交更新
joyes  (2007-03-28 15:35:30)
保存按钮自己写,然后用事务控制,具体的写法问我们客服

这个问题如何解决,有没有例子看看
回复

使用道具 举报

发表于 2007-3-28 17:25:47 | 显示全部楼层
数据集.ApplyUpdates(True)
就会提交所有跟当前数据集有主从关系的数据集,而且是在一个事务中提交的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-3-28 17:33:26 | 显示全部楼层
那是不是只要发现问题要取消提交的时候用SysUtils.Abort就可以了,
是不是不需要另外加按钮写保存功能了
回复 支持 反对

使用道具 举报

发表于 2007-3-29 11:56:43 | 显示全部楼层
不是,如果已经定义了主从数据集,且这些数据集在一个事务中,那么使用ApplyUpdates(True)
就能实现要成功一起成功,要失败一起失败,不需要自己来控制取消提交
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-3-29 13:18:36 | 显示全部楼层
那我现在希需要在beforeupplyupdates中取消提交,返回到点击保存按钮前的状态,而且之前进行更新的一些sql语句都要回滚。因该怎么办
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-3-29 16:53:17 | 显示全部楼层
等待回复
回复 支持 反对

使用道具 举报

发表于 2007-3-29 17:41:09 | 显示全部楼层
只要你发的SQL语句使用的数据连接跟这些数据集在同一个事务里,或者在同一个连接上,
只要在BeforeApplyUpdates中发Raise Exception.Create(...)就可以一起回滚

例如
procedure DataSet1BeforeApplyUpdates(..);
begin
  DataSet1.Connection.Execute('update ...');
  if error then
    raise Exception.Create('出错了,所有数据都会回滚,包括刚才的update语句');
end

注意你用的是哪个版本,261X之前版本在事务处理上有些问题,建议你用2619版本
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-3-30 09:31:58 | 显示全部楼层
谢谢!哦,主从数据集在保存的时候几个数据集系统默认是一个事务吧!?另外我们现在用的是2611版本,应该没问题吧?!
回复 支持 反对

使用道具 举报

发表于 2007-3-30 09:32:55 | 显示全部楼层
2611的事务处理有些问题,建议用2619
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2024-12-28 17:41 , Processed in 0.040466 second(s), 16 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表