我现在做了个程序,需要向数据库中作添加、删除、更改的操作!
现在需要做事务回滚处理,在对数据库进行操作之前加上了“Conn400.BeginTrans”其中“Conn400”是一个CONNECTION,和一个如果正确处理了就可以“Conn400.CommitTrans”;还有一个如果错误就“Conn400.RollbackTrans”;
可是,当数据处理遇到错误后程序能正确的运行“Conn400.RollbackTrans”条语句,但到数据库中却发现它并没有被回滚;
因为,在程序处理数据库之前,数据库里没有数据是空的,当程序处理到了错误的数据后本应该做一个回滚操作的,但出现错误并执行了“Conn400.RollbackTrans”后数据库确有报错前被处理的记录!
现在需要做事务回滚处理,在对数据库进行操作之前加上了“Conn400.BeginTrans”其中“Conn400”是一个CONNECTION,和一个如果正确处理了就可以“Conn400.CommitTrans”;还有一个如果错误就“Conn400.RollbackTrans”;
可是,当数据处理遇到错误后程序能正确的运行“Conn400.RollbackTrans”条语句,但到数据库中却发现它并没有被回滚;
因为,在程序处理数据库之前,数据库里没有数据是空的,当程序处理到了错误的数据后本应该做一个回滚操作的,但出现错误并执行了“Conn400.RollbackTrans”后数据库确有报错前被处理的记录!
Public Function Exsql(ParamArray sql()) As Boolean
'事务执行1个sql语句
Dim cnConn As ADODB.Connection
Set cnConn = New ADODB.Connection
Dim mysql
On Error GoTo err1 cnConn.Open CN
cnConn.BeginTrans '开始一个事务
For Each mysql In sql
cnConn.Execute mysql
Next
cnConn.CommitTrans '提交一个事物
Set cnConn = Nothing
Exsql = True
Exit Function
err1:
cnConn.RollbackTrans '回滚一个事物
Exsql = False
End Function
DoEvents
Set RecordSQL = New Recordset
sSelectSQL = "Select * From " & sTableSQL
Set RecordSQL = MyConn.Execute(SelectSQL)
DoEvents
RecordSQL.MoveFirst
Set Record400 = New Recordset
With Record400
.CursorType = adOpenDynamic 'adOpenStatic
.LockType = adLockPessimistic ' adLockOptimistic
sSelect400 = "Select " & sTable400 & ".* From " & sTable400
.Open sSelect400, Conn400
End With Conn400.BeginTrans
DoEvents
sMySelect = "Select * From FieldName Where TableName='" & sTableSQL & "'"
Set MyRecord = MyConn.Execute(sMySelect) Do While (Not (RecordSQL.EOF Or RecordSQL.BOF))
DoEvents
Record400.AddNew
MyRecord.MoveFirst
Do While (Not (MyRecord.EOF Or MyRecord.BOF))
tFieldSQL = Trim(MyRecord("FieldName"))
tField400 = Trim(MyRecord("RmtFName"))
Record400(tField400) = RTrim(RecordSQL(tFieldSQL))
MyRecord.MoveNext
Loop
Record400.Update
RecordSQL.MoveNext
Loop
Conn400.CommitTrans
Set RecordSQL = Nothing
Set Record400 = Nothing
NextRecord:
NextExit FunctionErrorLine: Select Case Err.Number
Case Else
Err.Clear
Conn400.RollbackTrans
GoTo NextRecord
End Select
Resume Next
End Function
直接拼成sql语句 如"insert"
然后调用我的方法
dim sql as string,sqll as string
sql="insert into aaa values('1','2')"
sqll="insert into aaa values('4','3')"
exsql(sql,sqll)
'事务执行1个sql语句
Dim cnConn As ADODB.Connection
Set cnConn = New ADODB.Connection
Dim mysql
On Error GoTo err1 cnConn.Open CN
cnConn.BeginTrans '开始一个事务
For Each mysql In sql
cnConn.Execute mysql
Next
cnConn.CommitTrans '提交一个事物
Set cnConn = Nothing
Exsql = True
Exit Function
err1:
cnConn.RollbackTrans '回滚一个事物
Exsql = False
End Function