转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> Delphi程序 >> 正文
用Delphi模拟组件的两阶段提交         ★★★★

用Delphi模拟组件的两阶段提交

作者:闵涛 文章来源:闵涛的学习笔记 点击数:1281 更新时间:2009/4/23 18:34:53
  private

    isRootTrans:Boolean;      //是否是根事务

    isNeedTrans:Boolean;      //是否需要事务

  public

    DBOperate:TDBOperate_DL;   //操作数据库的类的实例

    procedure SetComplete;

    procedure SetAbort;

    constructor Create(const newDBOperate:TDBOperate_DL;needTrans:Boolean);//是否需要事务支持

    destructor Destroy;override;

  end;

在该类创建时,除了传递进操作数据库的类的实例外,再传入一个是否需要事务的标志,因为如果是只做读取数据库的操作,就用不着事务了。

类实现代码如下:

constructor TTS_DL.Create(const newDBOperate: TDBOperate_DL;

  needTrans: Boolean);

begin

  inherited Create;

  self.DBOperate := newDBOperate;             

  self.isNeedTrans := needTrans;                     //赋值是否需要事务

  if self.isNeedTrans then

  begin

    //如果在事务里,就不是根事务,保留事务上下文里isCommit的值不变

    if self.DBOperate.isInTrans then

      self.isRootTrans := false

    else

    begin

      self.DBOperate.BeginTrans;           //是根事务,就开始事务

      self.isRootTrans := true;

      self.DBOperate.isCommit := true;       //初始化提交标志为要提交事务

    end;

  end;

end;

 

destructor TTS_DL.Destroy;

begin

  if self.isNeedTrans then

  begin

    //如果是根事务,就按照投票结果进行事务提交或回滚

    if self.isRootTrans then

    begin

      if self.DBOperate.isCommit then

        self.DBOperate.CommitTrans

      else

        self.DBOperate.RollbackTrans;

    end;

  end;

  inherited;

end;

 

procedure TTS_DL.SetAbort;

begin

  self.DBOperate.isCommit := self.DBOperate.isCommit And false;       //投票说要回滚

end;

 

procedure TTS_DL.SetComplete;

begin

  self.DBOperate.isCommit := self.DBOperate.isCommit And true; //投票说要提交

end;

 

回到刚才的业务类Tthing和Tperson,这次都从TTS_DL类继承下来。

       Tthing = class(TTS_DL);

       Tperson = class(TTS_DL);

Tthing的删除代码该为如下:

procedure Tthing.Drop(const thing:String);

var

  sqlString:String;

begin

  sqlString := 删除的SQL语句;

  try

    self. DBOperate.Execute(sqlString);

    self. DBOperate.SetComplete;         //投票提交

  except

    self. DBOperate.SetAbort;                     //投票回滚

    raise;

  end;

end;

Tperson的删除代码如下:

procedure Tperson.Drop(const person:String);

var

  sqlString:String;

上一页  [1] [2] [3]  下一页


没有相关教程
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台