是这样的,有一个Review的表,当这个表里有新增记录,如果status='批准'后,则在应收款表AR
中产生一条记录,记录里要调用另一个主表Project里的相同ProjectNO的信息.全部有主键的,
为什么我在SQL企业管理器里,就可以正常,但如果是DELPHI里操作时,会报错呢?
错误为:"无法为更新定位行,一些值已经改变"高人帮分析一下,谢了,
CREATE TRIGGER [NewArPay] ON [dbo].[Review]
AFTER insert
AS
--SET NOCOUNT ON
if @@rowcount = 0 --如果影响的行数为 0,则结束触发器运行,避免占用资源
return
declare @name nvarchar(20)
select @name = ResultStatus from inserted if @name = '批准'
begin
Insert into AR(DueDate,ProjectNO,ClientID,ClientName,Type,Cost,Re)
select enddate,ProjectNO,clientid,clientname,'管理费',cost ,'系统自动生成' from Project
where status='申请中' and ProjectNO in (Select ProjectNO from Inserted )
end
go
中产生一条记录,记录里要调用另一个主表Project里的相同ProjectNO的信息.全部有主键的,
为什么我在SQL企业管理器里,就可以正常,但如果是DELPHI里操作时,会报错呢?
错误为:"无法为更新定位行,一些值已经改变"高人帮分析一下,谢了,
CREATE TRIGGER [NewArPay] ON [dbo].[Review]
AFTER insert
AS
--SET NOCOUNT ON
if @@rowcount = 0 --如果影响的行数为 0,则结束触发器运行,避免占用资源
return
declare @name nvarchar(20)
select @name = ResultStatus from inserted if @name = '批准'
begin
Insert into AR(DueDate,ProjectNO,ClientID,ClientName,Type,Cost,Re)
select enddate,ProjectNO,clientid,clientname,'管理费',cost ,'系统自动生成' from Project
where status='申请中' and ProjectNO in (Select ProjectNO from Inserted )
end
go
CREATE TRIGGER [NewArPay] ON [dbo].[Review]
AFTER insert
AS
--SET NOCOUNT ON
if @@rowcount = 0 --如果影响的行数为 0,则结束触发器运行,避免占用资源
return
begin
Insert into AR(DueDate,ProjectNO,ClientID,ClientName,Type,Cost,Re)
select enddate,ProjectNO,clientid,clientname,'管理费',cost ,'系统自动生成' from Project
where status='申请中' and ProjectNO in (Select ProjectNO from Inserted WHERE ResultStatus='批准')
end
go
if @@rowcount = 0 --如果影响的行数为 0,则结束触发器运行,避免占用资源
return--你这两句去掉试试
AFTER insert
AS
SET NOCOUNT ON -- 这里别注释掉
if @@rowcount = 0 --如果影响的行数为 0,则结束触发器运行,避免占用资源
return
-- declare @name nvarchar(20)
-- select @name = ResultStatus from inserted-- if @name = '批准'
-- begin
Insert into AR(DueDate,ProjectNO,ClientID,ClientName,Type,Cost,Re)
select enddate,ProjectNO,clientid,clientname,'管理费',cost ,'系统自动生成' from Project
where status='申请中' and ProjectNO in (Select ProjectNO from Inserted WHERE ResultStatus='批准')
-- end
go
SET NOCOUNT ON
其他的只是你写法有问题,顺便改下。
为什么我用SET NOCOUNT ON 后
AR表里没有生成记录?如果不用这个功能,就会报错,报错的位置在delphi程序里的位置是在adotable.post时发生?
如果仍有问题
建议在adocommand控件中用sql命令直接执行update,不要在dataset中用.update更新.