请教大虾,谁有关于vb操作数据库的事务回滚的例子
private sub command1_click()
on error goto err_proc
conn.begintrans 开始事务
conn.execute " insert into ..."
conn.execute " update ..."
conn.execute " delete from ..."
conn.committrans 提交事务
exit sub
错误处理
Err_Proc:
msgbox "操作失败!",48,"提示"
conn.rollbacktrans 回滚事务
exit sub
end sub
conn.begintrans
conn.committrans
conn.rollbacktrans
MSDN上面有详细解释啊!
cn.begintrans
on error goto errDeal
strSql:=.......
cn.execute(strSql)
strSql:=..................
cn.execute(strSql)
cn.committrans
exit sub
errDeal:
cn.rollbacktrans
你只要在系统中使用事务,当操作失败之后,自然就会出现回滚呀。
Leftie(Leftie) 已经说得挺好的啦。
开始事务:begintrans
提交事务:committrans
回滚事务:rollbacktrans
同意: Leftie(Leftie)的。
private sub command1_click()
on error goto err_proc
conn.begintrans 开始事务
conn.execute " insert into ..."
conn.execute " update ..."
conn.execute " delete from ..."
conn.committrans 提交事务
exit sub
错误处理
Err_Proc:
msgbox "操作失败!",48,"提示"
conn.rollbacktrans 回滚事务
exit sub
end sub
示例:
更改数据库的 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