我使用的是VB+SQL,看了很多帖子,但是还是有点迷糊,过程如下,到底该怎样实现只要有一句错就全部回滚?
VB中默认使用的游标是客户还是服务器?
事务中应该使用什么游标?
cnn是数据库连接模块,Cnn.Open "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=shoesenterprise"Private Sub Cmdqxpz_Click()
On Error GoTo errHandle
  ...
  Cnn.BeginTrans
  Cnn.Execute("insert into ...")
  Cnn.Execute("update ...")
  Cnn.Execute("insert into ...")
  Cnn.Execute("update ...")
  Cnn.CommitTrans
  ...errHandle:
If Err.Number <> 0 Then
Cnn.RollbackTrans
MsgBox "信息提示:" & Err.Number & vbCrLf & Err.Description
End If
End Sub请问各位:
1.需要指定游标类型不?以上过程能不能正确实现只要有一句错就全部回滚,如果不能,该怎么修改?
2.假设第三条执行语句有错误,则第一二条能不能正确回滚?

解决方案 »

  1.   

    谢谢Tiger_Zhao!你回复的帖子如下:
    Private Sub Cmd1_Click()
        On Error GoTo ErrHandler    Call Sed
        Call Main    Dim sql As String
        sql = "insert into tb_cust values(" & _
                    "'" & T1(0).Text & "'," & _
                    "'" & T1(1).Text & "'," & _
                    "'" & T1(2).Text & "'," & _
                    "'" & T1(3).Text & "'," & _
                    "'" & T1(4).Text & "')"
        cnn.Execute sqlExitEntry:
        Exit Sub
    ErrHandler:
        MsgBox Err.Description, vbOKCancel, "错误"
        Resume ExitEntry
    End Sub    Call Sed
        Call Main

    这两句到底是什么意思呀???
      

  2.   

      Cnn.Execute("insert into ...") 
      Cnn.Execute("update ...") 
      Cnn.Execute("insert into ...") 
      Cnn.Execute("update ...") 
    把短的SQL拼接起来执行,把长的SQL拆分开执行。
      

  3.   

    Private Sub Cmdqxpz_Click() 
    On Error GoTo errHandle 
      ... 
      Cnn.BeginTrans 
      Cnn.Execute("insert into ...") 
      Cnn.Execute("update ...") 
      Cnn.Execute("insert into ...") 
      Cnn.Execute("update ...") 
      Cnn.CommitTrans 
      ... 
    exit sub  '这里需要加这个,不然不管是否有错误都会进入错误处理部分
    errHandle: 
    If Err.Number <> 0 Then 
    Cnn.RollbackTrans 
    MsgBox "信息提示:" & Err.Number & vbCrLf & Err.Description 
    End If 
    End Sub 
      

  4.   

    If Err.Number <> 0 Then 我加了这个应该不会没有错误的时候都要出现提示吧????
      

  5.   

    谢谢Tiger_Zhao!你回复的帖子如下: 
    Private Sub Cmd1_Click() 
        On Error GoTo ErrHandler     Call Sed 
        Call Main     Dim sql As String 
        sql = "insert into tb_cust values(" & _ 
                    "'" & T1(0).Text & "'," & _ 
                    "'" & T1(1).Text & "'," & _ 
                    "'" & T1(2).Text & "'," & _ 
                    "'" & T1(3).Text & "'," & _ 
                    "'" & T1(4).Text & "')" 
        cnn.Execute sql ExitEntry: 
        Exit Sub 
    ErrHandler: 
        MsgBox Err.Description, vbOKCancel, "错误" 
        Resume ExitEntry 
    End Sub 事务从哪里开始?哪里提交?哪里回滚?是不是只是一个错误的提示噢??
      

  6.   

    老虎这个没有提交、回滚,你的有Cnn.Open "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=shoesenterprise" Private Sub Cmdqxpz_Click() 
    On Error GoTo errHandle 
      ... 
      Cnn.BeginTrans    '事务开始
      Cnn.Execute("insert into ...") 
      Cnn.Execute("update ...") 
      Cnn.Execute("insert into ...") 
      Cnn.Execute("update ...") 
      Cnn.CommitTrans   '事务提交
      ... errHandle: 
    If Err.Number <> 0 Then 
    Cnn.RollbackTrans   '事务回滚
    MsgBox "信息提示:" & Err.Number & vbCrLf & Err.Description 
    End If 
    End Sub 
      

  7.   

    各位再帮我看看这个问题:
    http://topic.csdn.net/u/20090814/10/fee02edd-e9ca-48f5-a49b-8554af135a2b.html