楼上能举例吗?我写了一段代码,不知是错在哪里了,你能帮我指出吗?以下代码在网络正常时无误,但在其中一个连不上发生错误时执行了Abort事件没有回滚是为什么?Option ExplicitPrivate Const AccessStr As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\db1.mdb;Persist Security Info=False"Private Const SQLstr As String = "Provider=SQLOLEDB.1;Password=790330;Persist Security Info=True;User ID=sa;Initial Catalog=vegetable"Private AccessConn As ADODB.Connection Private SQLConn As ADODB.ConnectionPrivate d As TransactionContextPrivate ReadData As New ADODB.RecordsetPublic Function Process() As Boolean Set d = CreateObject("TxCtx.TransactionContext")
If Access() Then If SQL() Then d.Commit Process = True Else d.Abort '这句为什么没有用 Process = False End If Else d.Abort Process = False End If
End FunctionPrivate Function Access() As Boolean On Error GoTo ERR_ACCESS Dim AccessRD As New ADODB.Recordset Dim j As Integer Dim s As String
AccessRD.Open "SELECT top 1 * FROM USERMST WHERE [PASSWORD]<>'Y'", AccessConn
If Not AccessRD.EOF Then s = "UPDATE USERMST SET [PASSWORD]='Y' WHERE usermst='" & CStr(AccessRD(0)) & "'" AccessConn.Execute s, j Set ReadData = AccessRD If j > 0 Then Access = True Else Access = False End If Else Access = False End If
Exit Function ERR_ACCESS: MsgBox Err.Number & Err.Description Access = False End FunctionPrivate Function SQL() As Boolean On Error GoTo ERR_SQL Dim SQLRD As New ADODB.Record Dim j As Integer Set SQLConn = New ADODB.Connection
If Not ReadData.EOF Then SQLConn.Execute "INSERT INTO a (xID,xNAME) VALUES ('" & CStr(ReadData(0)) & "','" & CStr(ReadData(1)) & " ')", j If j > 0 Then SQL = True Else SQL = False End If Else SQL = False End If
Exit Function ERR_SQL: MsgBox Err.Number & Err.Description SQL = False End Function
Private SQLConn As ADODB.ConnectionPrivate d As TransactionContextPrivate ReadData As New ADODB.RecordsetPublic Function Process() As Boolean Set d = CreateObject("TxCtx.TransactionContext")
If Access() Then
If SQL() Then
d.Commit
Process = True
Else
d.Abort '这句为什么没有用
Process = False
End If
Else
d.Abort
Process = False
End If
End FunctionPrivate Function Access() As Boolean
On Error GoTo ERR_ACCESS
Dim AccessRD As New ADODB.Recordset
Dim j As Integer
Dim s As String
Set AccessConn = New ADODB.Connection
AccessConn.CommandTimeout = 30
AccessConn.CursorLocation = adUseClient
AccessConn.Open AccessStr
AccessRD.Open "SELECT top 1 * FROM USERMST WHERE [PASSWORD]<>'Y'", AccessConn
If Not AccessRD.EOF Then
s = "UPDATE USERMST SET [PASSWORD]='Y' WHERE usermst='" & CStr(AccessRD(0)) & "'"
AccessConn.Execute s, j
Set ReadData = AccessRD
If j > 0 Then
Access = True
Else
Access = False
End If
Else
Access = False
End If
Exit Function
ERR_ACCESS:
MsgBox Err.Number & Err.Description
Access = False
End FunctionPrivate Function SQL() As Boolean
On Error GoTo ERR_SQL
Dim SQLRD As New ADODB.Record
Dim j As Integer
Set SQLConn = New ADODB.Connection
SQLConn.CommandTimeout = 10
SQLConn.CursorLocation = adUseClient
SQLConn.Open SQLstr
If Not ReadData.EOF Then
SQLConn.Execute "INSERT INTO a (xID,xNAME) VALUES ('" & CStr(ReadData(0)) & "','" & CStr(ReadData(1)) & " ')", j
If j > 0 Then
SQL = True
Else
SQL = False
End If
Else
SQL = False
End If
Exit Function
ERR_SQL:
MsgBox Err.Number & Err.Description
SQL = False
End Function