编程论坛
400万+工程师在用
400万+工程师在用

电子发烧友网工程师

17年用户 16436经验值
擅长:可编程逻辑 MEMS/传感技术 测量仪表 模拟技术 控制/MCU RF/无线
私信 关注

BeginTrans、CommitTrans和RollbackTrans 方法应用实例(VB)

2009-1-8 10:15

<p><font face="Verdana">本范例更改数据库的 titles 表中所有心理学书籍的类型。首先,BeginTrans 方法启动一个事务,将所有对 Titles 表做出的更改隔离,然后,CommitTrans 方法将保存更改。可使用 RollbackTrans 方法撤消用 Update 方法保存的更改。</font></p>
<p><font face="Verdana">Public Sub BeginTransX()</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp; Dim cnn1 As ADODB.Connection<br/>&nbsp;&nbsp;&nbsp; Dim rstTitles As ADODB.Recordset<br/>&nbsp;&nbsp;&nbsp; Dim strCnn As String<br/>&nbsp;&nbsp;&nbsp; Dim strTitle As String<br/>&nbsp;&nbsp;&nbsp; Dim strMessage As String</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp; ' Open connection.<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strCnn = "Provider=sqloLEDb;" &amp; _<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "Data Source=srv;Initial Catalog=Pubs;User Id=sa;Password=; "<br/>&nbsp;&nbsp;&nbsp; Set cnn1 = New ADODB.Connection<br/>&nbsp;&nbsp;&nbsp; cnn1.Open strCnn</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp; ' Open Titles table.<br/>&nbsp;&nbsp;&nbsp; Set rstTitles = New ADODB.Recordset<br/>&nbsp;&nbsp;&nbsp; rstTitles.CursorType = adOpenDynamic<br/>&nbsp;&nbsp;&nbsp; rstTitles.LockType = adLockPessimistic<br/>&nbsp;&nbsp;&nbsp; rstTitles.Open "titles", cnn1, , , adCmdTable<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; rstTitles.MoveFirst<br/>&nbsp;&nbsp;&nbsp; cnn1.BeginTrans</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp; ' Loop through recordset and ask user IF she wants <br/>&nbsp;&nbsp;&nbsp; ' to change the type for a specified title.<br/>&nbsp;&nbsp;&nbsp; Do Until rstTitles.EOF<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If Trim(rstTitles!Type) = "psychology" Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strTitle = rstTitles!Title<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strMessage = "Title: " &amp; strTitle &amp; vbCr &amp; _<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "Change type to self help?"</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' Change the title for the specified<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' employee.<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If MsgBox(strMessage, vbYesNo) = vbYes Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rstTitles!Type = "self_help"<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rstTitles.Update<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rstTitles.MoveNext<br/>&nbsp;&nbsp;&nbsp; Loop</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp; ' Ask if the user wants to commit to all the <br/>&nbsp;&nbsp;&nbsp; ' changes made above.<br/>&nbsp;&nbsp;&nbsp; If MsgBox("Save all changes?", vbYesNo) = vbYes Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cnn1.CommitTrans<br/>&nbsp;&nbsp;&nbsp; Else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cnn1.RollbackTrans<br/>&nbsp;&nbsp;&nbsp; End If</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp; ' Print current data in recordset.<br/>&nbsp;&nbsp;&nbsp; rstTitles.Requery<br/>&nbsp;&nbsp;&nbsp; rstTitles.MoveFirst<br/>&nbsp;&nbsp;&nbsp; Do While Not rstTitles.EOF<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; debug.Print rstTitles!Title &amp; " - " &amp; rstTitles!Type<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rstTitles.MoveNext<br/>&nbsp;&nbsp;&nbsp; Loop</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp; ' Restore original data because this<br/>&nbsp;&nbsp;&nbsp; ' is a demonstration.<br/>&nbsp;&nbsp;&nbsp; rstTitles.MoveFirst<br/>&nbsp;&nbsp;&nbsp; Do Until rstTitles.EOF<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If Trim(rstTitles!Type) = "self_help" Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rstTitles!Type = "psychology"<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rstTitles.Update<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rstTitles.MoveNext<br/>&nbsp;&nbsp;&nbsp; Loop</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp; rstTitles.Close<br/>&nbsp;&nbsp;&nbsp; cnn1.Close</font></p>
<p><font face="Verdana">End Sub</font></p>

更多回帖

打开APP