注意
并非所有提供者都支持事务。需验证提供者定义的属性 Transaction DDL 是否出现在 Connection 对象的 Properties 集合中,如果在则表示提供者支持事务。如果提供者不支持事务,调用其中的某个方法将返回错误。
BeginTrans、CommitTrans 和 RollbackTrans 方法在客户端 Connection 对象上无效。
并非所有提供者都支持事务。需验证提供者定义的属性 Transaction DDL 是否出现在 Connection 对象的 Properties 集合中,如果在则表示提供者支持事务。如果提供者不支持事务,调用其中的某个方法将返回错误。
BeginTrans、CommitTrans 和 RollbackTrans 方法在客户端 Connection 对象上无效。
Dim iRet As String
Dim ErrObj As New ErrObj
Dim bErrFound As Boolean
Dim Rules1 As New Recordset
Dim lngRow As Long, lngCol As Long
Dim SqlStr As String
On Error GoTo ErrHandle
CentConn.BeginTrans
SqlStr = "select fldGroupID,Ticket..tblSeatRule.fldRuleID,fldFirstRow,fldLastRow,fldFirstCol,fldLastCol,Ticket..tblTicketDetail.fldPrice,Ticket..tblTicketDetail.fldBrockerage " + _
" FROM Ticket..tblSeatRule,Ticket..tblTicketDetail" + _
" WHERE Ticket..tblTicketDetail.fldTicketID=" + QuoStr(Trim(ctxtTicketID)) + " AND" + _
" Ticket..tblTicketDetail.fldRuleID=Ticket..tblSeatRule.fldRuleID" + _
" ORDER BY Ticket..tblSeatRule.fldRuleID"
Rules1.Open SqlStr, CentConn, adOpenForwardOnly, adLockReadOnly
While Not Rules1.EOF
For lngRow = Rules1("fldFirstRow") To Rules1("fldLastRow")
For lngCol = Rules1("fldFirstCol") To Rules1("fldLastCol")
SqlStr = "Insert Ticket..tblTickets (" + _
"fldTicketID,fldRuleID,fldGroupID,fldRow," + _
"fldCol,fldPrice,fldBrockerage,fldStatus," + _
"fldActive,fldUpdateTime) VALUES " + _
" ( " + QuoStr(Trim(ctxtTicketID)) + "," + _
QuoStr(Rules1("fldRuleID")) + "," + _
QuoStr(Trim(Rules1("fldGroupID"))) + "," + _
CStr(lngRow) + "," + _
CStr(lngCol) + "," + _
CStr(Rules1("fldPrice")) + "," + _
CStr(Rules1("fldBrockerage")) + "," + _
"'1'," + _
"'1'," + _
"GETDATE())"
Debug.Print SqlStr
CentConn.Execute SqlStr
Next lngCol
Next lngRow
Rules1.MoveNext
Wend
Rules1.Close
CentConn.CommitTrans
On Error GoTo 0
这一句出错!第一次循环就出错!我发现,Rules1如果只有一条记录的话,不会出错,
Rules1如果有2条记录的话,就出错!WHY????
是这句话
Rules1.Open SqlStr, CentConn, adOpenForwardOnly, adLockReadOnly我换成
Rules1.Open SqlStr, CentConn, adOpenStatic, adLockReadOnly
就OK了!哈但我仍然不明白为什么?高手帮忙!!谢谢!