CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VB >  数据库(包含打印,安装,报表)

事务中执行了三个SQL语句,其中的一个执行语句失败,事务为什么没有回滚。语句如下.

楼主James_ht(顺风飞扬)2005-12-21 09:17:10 在 VB / 数据库(包含打印,安装,报表) 提问

事务中执行了三个SQL语句,其中的一个执行语句失败,事务为什么没有回滚。语句如下.      
  其中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 问题点数:20、回复次数:9Top

1 楼faysky2(出来混,迟早是要还嘀)回复于 2005-12-21 09:28:49 得分 2

先进行错误处理,如果捕捉到错误,则控制事务,让它回滚Top

2 楼faysky2(出来混,迟早是要还嘀)回复于 2005-12-21 09:32:24 得分 3

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   '<------------如果有错误则回滚事务  
  Top

3 楼James_ht(顺风飞扬)回复于 2005-12-21 13:14:55 得分 0

谢谢!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     ,不知是什么原因。事条没有回滚。谢谢指导!!  
  Top

4 楼faysky2(出来混,迟早是要还嘀)回复于 2005-12-21 13:41:54 得分 3

......  
  Exit   Sub  
  upDateErr:  
  cn.RollbackTrans   '<------------如果有错误则回滚事务  
  MsgBox   Err.Description   '<----------------加这句测试看有没有产生错误Top

5 楼fxy_2002(阿勇)回复于 2005-12-21 14:43:39 得分 3

试试   cn.CursorLocation   =   adUseServer    
   
  也可以将语句拆开,分多次   cn.execute   ...  
  因为执行的是系列语句,ado   可能处理不好。  
  Top

6 楼fuxc(Michael(继续迷茫))回复于 2005-12-21 16:26:54 得分 5

搞混了ado的事物处理,跟sql的事物处理  
   
  象你这样执行系列语句的,可以两种方法  
  1、要用ado的事物处理的话,就分开执行,每次执行单个语句,上面已经讲到很多了  
  2、用sql   server的事物处理,在SQL语句中用事务就可以,ado就不用加事物处理了:  
   
  begin   tran   --开始事物  
  update   ....--(单条语句)  
  if   @@error   <>   0   --捕获错误  
  rollback   tran   --回滚  
  ....反复执行,每条语句如上错误处理  
  commit   tran   --没有错误,则提交事物  
  Top

7 楼whachun(jakly)回复于 2005-12-21 17:20:12 得分 2

ADO事务回滚一般都是没回滚的,在错误的操作都没撤消的Top

8 楼province_(雍昊)回复于 2005-12-21 18:56:25 得分 2

ADO的回滚功能绝对没问题,你的问题在于字段内容被截断对ADO来讲不是错误,所以不会跳到陷阱里面去。Top

9 楼James_ht(顺风飞扬)回复于 2005-12-22 11:15:33 得分 0

谢谢大家的热心帮助。  
  我在查询分析器中执行下面的语句是  
  老是出现:  
  服务器:   消息   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   tranTop

相关问题

  • 如何使用sql语句实现事务复制?
  • ACCESS 事务处理 和表锁定的SQL语句
  • php下如何实现对sql语句的事务提交!!
  • 事务回滚时,怎么使有的Sql语句不被rollback?
  • 事务回滚时,怎么使有的Sql语句不被rollback?
  • Give me a hand:在?.asp文件中有一些storedproc和一些用sql语句提交的过程,怎样用事务处理实现同时提交,同时失败?
  • 在程序中(ado)用sql语句创建dbf表,为什么总是失败??
  • 当"connect using sql;"语句失败后,如何屏弊掉ODBC配置窗口
  • 使用CDaoDataBase::Execute()函数执行SQL语句失败,请问为什么?
  • 如何使用sql语句获得查询失败的出错信息

关键词

  • 语句
  • 执行
  • scrollbar
  • 事务
  • codeid
  • peelman
  • peeldate
  • shelfid
  • tblpeelscroll
  • warehouseid

得分解答快速导航

  • 帖主:James_ht
  • faysky2
  • faysky2
  • faysky2
  • fxy_2002
  • fuxc
  • whachun
  • province_

相关链接

  • Visual Basic类图书
  • Visual Basic类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo