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.CloseEnd Sub
客户端游标是什么,服务器端是什么?指的是什么?
数据库而言的,如果数据库支持事务,在connection对象上用这些方法,你就能回滚如果选择了adUseClient,本地会维护一个游标,recordset的movenext,movefirst的方法,实际是在本地执行
adUseServer则在服务器端
(2)CommitTranse是提交一个事务,从此事务处理中的语句开始生效,执行
(3)RollBackTranse是回滚事务,恢复处理前的状态一个事务处理完之后不会自动开启一个事务,需要代码控制
ADO在什么时候把我所做的修改放回SERVER
如果启动了事务CommitTranse后返回没有事务,默认update,insert....后返回
这个说法可靠吗?:-)
比如你删错了纪录,你就可以用RollBackTranse返回你上一次提交时的状态
这就是事务的好处!!!
再使用事务了?
请各位大侠帮忙看一下:(150分)
http://www.csdn.net/Expert/topic/504/504035.shtm
该范例更改数据库的 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.CloseEnd Sub