其中insert into tblPeelScroll(ScrollBar,PeelDate,PeelMan)
values('123','0002','2005-12-07 11:21:27'); 这一句是错误的。他为什么没有回滚。是不是我自己要做判断。谢谢!!
cn.Open gConnstr
cn.BeginTrans
cn.Execute "IF exists(select ScrollBar from TblStorage where ScrollBar='0050905110050451562125203129')
begin
update TblStorage set Status=2 ,UpdateID='0001',UpdateTime='2005-12-07 11:21:27' where ScrollBar='0050905110050451562125203129';
insert into tblPeelScroll(ScrollBar,PeelDate,PeelMan)
values('123','0002','2005-12-07 11:21:27');
insert into tblScrollLog(ScrollBar,CodeID,ShelfID,WareHouseID,SAction,UserID,ActDate,UpdateID)
select ScrollBar,CodeID,ShelfID,WareHouseID,'2','0002',getdate(),'0001' from TblStorage where ScrollBar='123'
end "
cn.CommitTrans
9 个解决方案
#1
先进行错误处理,如果捕捉到错误,则控制事务,让它回滚
#2
cn.BeginTrans
On Error Goto upDateErr '<-----------设置错误陷阱
cn.Execute "IF exists(select ScrollBar from TblStorage where ScrollBar='0050905110050451562125203129')
begin
update TblStorage set Status=2 ,UpdateID='0001',UpdateTime='2005-12-07 11:21:27' where ScrollBar='0050905110050451562125203129';
insert into tblPeelScroll(ScrollBar,PeelDate,PeelMan)
values('123','0002','2005-12-07 11:21:27');
insert into tblScrollLog(ScrollBar,CodeID,ShelfID,WareHouseID,SAction,UserID,ActDate,UpdateID)
select ScrollBar,CodeID,ShelfID,WareHouseID,'2','0002',getdate(),'0001' from TblStorage where ScrollBar='123'
end "
cn.CommitTrans
Exit Sub
upDateErr:
cn.RollbackTrans '<------------如果有错误则回滚事务
On Error Goto upDateErr '<-----------设置错误陷阱
cn.Execute "IF exists(select ScrollBar from TblStorage where ScrollBar='0050905110050451562125203129')
begin
update TblStorage set Status=2 ,UpdateID='0001',UpdateTime='2005-12-07 11:21:27' where ScrollBar='0050905110050451562125203129';
insert into tblPeelScroll(ScrollBar,PeelDate,PeelMan)
values('123','0002','2005-12-07 11:21:27');
insert into tblScrollLog(ScrollBar,CodeID,ShelfID,WareHouseID,SAction,UserID,ActDate,UpdateID)
select ScrollBar,CodeID,ShelfID,WareHouseID,'2','0002',getdate(),'0001' from TblStorage where ScrollBar='123'
end "
cn.CommitTrans
Exit Sub
upDateErr:
cn.RollbackTrans '<------------如果有错误则回滚事务
#3
谢谢!faysky2() ( )
你的回答。
我在实际的代码中也加入的有On Error Goto upDateErr '<-----------设置错误陷阱
不过,我是在cn.BeginTrans前,我刚试过把错误陷阱放在cn.BeginTrans 后也是一样的可以执行成功,而没有回滚事务.
我这个一个Execute语句中,其实包含 一个判断,和三个Sql语句。其中第二个语句
insert into tblPeelScroll(ScrollBar,PeelDate,PeelMan)
values('123','0002','2005-12-07 11:21:27');
中的PeelDate和PeelMan的value我写反了。如果在查询分析器中执行。第一个和三个语句是可以执行的。但是第二个语句出现String or binary data would be truncated.
The statement has been terminated.的提示。
我现在用cn.BeginTrans ,不知是什么原因。事条没有回滚。谢谢指导!!
你的回答。
我在实际的代码中也加入的有On Error Goto upDateErr '<-----------设置错误陷阱
不过,我是在cn.BeginTrans前,我刚试过把错误陷阱放在cn.BeginTrans 后也是一样的可以执行成功,而没有回滚事务.
我这个一个Execute语句中,其实包含 一个判断,和三个Sql语句。其中第二个语句
insert into tblPeelScroll(ScrollBar,PeelDate,PeelMan)
values('123','0002','2005-12-07 11:21:27');
中的PeelDate和PeelMan的value我写反了。如果在查询分析器中执行。第一个和三个语句是可以执行的。但是第二个语句出现String or binary data would be truncated.
The statement has been terminated.的提示。
我现在用cn.BeginTrans ,不知是什么原因。事条没有回滚。谢谢指导!!
#4
......
Exit Sub
upDateErr:
cn.RollbackTrans '<------------如果有错误则回滚事务
MsgBox Err.Description '<----------------加这句测试看有没有产生错误
Exit Sub
upDateErr:
cn.RollbackTrans '<------------如果有错误则回滚事务
MsgBox Err.Description '<----------------加这句测试看有没有产生错误
#5
试试 cn.CursorLocation = adUseServer
也可以将语句拆开,分多次 cn.execute ...
因为执行的是系列语句,ado 可能处理不好。
也可以将语句拆开,分多次 cn.execute ...
因为执行的是系列语句,ado 可能处理不好。
#6
搞混了ado的事物处理,跟sql的事物处理
象你这样执行系列语句的,可以两种方法
1、要用ado的事物处理的话,就分开执行,每次执行单个语句,上面已经讲到很多了
2、用sql server的事物处理,在SQL语句中用事务就可以,ado就不用加事物处理了:
begin tran --开始事物
update ....--(单条语句)
if @@error <> 0 --捕获错误
rollback tran --回滚
....反复执行,每条语句如上错误处理
commit tran --没有错误,则提交事物
象你这样执行系列语句的,可以两种方法
1、要用ado的事物处理的话,就分开执行,每次执行单个语句,上面已经讲到很多了
2、用sql server的事物处理,在SQL语句中用事务就可以,ado就不用加事物处理了:
begin tran --开始事物
update ....--(单条语句)
if @@error <> 0 --捕获错误
rollback tran --回滚
....反复执行,每条语句如上错误处理
commit tran --没有错误,则提交事物
#7
ADO事务回滚一般都是没回滚的,在错误的操作都没撤消的
#8
ADO的回滚功能绝对没问题,你的问题在于字段内容被截断对ADO来讲不是错误,所以不会跳到陷阱里面去。
#9
谢谢大家的热心帮助。
我在查询分析器中执行下面的语句是
老是出现:
服务器: 消息 3902,级别 16,状态 1,行 20
COMMIT TRANSACTION 请求没有对应的 BEGIN TRANSACTION。
其中 insert into tblPeelScroll(ScrollBar,PeelDate,PeelMan)
values('123','0002','2005-12-07 11:21:27'); 是一个错误的语句。
begin tran myTran
IF exists(select ScrollBar from TblStorage where ScrollBar='000501040000000040450781100310')
begin
update TblStorage set Status=2 ,UpdateID='0001',UpdateTime='2005-12-07 11:21:27'
where ScrollBar='0050905110050451562125203129';
if @@error <> 0 rollback tran
insert into tblPeelScroll(ScrollBar,PeelDate,PeelMan)
values('123','0002','2005-12-07 11:21:27');
if @@error <> 0 rollback tran
insert into tblScrollLog(ScrollBar,CodeID,ShelfID,WareHouseID,SAction,UserID,ActDate,UpdateID)
select ScrollBar,CodeID,ShelfID,WareHouseID,'2','0002',getdate(),'0001' from TblStorage
where ScrollBar='123'
if @@error <> 0 rollback tran
end
commit tran
我在查询分析器中执行下面的语句是
老是出现:
服务器: 消息 3902,级别 16,状态 1,行 20
COMMIT TRANSACTION 请求没有对应的 BEGIN TRANSACTION。
其中 insert into tblPeelScroll(ScrollBar,PeelDate,PeelMan)
values('123','0002','2005-12-07 11:21:27'); 是一个错误的语句。
begin tran myTran
IF exists(select ScrollBar from TblStorage where ScrollBar='000501040000000040450781100310')
begin
update TblStorage set Status=2 ,UpdateID='0001',UpdateTime='2005-12-07 11:21:27'
where ScrollBar='0050905110050451562125203129';
if @@error <> 0 rollback tran
insert into tblPeelScroll(ScrollBar,PeelDate,PeelMan)
values('123','0002','2005-12-07 11:21:27');
if @@error <> 0 rollback tran
insert into tblScrollLog(ScrollBar,CodeID,ShelfID,WareHouseID,SAction,UserID,ActDate,UpdateID)
select ScrollBar,CodeID,ShelfID,WareHouseID,'2','0002',getdate(),'0001' from TblStorage
where ScrollBar='123'
if @@error <> 0 rollback tran
end
commit tran
#1
先进行错误处理,如果捕捉到错误,则控制事务,让它回滚
#2
cn.BeginTrans
On Error Goto upDateErr '<-----------设置错误陷阱
cn.Execute "IF exists(select ScrollBar from TblStorage where ScrollBar='0050905110050451562125203129')
begin
update TblStorage set Status=2 ,UpdateID='0001',UpdateTime='2005-12-07 11:21:27' where ScrollBar='0050905110050451562125203129';
insert into tblPeelScroll(ScrollBar,PeelDate,PeelMan)
values('123','0002','2005-12-07 11:21:27');
insert into tblScrollLog(ScrollBar,CodeID,ShelfID,WareHouseID,SAction,UserID,ActDate,UpdateID)
select ScrollBar,CodeID,ShelfID,WareHouseID,'2','0002',getdate(),'0001' from TblStorage where ScrollBar='123'
end "
cn.CommitTrans
Exit Sub
upDateErr:
cn.RollbackTrans '<------------如果有错误则回滚事务
On Error Goto upDateErr '<-----------设置错误陷阱
cn.Execute "IF exists(select ScrollBar from TblStorage where ScrollBar='0050905110050451562125203129')
begin
update TblStorage set Status=2 ,UpdateID='0001',UpdateTime='2005-12-07 11:21:27' where ScrollBar='0050905110050451562125203129';
insert into tblPeelScroll(ScrollBar,PeelDate,PeelMan)
values('123','0002','2005-12-07 11:21:27');
insert into tblScrollLog(ScrollBar,CodeID,ShelfID,WareHouseID,SAction,UserID,ActDate,UpdateID)
select ScrollBar,CodeID,ShelfID,WareHouseID,'2','0002',getdate(),'0001' from TblStorage where ScrollBar='123'
end "
cn.CommitTrans
Exit Sub
upDateErr:
cn.RollbackTrans '<------------如果有错误则回滚事务
#3
谢谢!faysky2() ( )
你的回答。
我在实际的代码中也加入的有On Error Goto upDateErr '<-----------设置错误陷阱
不过,我是在cn.BeginTrans前,我刚试过把错误陷阱放在cn.BeginTrans 后也是一样的可以执行成功,而没有回滚事务.
我这个一个Execute语句中,其实包含 一个判断,和三个Sql语句。其中第二个语句
insert into tblPeelScroll(ScrollBar,PeelDate,PeelMan)
values('123','0002','2005-12-07 11:21:27');
中的PeelDate和PeelMan的value我写反了。如果在查询分析器中执行。第一个和三个语句是可以执行的。但是第二个语句出现String or binary data would be truncated.
The statement has been terminated.的提示。
我现在用cn.BeginTrans ,不知是什么原因。事条没有回滚。谢谢指导!!
你的回答。
我在实际的代码中也加入的有On Error Goto upDateErr '<-----------设置错误陷阱
不过,我是在cn.BeginTrans前,我刚试过把错误陷阱放在cn.BeginTrans 后也是一样的可以执行成功,而没有回滚事务.
我这个一个Execute语句中,其实包含 一个判断,和三个Sql语句。其中第二个语句
insert into tblPeelScroll(ScrollBar,PeelDate,PeelMan)
values('123','0002','2005-12-07 11:21:27');
中的PeelDate和PeelMan的value我写反了。如果在查询分析器中执行。第一个和三个语句是可以执行的。但是第二个语句出现String or binary data would be truncated.
The statement has been terminated.的提示。
我现在用cn.BeginTrans ,不知是什么原因。事条没有回滚。谢谢指导!!
#4
......
Exit Sub
upDateErr:
cn.RollbackTrans '<------------如果有错误则回滚事务
MsgBox Err.Description '<----------------加这句测试看有没有产生错误
Exit Sub
upDateErr:
cn.RollbackTrans '<------------如果有错误则回滚事务
MsgBox Err.Description '<----------------加这句测试看有没有产生错误
#5
试试 cn.CursorLocation = adUseServer
也可以将语句拆开,分多次 cn.execute ...
因为执行的是系列语句,ado 可能处理不好。
也可以将语句拆开,分多次 cn.execute ...
因为执行的是系列语句,ado 可能处理不好。
#6
搞混了ado的事物处理,跟sql的事物处理
象你这样执行系列语句的,可以两种方法
1、要用ado的事物处理的话,就分开执行,每次执行单个语句,上面已经讲到很多了
2、用sql server的事物处理,在SQL语句中用事务就可以,ado就不用加事物处理了:
begin tran --开始事物
update ....--(单条语句)
if @@error <> 0 --捕获错误
rollback tran --回滚
....反复执行,每条语句如上错误处理
commit tran --没有错误,则提交事物
象你这样执行系列语句的,可以两种方法
1、要用ado的事物处理的话,就分开执行,每次执行单个语句,上面已经讲到很多了
2、用sql server的事物处理,在SQL语句中用事务就可以,ado就不用加事物处理了:
begin tran --开始事物
update ....--(单条语句)
if @@error <> 0 --捕获错误
rollback tran --回滚
....反复执行,每条语句如上错误处理
commit tran --没有错误,则提交事物
#7
ADO事务回滚一般都是没回滚的,在错误的操作都没撤消的
#8
ADO的回滚功能绝对没问题,你的问题在于字段内容被截断对ADO来讲不是错误,所以不会跳到陷阱里面去。
#9
谢谢大家的热心帮助。
我在查询分析器中执行下面的语句是
老是出现:
服务器: 消息 3902,级别 16,状态 1,行 20
COMMIT TRANSACTION 请求没有对应的 BEGIN TRANSACTION。
其中 insert into tblPeelScroll(ScrollBar,PeelDate,PeelMan)
values('123','0002','2005-12-07 11:21:27'); 是一个错误的语句。
begin tran myTran
IF exists(select ScrollBar from TblStorage where ScrollBar='000501040000000040450781100310')
begin
update TblStorage set Status=2 ,UpdateID='0001',UpdateTime='2005-12-07 11:21:27'
where ScrollBar='0050905110050451562125203129';
if @@error <> 0 rollback tran
insert into tblPeelScroll(ScrollBar,PeelDate,PeelMan)
values('123','0002','2005-12-07 11:21:27');
if @@error <> 0 rollback tran
insert into tblScrollLog(ScrollBar,CodeID,ShelfID,WareHouseID,SAction,UserID,ActDate,UpdateID)
select ScrollBar,CodeID,ShelfID,WareHouseID,'2','0002',getdate(),'0001' from TblStorage
where ScrollBar='123'
if @@error <> 0 rollback tran
end
commit tran
我在查询分析器中执行下面的语句是
老是出现:
服务器: 消息 3902,级别 16,状态 1,行 20
COMMIT TRANSACTION 请求没有对应的 BEGIN TRANSACTION。
其中 insert into tblPeelScroll(ScrollBar,PeelDate,PeelMan)
values('123','0002','2005-12-07 11:21:27'); 是一个错误的语句。
begin tran myTran
IF exists(select ScrollBar from TblStorage where ScrollBar='000501040000000040450781100310')
begin
update TblStorage set Status=2 ,UpdateID='0001',UpdateTime='2005-12-07 11:21:27'
where ScrollBar='0050905110050451562125203129';
if @@error <> 0 rollback tran
insert into tblPeelScroll(ScrollBar,PeelDate,PeelMan)
values('123','0002','2005-12-07 11:21:27');
if @@error <> 0 rollback tran
insert into tblScrollLog(ScrollBar,CodeID,ShelfID,WareHouseID,SAction,UserID,ActDate,UpdateID)
select ScrollBar,CodeID,ShelfID,WareHouseID,'2','0002',getdate(),'0001' from TblStorage
where ScrollBar='123'
if @@error <> 0 rollback tran
end
commit tran