起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 1666|回复: 1

如何实现同一业务信息的数据集在同一事务内处理

[复制链接]
发表于 2004-12-7 16:57:45 | 显示全部楼层 |阅读模式
例如,业务信息inforA(包含dsMaster、dsDetail、dsData,并且dsMaster和dsDetail定义了主从关系,dsMaster是主数据集)业务信息inforB(包含dssData)

1、如果dsMaster.DataSet..ApplyUpdate(True),那么提交的数据集就是dsMaster和dsDetail

2、如果dsMaster.DataSet..ApplyUpdate(False),那么提交的数据集就是dsMaster

3、如果实现dsMaster、dsDetail、dsData同时提交成功或者同时失败,此时就需要通过事务来实现,目前有两种方法,具体如下:

with dsMaster.DataSet.Connection.Transaction do
begin
  lTransactionHandle := Start(False);    //启动事务
    // Start 后面的参数是指事务的启动方式,分为立即方式和非立即方式,建议使用False,非立即方式
  Try
     // 处理
     dsMaster.DataSet.edit
     ……
     dsData.DataSet.edit
     ……
      dsMaster.DataSet.ApplyUpdates(True);
      dsData.DataSet.ApplyUpdates(False);
      Commit(lTransactionHandle);     //  结束
    Except
      Rollback(lTransactionHandle);    //回滚事务
    end;
  end;
当dsData.DataSet.ApplyUpdates(False)提交出错,dsMaster、dsDetail和dsData这三个数据集都回滚。
回复

使用道具 举报

 楼主| 发表于 2004-12-7 16:58:44 | 显示全部楼层

数据导航条中的“保存”调用的是什么

数据导航条TDataNavigator的”保存“按钮是调用了数据集的ApplyUpdates(True)方法,也就是主从关联提交。
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2024-12-22 23:56 , Processed in 0.040126 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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