我哪里错了(COM+的应用是不是应该这样写)

mqmmx 2004-10-31 04:12:35
我写了一段代码,不知是错在哪里了,你能帮我指出吗?以下代码在网络正常时无误,但在其中一个连不上发生错误时执行了Abort事件没有回滚是为什么?

Option Explicit

Private 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.Connection

Private d As TransactionContext

Private ReadData As New ADODB.Recordset

Public 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 Function

Private 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 Function

Private 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
...全文
138 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
wsd309 2005-01-18
  • 打赏
  • 举报
回复
我试了,也不回滚,我也为此很着急,有没有高手相助啊。
mqmmx 2004-11-01
  • 打赏
  • 举报
回复
up
mqmmx 2004-10-31
  • 打赏
  • 举报
回复
我用F8调试是通过的。如果网络正常的话是没问题的。
我故意停掉一处的服务器,就是在d.Abort调用这句后为什么事务没有恢复成原来的样子,还是一个执行一个没执行。是不是光写成这样还不行,在组件服务中要设置些什么?
recollectpainer 2004-10-31
  • 打赏
  • 举报
回复
你可以用 F8 单步调试一下,看看窨是哪步没有照你预想的去执行

863

社区成员

发帖
与我相关
我的任务
社区描述
VB COM/DCOM/COM+
c++ 技术论坛(原bbs)
社区管理员
  • COM/DCOM/COM+社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧