一个古怪的问题(100分)

  • 主题发起人 主题发起人 GuangQingYang
  • 开始时间 开始时间
G

GuangQingYang

Unregistered / Unconfirmed
GUEST, unregistred user!
我现在在学习使用SQL SERVER 7.0 ,我为一个做试验的表创建了一个很简单的update触发器
代码如下:
create trigger tes_onupdate on tes for update as
raiserror('the table can't be modify',16,1)
rollback tran
return

然后在Delphi 5.0中拖放一个TTable 和 Tdatasource 以及一个Tdbgrid 对表tes进行修改
结果报告错误信息大体如下:

产生SQL 错误
rollback transaction 没有相应的begin transaction 与之对应。

为什么会出现这种错误?难道更新触发器中不允许使用rollback tran?不会吧?

 
不可以!
至少ORACLE是这样.
 
调用UPDATE时,SQL用以下形式:
begin tran XXXX
update .....
commit tran
 
我敲F1看了有关T-SQL的帮助,有在更新触发器中使用Rollback的例子。
不过如果这样真的不可以,那我想请教在后台如何用命令撤消用户的更
新操作?
 
我是在Delphi5提供的Tdbgrid中修改数据的。我是不是应该重新编写一个Tdataset类,重载
它的post方法?我去试试,如果行,立刻为eyes4加分。
 
帮助里说一进入trigger就会自动begin trans的,你在trigger里加一句print @@trancount
就可以看出来。我试了一下没有报错啊,你再说说你的详细操作步骤吧。
 
dq 说得对,我觉得应该不会错,也许是我在windows95下装的sql server7.0 不能支持
事务处理吧,我在nt下用,也没有出错。
 
不是windows95下装的sql server7.0 不能支持事务处理,而是你应该在外面启动事务,
用 try 捕获 Trigger 中的 RaiseError ,然后 RollBack。
Trigger 中 RollBack 应该是对于 Transaction-Point 而言的,具体的语法不太记得了,
就是 RollBack 到某一个 Transaction-Point。
 
多人接受答案了。
 
后退
顶部