设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 2888|回复: 6
打印 上一主题 下一主题

关于触发器的执行错误(急)

[复制链接]
跳转到指定楼层
1#
发表于 2003-6-25 08:50:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
执行触发器后出现如下错误:“键列信息不足或不正确,更新影响到更多的行”,但数据实际已删除,请高手指点.
触发器如下:
Alter Trigger 主表_Delete
On dbo.主表
For Delete
As
    Delete From 从表 Where ID = (Select ID From Deleted)

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2003-7-31 17:07:00 | 只看该作者
我想问题可能是出在最后的Where ID = (Select ID From Deleted)? 试着从deleted表中选定一个确定的ID值试试看。
3#
发表于 2003-9-19 00:12:00 | 只看该作者
我重新看了一下这个问题,其问题所在并不是由于触发器程序有什么不对,而是返回值作的怪。更奇怪的是,如果我在access中打开这个表,制造出触发情形,出现这个提示以后,如果想把光标移动到另外的纪录,就会出现另一个提示,说数据已经被另外用户修改。

如果加上SET NOCOUNT OFF,ACCESS中就不会出现这个提示了。

另外,即使没有这个set nocount off,在Access中如果用DOCMD.RUNSQL去执行一个删除作业,也不会出现这个提示,(窗体上不要有控件直接绑定到表)。还有,如果在SQL服务器上(企业管理器或查询分析器)直接操作,也不会出现这个提示。

个人认为是access对sql server返回值的错误分析,是access项目的一个bug。

因此,可以判定这个信息的出现,不是什么错误,加上set nocount off后,可以放心使用。
4#
发表于 2003-9-22 17:55:00 | 只看该作者
Alter Trigger 主表_Delete
On dbo.主表
For Delete
As
begin
   set nocount off
    Delete From 从表 Where ID  in (Select ID From Deleted)
  set nocount on
end
5#
发表于 2004-2-17 18:00:00 | 只看该作者
看过楼主的这个问题之后,我有点肯定我遇到的相同的问题并不是语法上的错误,而是AccessXP的BUG。

因为该触发器在打了补丁的SQL SERVER中运行没问题,access2003中也没问题,只是AccessXP中运行有问题
6#
发表于 2004-4-18 21:12:00 | 只看该作者
嘿嘿,我不懂SQL 2000和ADP,但我用过VB+ADO+第三方控件,你的错误的对话框,很可能是因为数据集没有主键造成的。也就是说,表和数据集中一定非要有一个主键不可。插入数据是非要有主键的(这个我也不知道为什么?)

但我用VB+ADO+第三方控件的时间太短了,实在是对这些理解不多。

而且还有一点,没有主键造成的错误是很奇怪的,有时它能正常工作,但有时它就不能正常工作,最初,我还以为系统出问题了,也是急得要死。
7#
发表于 2004-4-18 21:12:00 | 只看该作者
后来加上主键后,什么错误也没有了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-26 21:37 , Processed in 0.080619 second(s), 30 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表