起步软件技术论坛-X3

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

【搞定】关于事务没有同时回滚的问题**

[复制链接]
发表于 2007-1-26 11:35:05 | 显示全部楼层 |阅读模式
问题是这样的,我们需要同时操作分别在业务数据库和系统数据库中的业务数据表和流程相关的三个表(tflow,ttask,ttaskmessage),我们需要做的就是同时修改这四张表中的状态字段,为了使其保持数据的一致性,我们引入了数据库的事务,来保证这几个表同时提交或同时回滚,代码如下:
static procedure FinishFlowInTransaction(Ads: TDataSet; const AFlag: string);
var
  lTransactionHandle: TTransactionHandle;
  lQuery: TQuery;
begin
  lQuery := TQuery.Create(nil);
  try
    lQuery.Connection := Ads.Connection;
    lQuery.Connection.Transaction := Ads.Connection.Transaction;

    with Ads.Connection.Transaction do
    begin
      lTransactionHandle := Start(False);
      try
        // 处理
    Ads.Edit;
        Ads.FieldByName('F_STATUS').AsString := AFlag;
        Ads.ApplyUpdates(True);

        FinishFlow(Ads.FieldByName('F_FLOWID').AsString, lQuery);

        Commit(lTransactionHandle);
      except
        Rollback(lTransactionHandle);
      end;
    end;
  finally
    lQuery.Free;
  end;
end;
其中FinishFlow()方法是我们修改系统流程那三个表的处理状态的方法
为了测试出当其中有一张表操作错误就同时回滚我们故意把操作流程表的sql语句写错(错误表名)
当我们进行测试的时候,发现业务数据表中的状态字段回滚了,而系统流程数据表中的前两个表中的状态字段并没有回滚,请问版主该如何解决呢?
回复

使用道具 举报

发表于 2007-1-26 12:03:37 | 显示全部楼层
回复 支持 反对

使用道具 举报

发表于 2007-1-26 12:21:14 | 显示全部楼层
就是照着那个做的^_^不行,现在回滚有问题
版本2401
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-1-26 18:29:26 | 显示全部楼层
j经过我们的反复测试得出:
每个Connection组件会对应一个Transaction组件,如果先把两个组件对应的事务置在同一个事务中的话,这样即使后面的代码改变其中任一组件的Connection属性的话,那么它们的Transaction是不会发生变化的,这时可保证事务的同时提交或同时回滚;
而如果先将两个组件的Connection属性置为相同然后再将它们的事务置在同一个事务中的话,这时只要其中有一个组件的Connection属性发生变化的话,那么其Transaction也会随之发生变化,这样就会导致两个组件的事务不在同一个事务中,从而导致其组件发生的变化没有同步进行,而破坏了数据的一致性,版主,我总结的如何?
回复 支持 反对

使用道具 举报

发表于 2007-1-29 11:50:13 | 显示全部楼层
Transaction----Connection----DataSet
楼主,你DataSet用的都不是一个Connection,怎么可能会在同一个Transaction中呢。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-1-29 13:09:17 | 显示全部楼层
那要向版主请教一下
回复 支持 反对

使用道具 举报

发表于 2007-1-29 13:12:05 | 显示全部楼层
每个Connection组件会对应一个Transaction组件,如果先把两个组件对应的事务置在同一个事务中的话,这样即使后面的代码改变其中任一组件的Connection属性的话,那么它们的Transaction是不会发生变化的,这时可保证事务的同时提交或同时回滚;


楼主总结的很好。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-1-29 16:53:02 | 显示全部楼层
ok,谢谢版主,可以结帖了:)
回复 支持 反对

使用道具 举报

发表于 2007-1-29 16:54:20 | 显示全部楼层
客气,结贴。
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2024-12-24 08:06 , Processed in 0.040505 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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