起步软件技术论坛-X3

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

[结帖]功能层数据集与信息层数据集使用同一连接的事务表现

[复制链接]
发表于 2009-4-24 11:41:05 | 显示全部楼层 |阅读模式
功能层和信息层里的数据集都有数据编辑操作,而且功能层的数据集对数据库的操作分为两种,一种是通过DataSet作修改,另一种是通过SQL语句直接修改数据。但是这些操作必须在同一事务中提交。信息层的数据集都在同一个INFO中,我已经把功能层中数据集的Connection设置成与信息层相同。
    我想问的问题是在不显式启动事务的情况下,使用InfoBroker.Info.ApplyUpdates向数据库提交时:
    1、功能层通过数据集修改的数据是不是可以在同一事务中提交到数据库?
    2、功能层通过SQL语句修改的数据是在InfoBroker.Info.ApplyUpdates时提交给数据库,还是在执行TQuery.Execute时就已经提交给了数据库?
    3、如果需要撤消修改,是不是只能通过各个数据集的CancelUpdates方法来撤消?
回复

使用道具 举报

发表于 2009-4-24 13:08:51 | 显示全部楼层
已经电话沟通了。等楼主反馈。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-4-24 15:58:03 | 显示全部楼层
以下测试都在隐式启动事务的情况下测试。
第一个问题:
  qryc.Connection := DataSetBroker1.DataSet.Connection;
  qryc.Connection.Transaction := DataSetBroker1.DataSet.Connection.Transaction;
经测试,使用以上的语句指定连接后,使用InfoBroker.Info.ApplyUpdates提交时,qryc中的数据没能提交到数据库中。qryc.ApplyUpdates后才会提交到数据库中。

第二个问题:
经测试:在执行TQuery.Execute时就已经提交给了数据库。

第三个问题:
只能通过各个数据集的CancelUpdates方法来撤消。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-4-24 16:03:54 | 显示全部楼层
测试版本2652。
测试结论:
第一个问题,其实是启动了两次事务。
第二个问题,其实也是启动了两次事务。这种情况下,实际上是无法达到在一个事务中提交的。

如果使用隐式事务,第一个问题中除了把qryc数据集定义到信息层,是否还有其他解决办法?
回复 支持 反对

使用道具 举报

发表于 2009-4-24 16:43:42 | 显示全部楼层
楼主,那你试过自己启动事务吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-4-27 09:40:40 | 显示全部楼层
显示事务可以,但是有缺陷。我的提交顺序是先qryc.ApplyUpdates,然后InfoBroker.Info.ApplyUpdates。这时如果在InfoBroker.Info.ApplyUpdates前发生异常,虽然数据库已经回滚,但前端qryc中的数据已经无法回滚。虽然可能通过qryc.Refresh处理,但是总感觉程序不完美。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-4-27 09:44:17 | 显示全部楼层
另外,虽然我们已经有2652版本,但我们的客户都仍在使用2644版本。更换版本遇到的阻力比较大。2644的事务处理是有问题的,此前已经确认了这一点。
如果你们也没有比启动显示事务或把数据集全放到信息层以外的方案,这个贴子就算是单纯探讨了。
回复 支持 反对

使用道具 举报

发表于 2009-4-27 10:36:02 | 显示全部楼层
楼主,2650上,我也按照你说的:
qry执行提交--不报异常
dataset执行提交--报异常
然后能正常回滚的。

2644到2650差异应该不是特别的大,楼主可以尝试一下,数据库脚本不升级,只替换服务端和客户端看看是否有问题。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-4-28 12:30:16 | 显示全部楼层
1、dataset在ApplyUpdates后,在不刷新数据集的情况肯定是回滚不了数据的,回滚的只是数据库中的数据。
2、2650以后的版本在提交事务时确实已经不再报异常了。但2644的确有异常。我在升级时都没有升级数据库脚本,而是只替换服务端和客户端。
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-22 06:52 , Processed in 0.042683 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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