DELPHI 数据保存的触发器问题(50分)

  • 主题发起人 主题发起人 jxj
  • 开始时间 开始时间
J

jxj

Unregistered / Unconfirmed
GUEST, unregistred user!
数据库:sql7
目的修改时用金额更新:应收金额、应付金额
CREATE TRIGGER [update] ON [t_chargmx]
FOR UPDATE
AS
if update(金额) or update(收付类别) begin
Update updateed set 应收金额=金额 ,应付金额=0 where 收付类别='应收'
Update updateed set 应收金额=0 ,应付金额=金额 where 收付类别='应付'
end

问题:修改金额或收付类别保存记录时出错。
错误信息:Insufficient on incorrect key column
information ;too many rows affect by update.
 
sorry!
'updateed' 应为 ‘t_chargmx'.
 
after each row
 
您的栏位是汉字的吗?
我用SQL6.5写过这类TRIGGER ,没问题呀?
CREATE TRIGGER dbo.Adjusting1TriggerIU ON dbo.AdjustingC
FOR INSERT, UPDATE AS
declare @adjustAmt money
declare @NadjustAmt money
declare @custNo char(8)
declare @adjustNo char(8)
declare @adjustType char(4)
declare @status char(1)
declare @compNochar(4)
declare @balance money
IF UPDATE(status)
begin
select @adjustNo=adjustNo,@custNo=A.custNo,
@adjustAmt=adjustAmt,@status=A.status,
@compNo=A.compNo,@balance=balance,@adjustType=adjustType
from INSERTED A,customerData C
where A.custNo=C.custNo

if @status='y' and @compNo<>'0000'
begin
select @NadjustAmt=@adjustAmt*(-1.00)
if @adjustType='立帐'
begin
update customerData
set balance=balance+@adjustAmt
where custNo=@custNo
Insert into AccountingRep
values('01',@adjustNo,@custNo,getDate(),@adjustAmt,@balance+@adjustAmt,getdate() )
end
else
begin
update customerData
set balance=balance+@NadjustAmt
where custNo=@custNo
Insert into AccountingRep values('01',@adjustNo,@custNo,getDate(),@adjustAmt,@balance+@NadjustAmt,getdate() )
end
end
end
 
我的栏位是汉字的。
 
保存时触发,后台数据库已经修改,但前台出错
 
当update了多条记录时,有这种情况出现
好象在sql里面不象oracle有for each row这个东东的
 
<delphi技术内幕>中page400有一条说明,不知道是否对你有帮助:
"不能在一个活动的索引上使用trigger,delphi不知道触发器运行了。
替代方案是使用TIBEventAlerter或者使用存储过程。"

供你参考。
 
mbobo:我只修改了一条记录。
 
附加功能 将问题提前
 
jxj:如果还想接着讨论请定期提前自己的帖子,如果不想继续讨论请结束帖子。
 
我觉得您的触发器没有问题。??
或许加点东西试试:
CREATE TRIGGER [update] ON [t_chargmx]
FOR UPDATE
AS
if update(金额) or update(收付类别)
begin
Update t_chargmx set 应收金额=金额 ,应付金额=0 where 收付类别='应收' <u>and 金额 in(select 金额 from inserted)</u>
Update t_chargmx set 应收金额=0 ,应付金额=金额 where 收付类别='应付' <u>and 金额 in(select 金额 from inserted)</u>
end
 
多人接受答案了。
 
后退
顶部