触发器引起不能保存数据 ( 积分: 100 )

  • 主题发起人 主题发起人 xbwang
  • 开始时间 开始时间
X

xbwang

Unregistered / Unconfirmed
GUEST, unregistred user!
我在使用三层结构时,发现一个问题请教各位:
1、三层结构设计,CLIENTDATASET设置了ReconcileError
2、被更新的表有INSERT、UPDATE触发器,因为要通过表间计算一部分字段值更新回被更新的表中
3、原设计是在客户端计算后保存,现将此部分通过触发器完成,结果不能保存数据,错误信息是表正在被其他人更改。
 
我在使用三层结构时,发现一个问题请教各位:
1、三层结构设计,CLIENTDATASET设置了ReconcileError
2、被更新的表有INSERT、UPDATE触发器,因为要通过表间计算一部分字段值更新回被更新的表中
3、原设计是在客户端计算后保存,现将此部分通过触发器完成,结果不能保存数据,错误信息是表正在被其他人更改。
 
怎么啦?我在等待。SQL 的触发器引起CLIENTDATASET设置了ReconcileError错误呀!你们是如何解决的,求教!!!!!
 
呵呵。这个问题我也是碰到的。一句话:没有结果集的数据更新就会出现这样的问题。
举个例子吧:
在触发器内有这样一句话 update table set field='ddd' where 1=0 (表示查询条件使结果集为空)
上面的语句在后台触发运行是没有问题的。但在前台连接触发就会出现上面的错误。
解决方法:
if exists(select top 1 * from table where 1=0)
update table set field='ddd' where 1=0

插入,更新,删除都会出现这样的问题。
注:问题这样是搞定了,但我总是觉得很烦,我在考虑是不是ADO或是前台其它控件的问题。
 
不行,保存数据是通过clientdataset自动建立的update语句实现的,clientdataset产生了一个事物用于锁定其更新数据时没有其他人在更新同一记录,可恰恰这样引起不能用SQL触发器进行部字段的计算。应该是有什么控制可以将数据库本身的触发器作为clientdataset的内部更新事务的一部分就好了。

 
试试在触发器里
开头加上
Set NoCount On
最后再加上
Set NoCount Off
 
不行呀!还是不能解决。
试过修改了相关字段ProviderFlags为pfInUpdate,主索引字段为pfInUpdate,pfInWhere,pfInKey,Provider属性设为upWhereKeyOnly,仍然不行。强调:在我使用三层,没有在MS SQL数据端加触发器时程序正常,加后出现被其他人修改现象,因为记录修改时会触发一个历程计算一个字段的值,当然这个字段是不可被在客户端修改的,他也不是索引字段。另外,我是使用master/detail形式的表更新。
 
用SQL方式更新
 
后退
顶部