关于多层结构主从表问题:为何我用了触发器就ApplyUpdate不了?分数不够可以再加!!(250分)

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

gravel

Unregistered / Unconfirmed
GUEST, unregistred user!
当删除主表的数据是,我用了触发器(ms sql7数据库后台):
CREATE TRIGGER [DeleteDetail] ON [MasterT]
FOR DELETE
AS
Declare @ID varchar(22)
Select @ID=CID from Deleted
delete DetailT1
where CID=@ID
delete DetailT2
where CID=@BaseID
但我删除主表的数据时,ApplyUpdate时,老是出错,但如果我直接在Query Analyzer执行
删除操作,一切正常,说明触发器没错。但就是不知道在程序里为什么不行?
BTW:如何得到数据库后台返回的错误的代码?并根据这些代码,知道什么地方出错?
分数不够可以再加!!
 
经我试验,好像只要把调用applyupdate的参数设置大一点,就没问题了。我试验时设了20。
可能是因为你用了触发器,导致更新结果与预期不同,即出错。如果不允许错误,就无法真正更新。
数据库应该是没有错的。
 
是否使用了叠代的触发器.
有3个系统存储过程,可以显示有关触发器的信息:
1.sp_help trigger_name 显示触发器的所有者和创建时间;
2.sp_helptext trigger_name 显示触发器的源代码;
3.sp_depends trigger_name 显示触发器参考的对象清单;
你可以试试!
 
我也有过这样的经验,可能daiqingbo说的对,导致更新结果与预期不同而不让你更新,
你说:但如果我直接在Query Analyzer执行删除操作,一切正常。
这说明与你的数据库,触发器没有关系,问题出在程序上,我以前的解决方法是
这样的:
在主表的DatasetProvide的BeforUpdateRecord的事件上自己写删除从表的操作,
先判断是否主表执行了删除操作
procedure TCadreBaseSituSer.CadreBaseTAPBeforeUpdateRecord(Sender: TObject;
SourceDS: TDataSet;
DeltaDS: TClientDataSet;
UpdateKind: TUpdateKind;
var Applied: Boolean);
begin
if (SourceDs.Name=主表的名称)and
(UpdateKind=ukDelete) then
begin
执行删除从表的存储过程。
end;
end;

现在我一直用着用方法处理主从表的删除操作。你参考一下。
 
试过很多此,我也说不清楚,试试xujiancai的方法吧!
如果成功把分都给你!
 
第一个问题已解决,有人帮我就俄正问题么:
如何得到数据库后台返回的错误的代码?并根据这些代码,知道什么地方出错?
 
你可以在后台跟踪一下,方法应该是有的。
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
928
SUNSTONE的Delphi笔记
S
后退
顶部