是这样子的,上个星期,公司的系统出错(都是修改了资料的时候,进行保存,然后出错的,图片不知道怎么发上来,如果需要的话,可以找我要,我的QQ是:315562107)
,根据提示是说更新表有问题,然后我跟踪了一下程序出错执行的语句,和没有出错执行的语句,发现两个的差别是,出错的时候,没有提交事务,事务进行了回滚,但是整个MSSQL语句是没有问题的。
  出错的之后,如果退出程序,再登录,再重新操作,这样子重复三四次之后,又可以保存了。还有个问题就是,如果一旦出现错误,不管操作其他什么功能,反正是保存资料都会提示出错,真是头疼啊,都搞了两个星期了,一点问题都没查得出来,差点要血崩了~

解决方案 »

  1.   


    程序是用dephi开发的,但是同样的程序,我用回9月8号的数据库,却不会出错啊,所以一直都是在数据库里面找问题
      

  2.   


    事务回滚的那一句什么都没判断,只判断了一下,有事务就回滚,IF @@TRANCOUNT > 0 ROLLBACK TRAN,搞不懂程序为什么要回滚事务而不提交。而且提示的是更新表出错。
    没有出错的时候,事务都是提交的。
      

  3.   

    更新表出错,那你看看更新的是哪个表,更新的数据是什么,数据类型和数据表里的数据类型是不是一致,更新的话,会不会违反主/外键的设置,表中有没有check约束,有没有触发器,这些东西,只要有一件通不过,就会回滚.
    其中,更新表时,数据类型不对而出错的几率较大.
      

  4.   

    建议楼主检查程序出错当时的系统记录的日志。点我的电脑,事件管理里看一下。或者直接跟踪事物产生的SQL.
      

  5.   

    不同的就是 出错的时候是IF @@TRANCOUNT > 0 ROLLBACK TRAN这条语句,没错的时候是IF @@TRANCOUNT > 0 COMMIT TRAN这条语句,其他的前面代码都是一样的,我对比过。
      

  6.   


    你想,DBMS 会自动把前台送过来的 IF @@TRANCOUNT > 0 COMMIT TRAN 改成 IF @@TRANCOUNT > 0 ROLLBACK TRAN 吗?
      

  7.   


     用 dbcc readerrorlog 查看过错误日志了,但是无发现有咩问题
      

  8.   

    SQL语句已经跟踪过的,日志也查过了,没有发现有什么错误信息
      

  9.   


    什么意思?我跟踪到SQL的代码是有使用到隔离级别,有个Read commit 和 read uncommit。这个影响有多大?
      

  10.   

    我的猜测是当前数据库的 某些数据导致了程序的崩溃 而这正是这个程序的bug
    解决的办法是:
    1.对比数据库(主要是流水表 经常产生新的数据的表等)
    2.找到了这些表后 做数据的分析 删除一些可疑的数据 来查找当前数据库中导致程序出错的因素
    3.分析这些数据 不能修改程序 那么就禁止数据库产生类似导致程序出错的数据因素
    (如约束等)
      

  11.   


    呃。。你的想法和我现在的想法是一样,现在也是在做这样子的测试,但是数据库里面的表的关联比较复杂,这样子做,比较花时间,我现在是后台直接delete一些表的数据,不知道这样子能否可行。
      

  12.   


    检查是什么样的数据可能会产生回滚(还是不相信数据库会有什么问题,如果有问题,以前的数据都无法插入)如果能找到,在表中加一个instead of触发器,看看是否有用.
      

  13.   


    你可以做这样的测试:不用你的那个系统,而直接在数据库中进行处理.首先看看9月9号有些什么数据,再估计一下程序调用用的什么样的插入语句,然后用类似的插入语句在SSMS里直接插入,如果能插入,那就是程序的问题,如果同样会出问题,那就是数据库的问题.
      

  14.   

    这个方法我试过,程序执行出错的时候,我把跟踪到的数据库语句直接在数据库里面执行是没有问题的,所以我一直搞不明白,为什么程序会提示update 表出错这个提示,我之前也说了,程序出错和不出错,执行的SQL语句的差别就是一个不提交事务,一个提交事情,按理来说,这两种情况都是没错的,实在搞不懂程序为什么会提示更新表出错,也跟踪不到,程序凭什么提示这个错误。好郁闷。
      

  15.   

    可以肯定,这是程序问题,数据库的不同,只是诱因。比较二个数据库的数据,看看在哪有什么不一样的地方,然后根据出错的地方,查看相关的表,看看里边的数据有什么不一样的。并且查看数据的关联。Delphi程序如果是在程序里包含了事务,那就根据它处理的数据进行关联查找数据。
    不过,这种系统架构似乎应当退出历史舞台了。
      

  16.   


    反汇编还没试过,公司没有dephi的开发人员,所以现在都是把目标放到数据库上。
      

  17.   


    这个很早就试过了,跟踪出来的语句,在查询分析器里面执行是没有问题的,程序现在是因为回滚了事务,所以提示更新表错误(我现在觉得这个update表错误的提示,并不是语法上的错误,而是业务上的错误提示来的因为那张表是保存所有数量的总和的。)。