D
delphi1234
Unregistered / Unconfirmed
GUEST, unregistred user!
我在做一个促销品组成时有这样一个问题.就是我从两个表中取到的数据都放在一个DXDBGRID中.由于系统要求,要在修改数据(当然应包括新增,删除和更新)时要检查两列(单品占促销品%--检查是否全部单品所占%是否相加为100,,单品数量---检查各单品数量是否>0)的数据是否合要求.我是把这两列的检查都放在触发器中检查,当我不用触发器时(也就是不检查),所有修改都能正常保存.而一旦使用触发器检查,则就会出现上述提示"无法为更新行集定位:一些值可能已在最后读取后改变".但是还是能正常保存.就问这提示一般是哪出了问题?应如何解决?我写的相应触发器代码如下:请问是否是触发器写错了?
CREATE TRIGGER Check_per_qty1 ON st_sp
FOR INSERT
AS
if @@rowcount>0
begin
declare @sum int
declare @qty int
declare @spcode char(10)
select @spcode=sp_code from inserted
select @sum=sum(per) from st_sp where sp_code=@spcode
if @sum<>100
begin
raiserror('促销品各组合的总和不等于100,请重新设定总和为100!',16,1)
return
end
select * from st_sp where (sp_code=@spcode) and (qty is null)
if @@rowcount>0
begin
raiserror('促销品中各单品的数量不能为空,请重新设定!',16,1)
return
end
end
在这我说明下:
1. 在我的表中绝对不存在重复的记录.
2.我在表中已建了唯一索引.
3.我采用的是使用事务提交方式.
4.我的这个程序是处于调试阶级,代码全放在一台机子上,所以不存在在运行时别人也修改了记录;
CREATE TRIGGER Check_per_qty1 ON st_sp
FOR INSERT
AS
if @@rowcount>0
begin
declare @sum int
declare @qty int
declare @spcode char(10)
select @spcode=sp_code from inserted
select @sum=sum(per) from st_sp where sp_code=@spcode
if @sum<>100
begin
raiserror('促销品各组合的总和不等于100,请重新设定总和为100!',16,1)
return
end
select * from st_sp where (sp_code=@spcode) and (qty is null)
if @@rowcount>0
begin
raiserror('促销品中各单品的数量不能为空,请重新设定!',16,1)
return
end
end
在这我说明下:
1. 在我的表中绝对不存在重复的记录.
2.我在表中已建了唯一索引.
3.我采用的是使用事务提交方式.
4.我的这个程序是处于调试阶级,代码全放在一台机子上,所以不存在在运行时别人也修改了记录;