是这样的,有一个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

解决方案 »

  1.   


    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
      

  2.   


    if @@rowcount = 0 --如果影响的行数为 0,则结束触发器运行,避免占用资源
          return--你这两句去掉试试
      

  3.   

    delphi調試時用跟蹤器profiler看看語句是么樣執行的,管理器里可以執行,說明觸發器沒問題啊
      

  4.   

    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 WHERE ResultStatus='批准')
    --           end
    go
      

  5.   

    关键在
    SET   NOCOUNT   ON    
    其他的只是你写法有问题,顺便改下。
      

  6.   


    为什么我用SET   NOCOUNT   ON 后
    AR表里没有生成记录?如果不用这个功能,就会报错,报错的位置在delphi程序里的位置是在adotable.post时发生?
      

  7.   

    估计是5楼所说的set nocount on 的问题
    如果仍有问题
    建议在adocommand控件中用sql命令直接执行update,不要在dataset中用.update更新.