是微软的错?Borland的错?还是我的错?(50分)

M

msc

Unregistered / Unconfirmed
GUEST, unregistred user!
使用Sql server 7,delphi5+adoupdate1+adoudpate2
有2个表 例为 t1,t2
t1 有2个字段 SID ,NO 均为int
t2 有2个字段 SID ,T1_NO 均为int T1_No为t1表中NO的外键
在t1设置 trigger
CREATE TRIGGER [del] ON [T1]
FOR DELETE
AS
delete t from t2 t,deleted d where t.no_1=d.no
使用ADOQUERY或ADOTABLE
如果t2没有数据,或t2中符合trigger条件的有1条以上数据,则无法进行删除操作,出现
”无法为更新行集定位:一些值可能已在最后读取后改变。“的错误。如果有1条记录符合条件则正常。

更奇怪的是用tdatabase+Tquery没有以上问题。









 
刚因这个问题得了90分,
明确跟你说是你的错.
正确如下:
CREATE TRIGGER [del] ON [T1]
FOR DELETE
AS
set nocount on
delete t from t2 t,deleted d where t.no_1=d.no
 
接受答案了.
 
msc兄,
不好意思,刚才结束问题太多了,看花眼[:)]
 
果然厉害,我给分,但能说说原因吗?为什么用tquery没有问题,而且这句是什么意思?
 
为什么如果有两条记录符合条件也会报错?为什么会报“无法为更新行集定位:一些值可能已在最后读取后改变“错误信息
 
是数据库的默认值在作怪,绑定控件自动更新时,数据库有些字段的默认值就更新到了数据库中,而绑定控件没有刷新造成以上错误。解决方法:去掉数据库中的默认值即可。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
956
SUNSTONE的Delphi笔记
S
S
回复
0
查看
779
SUNSTONE的Delphi笔记
S
I
回复
0
查看
613
import
I
顶部