BeginTrans、CommitTrans 和 RollbackTrans 方法 (ADO)
         这些事务方法按如下方式管理 Connection 对象中所处理的事务: BeginTrans 启动新的事务。
CommitTrans 保存所有更改并结束当前事务。它也可以启动新事务。
RollbackTrans 取消当前事务中所做的任何更改并结束事务。它也可以启动新事务。 
语法level = object.BeginTrans()object.BeginTransobject.CommitTransobject.RollbackTrans返回值BeginTrans 可以作为函数调用,用于返回指示事务嵌套层次的长整型变量。参数object   Connection 对象。Connection如果希望以独立单元保存或取消对源数据所做的一系列更改,请使用这些具有 Connection 对象的方法。例如在货币转帐时,必须从帐户中减去某个数额并将其对等数额添加到另一个帐户。无论其中的哪个更新失败,都将导致帐户收支不平衡。在打开的事务中进行这些更改可确保只能选择进行全部更改或不作任何更改。注意   并非所有提供者都支持事务。需验证提供者定义的属性 Transaction DDL 是否出现在 Connection 对象的 Properties 集合中,如果在则表示提供者支持事务。如果提供者不支持事务,调用其中的某个方法将返回错误。一旦调用了 BeginTrans 方法,在调用 CommitTrans 或 RollbackTrans 结束事务之前提供者将不再立即提交所做的任何更改。对于支持嵌套事务的提供者来说,调用已打开事务中的 BeginTrans 方法将开始新的嵌套事务。返回值将指示嵌套层次:返回值为 1 表示已打开顶层事务(即事务不被另一个事务所嵌套),返回值为 2 表示已打开第二层事务(嵌套在顶层事务中的事务),依次类推。调用 CommitTrans 或 RollbackTrans 只影响最新打开的事务;在处理任何更高层事务之前必须关闭或回卷当前事务。调用 CommitTrans 方法将保存连接上打开的事务中所做的更改并结束事务。调用 RollbackTrans 方法还原打开事务中所做的更改并结束事务。在未打开事务时调用其中任何一种方法都将引发错误。取决于 Connection 对象的 Attributes 属性,调用 CommitTrans 或 RollbackTrans 方法都可以自动启动新事务。如果 Attributes 属性设置为 adXactCommitRetaining,提供者在 CommitTrans 调用后会自动启动新事务。如果 Attributes 属性设置为 adXactAbortRetaining,提供者在调用 RollbackTrans 之后将自动启动新事务。远程数据服务BeginTrans、CommitTrans 和 RollbackTrans 方法在客户端 Connection 对象上无效。

解决方案 »

  1.   

    是这样的:
    我的程序中有一段错误处理程序,其中需要对当前事物进行ROLLBACK,但在BEGINTRANS之前出现错误时,此时的ROLLBACKTRANS将出错,能否在执行ROLLBACKTRANS之前判断当前的CONNECTION对象是否处在事务中.
      

  2.   

    可以把begintrans 放在最前面
      

  3.   

    你可以采用两个错误处理点啊!
      On error goto err1
      .
      .
      .
      on error goto err2
      conn.begintrans
      .
      .
      .
    其中err2专门用来处理在begintrans后发生的错误!
      

  4.   

    ADOConnection好象的确没有判断这个的属性不过你可以自己做么。有两个方法:
    1。分成两段进行错误捕获。在事务开始前和开始后进行不同的错误处理。
    2。自己设置一个标志变量来判断。如下:a=0
    on error goto Err_Process
    .......
    adoConn.BeginTrans
    a=1
    .......
    on error goto 0
    exit sub
    Err_Process:
    if a=1 then adoconn.RollbackTrans
    ........