为什么一个事务会莫名其妙的丢失?(200分)

  • 主题发起人 主题发起人 benlei
  • 开始时间 开始时间
B

benlei

Unregistered / Unconfirmed
GUEST, unregistred user!
有如下一段Delphi代码:
。。。
1。开始事务;
2。进行一些数据库操作(如修改删除等);
3。在数据库中为数据表创建一个索引;
4。3中在MS SQL 2000中该表并存在或要创建索引的字段并不存在,目的是故意引发一个错误。
5。在3中我们捕获这个错误,并可以不做任何处理;
6。提交事务。
。。。
但是。在6进行提交的时候,会出现事务不存在的提示!
这是为什么呢?是BDE的问题么?
望那位大虾能够说说原因!另送100分!
 
有些异常情况并不好判断,你最好还是把程序帖出来。
 
在第四步骤之前 判断一下事物的情况 好像是 inTrancection 属性
判断当前是不是在一个事物当中
在第四步骤之后在判断一次,看看是不是错误把事物吃掉了。
 
TO 荷塘新月:
不管出现什么异常,一个开始的事务不应该丢失吧!因为我都把它捕获了!
TO expect:已经判断了InTrancation了,我其实就是要问事务怎么被“吃了”的!
 
不知道 事物当中 可否有 ddl
你把引发错误的方式改为 dml 试验一下
 
to expect:
都试过了,不行的
期待答案!
 
3。在数据库中为数据表创建一个索引;
这是一个DDL操作,操作完成后会隐式执行一个事务提交命令,所以你在第6步就报错了。
ORACLE中是这样的,不知SQL中是不是也一样处理。
 
注意,不管你DDL操作有没有成功,事务提交操作都执行了的,所以你的事务会“丢失”。[:D]
 
多人接受答案了。
 
后退
顶部