我写了一段代码,不知是错在哪里了,你能帮我指出吗?以下代码在网络正常时无误,但在其中一个连不上发生错误时执行了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
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
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
解决方案 »
- VB如果定义动态数组?
- 实在想不出来了,所以请高手帮我解决这个问题!!!
- 100分再开一贴问
- 请问怎么设置MDI的子窗口在父窗口的位置?
- 二百分求,VB程序中一条select语句的提速与优化方法!!
- 怎么用代码新画一个控件?
- 能不能将ADODC控件中的RECORE SOURCE(SQL语句)在程序里实现。
- 我自己做的项目能卖出去吗?
- ASP难道只能使用VBSCRIPT和JSCRIPT来开发吗?有没有C/C++的解释器?
- Data 控件问题, Text与Data连接以后, 只要调用Form, 或进行添加修改后, Text就显视第一条记录, 如何避免?
- 用vb6自带打包工具出现了问题!
- 哪位老大用过CheckDlgButton这个API的进来指点一下
我故意停掉一处的服务器,就是在d.Abort调用这句后为什么事务没有恢复成原来的样子,还是一个执行一个没执行。是不是光写成这样还不行,在组件服务中要设置些什么?