如上

解决方案 »

  1.   

    执行什么操作出错,最后将代码贴出来在com+中最好利用com+的事务处理
      

  2.   

    在Com+中好像不提倡用ADo的事务,而用com+的事务处理
      

  3.   

    try
        m_dm.ADOCon.BeginTrans;
        m_dm.qryadd.Close;
        m_dm.qryadd.SQL.Text:='insert into addone (addnumber) VALUES(''1'')';
        m_dm.qryadd.ExecSQL;    m_dm.qryrelease.Close;
        m_dm.qryrelease.SQL.Text:='insert into release (releasenumber) VALUESs  (''1'')';
        m_dm.qryrelease.ExecSQL;
        m_dm.ADOCon.CommitTrans;
       except
        m_dm.ADOCon.RollbackTrans;
      end;目的是测试一下在com+为支持事物和不支持事物的情况下的执行效果。
      

  4.   

    确定m_dm.ADOCon连接着吗?
    哪行出错?
      

  5.   

    红苹果说的对的。ADOcon保持连接就不报这个错误。再问:
      ado的事物与com+的事物是完全独立的吗?
      用ado的事物(如上),com+事物为禁用、不支持、支持完全没有影响,而为需 要时报错“没有活动事物”????
      

  6.   

    我这样是不是事物有嵌套?
    如果com+需要事物,在激活com+时DTC就创建一个事物,则处于事物环境中了,而执行含有上段代码的方法时,又将触发一个事物,所以报错???????(是否独立呢?)
      

  7.   

    请问各位大哥:利用com+对象池和事物为需要时事物不能回滚的问题有比较的解决方案了吗?  对我来说宁愿放弃其事物也不放弃其池化功能,速度差别太大了。求求大家说两句话嘛!!
      

  8.   

    根据李维的书上写的,加上我的理解,得出如下意见:微软不提倡程序员使用各自的驱动程序中提供的事务处理API,包括ADO,BDECOM+对象在创建时,DELPHI希望程序员设定COM+对象的事务支持状态,不支持,或支持,或需要新的事务等将事务分解到对象级,而不是方法级.建更新人事资料对象,需要事务,查询工资对象,支持事务.而不是建一个人事对象,在更新方法中启动事务,而在查询中不启动事务
    以上个人意见,不敢独享,有错误之处,还烦请各路英雄斧正
      

  9.   

    不能回滚?好像李维的书上提到过,是没安排好*通过设计时调整可以解决此问题是不是说对象A的A事务执行完,接着启动了对象B,且执行B事务,结果B对象的B事务失败,此时要求回滚到A的A事务之前状态,对吗?李维ADO/MTS/COM+上,写了有一种情况是执行A,B,C,D四个事务时,全部成功则成功,有任一失败,则回滚全部ABCD事务.开始没看明白,可能就是楼上说的这种情况了在下班门弄斧了,不知对不对,我也只是猜测
      

  10.   

    (天空还下着沙) :
      谢谢你的支持。我说的不是这种情况。你看看代码:try
        m_dm.qryadd.Close;
        m_dm.qryadd.SQL.Text:='insert into addone (addnumber) VALUES(''1'')';
        m_dm.qryadd.ExecSQL;    m_dm.qryrelease.Close;
        m_dm.qryrelease.SQL.Text:='insert jksdlkgjkjfkj into release (releasenumber) VALUESs  (''1'')';
        m_dm.qryrelease.ExecSQL;
        setcomplete();
       except
        setabort();
      end;组件为需要事物,对象池可用。数据能写进表addone 中。对象迟禁止则事物成功。(有很多英雄到遇到这种情况,所以我用ado事物)
      

  11.   

    问题是这样的:
    通常,在transactional数据模块上所有的IAppServer调用都是基于事务的.你只需要设置数据模块的事务属性来声明它必须在事务中.另外,你可以通过扩展应用服务器接口来包含方方来调用你定义的事务.
    如果你的事务属性说明了远程数据模块需要事务,那么客户端在接口的调用都被自动地封装在事务中.所有的客户端对应用服务器的调用都将支持事务处理的能力,直到你声明事务的完成.调用要么成功要么回滚.
    注意:不要将通过数据库连接组件建立的事务或直接使用SQL命令建立的事务与com+或MTS事务结合使用.当TRANSACTIONAL数据模块立足于事务时,所有的数据库调用会自动的支持事务.
    因此,你不必自己亲自在com+中来撰写事务处理代码
      

  12.   

    组件为需要事物,对象池可用时不能回滚啊。不用对象池那用com+事物可以。
      

  13.   

    笑天兄:苹果只有一个,只不过这个马甲有近万的可用分,我想捐给正身,可是不够级别。都怨正身在水园挥金如土,唉!惭愧啊:)我的感觉在COM+中用ADO的事务多有不便,COM+的事务机制我觉得挺好的。
    如果COM+是需要事务的,则事务开始于组件创建,在方法中传递一种李维称为上下文的东西,采用投票制,一个操作结束,你可以投赞成票setcomplete或反对票setabort。只是投票而已,由最先发起事务的函数来统计票数以决定是否提交事务。好是好,可是还是池化时的问题,上面讲过了,还没解决,大家关心一下怎么解决。