vb中提交事务(整理)

利用Connect对象的事务方法(必须为 服务 器端游标)  
   
  BeginTrans   启动新的事务,之后任何改变不会立即提交  
  CommitTrans   保存所有更改并结束当前事务。它也可以启动新事务。  
  RollbackTrans   取消当前事务中所做的任何更改并结束事务。它也可以启动新事务。  
   
  用法:打开连接后,对连接执行BeginTrans方法,之后按你的需求更改数据,  
  保存时调用连接的CommitTrans方法,在这之前利用On   Error   Goto,保存数据出错时跳转至错误处理部分,在其中执行连接的RollbackTrans方法,即可取消更改   

BeginTrans、CommitTrans   和   RollbackTrans   方法   (ADO)                        
    
  这些事务方法按如下方式 管理   Connection   对象中所处理的事务:    
   
  BeginTrans   启动新的事务。   
    
  CommitTrans   保存所有更改并结束当前事务。它也可以启动新事务。   
    
  RollbackTrans   取消当前事务中所做的任何更改并结束事务。它也可以启动新事务。    
  语法  
   
  level   =   object.BeginTrans()  
   
  object.BeginTrans  
   
  object.CommitTrans  
   
  object.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   对象上无效。  
   
   
  BeginTrans、CommitTrans   和   RollbackTrans   方法范例  
   
  该范例更改数据库的   Titles   表中所有心理学书籍的书籍类型。在   BeginTrans   方法启动事务将所有对   Titles   表的更改隔离后,CommitTrans   方法将保存更改。可使用   Rollback   方法撤销用   Update   方法保存的更改。  
   
  Public   Sub   BeginTransX()  
   
        Dim   cnn1   As   ADODB.Connection  
        Dim   rstTitles   As   ADODB.Recordset  
        Dim   strCnn   As   String  
        Dim   strTitle   As   String  
        Dim   strMessage   As   String  
   
        '   打开连接。  
              strCnn   =   "Provider=sqloledb;"   &   _  
              "Data   Source=srv;Initial   Catalog=pubs;User   Id=sa;Password=;   "  
        Set   cnn1   =   New   ADODB.Connection  
        cnn1.Open   strCnn  
   
        '   打开   Titles   表。  
        Set   rstTitles   =   New   ADODB.Recordset  
        rstTitles.CursorType   =   adOpenDynamic  
        rstTitles.LockType   =   adLockPessimistic  
        rstTitles.Open   "titles",   cnn1,   ,   ,   adCmdTable  
         
        rstTitles.MoveFirst  
        cnn1.BeginTrans  
   
        '在记录集中循环并询问是否想要更改指定标题的类型。  
        Do   Until   rstTitles.EOF  
              If   Trim(rstTitles!Type)   =   "psychology"   Then  
                    strTitle   =   rstTitles!Title  
                    strMessage   =   "Title:   "   &   strTitle   &   vbCr   &   _  
                    "Change   type   to   self   help?"  
   
                    '   更改指定雇员的标题。  
                    If   MsgBox(strMessage,   vbYesNo)   =   vbYes   Then  
                          rstTitles!Type   =   "self_help"  
                          rstTitles.Update  
                    End   If  
              End   If  
   
                    rstTitles.MoveNext  
        Loop  
   
        '   询问用户是否想提交以上所做的全部更改。  
        If   MsgBox("Save   all   changes?",   vbYesNo)   =   vbYes   Then  
              cnn1.CommitTrans  
        Else  
              cnn1.RollbackTrans  
        End   If  
   
        '   打印记录集中的当前数据。  
        rstTitles.Requery  
        rstTitles.MoveFirst  
        Do   While   Not   rstTitles.EOF  
              Debug.Print   rstTitles!Title   &   "   -   "   &   rstTitles!Type  
              rstTitles.MoveNext  
        Loop  
   
        '   恢复原始数据,因为这只是演示。  
        rstTitles.MoveFirst  
        Do   Until   rstTitles.EOF  
              If   Trim(rstTitles!Type)   =   "self_help"   Then  
                    rstTitles!Type   =   "psychology"  
                    rstTitles.Update  
              End   If  
              rstTitles.MoveNext  
        Loop  
   
        rstTitles.Close  
        cnn1.Close  
   
  End   Sub    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值