我读别人的数据库,这个数据库表中的数据每分钟会有一条新数据写入,我把它读出来,计算,然后写进自己的数据库表中。上次问过,都只说使用触发器。
是指我在delphi中给用户的数据库中数据表中写入一个触发器,然后用户写入数据的时候触发吗?
那我这个触发器写在我的程序中的哪个地方?create里吗?那么我的程序要是关了,用户再添加数据还能触发吗?要是程序再启动,不是又创建了一个吗?
别的位置写哪里呢?

解决方案 »

  1.   

    不是可以写进去吗?
    with   adoquery1   do 
    begin 
        close; 
        sql.clear; 
        sql.text:= 'CREATE   TRIGGER   [TRIGGER   NAME]   ON   [dbo].[advice]   '+ 
                            'FOR   INSERT,   UPDATE,   DELETE   '+ 
                            'AS     sql '; 
        adoquery1.ExecSQL; 
    end; 
    ------- 
    那我如何实现我想要的呢,你们的回答我不是很理解
      

  2.   

    给你一个例子 
    if exists(select * from sysobjects where name='tr_cw_htsyk')
    drop trigger tr_cw_htsyk
    gocreate trigger tr_cw_htsyk on XS_HTSYK for insert,update
    as
    /************
    [版本号]1.0.0.0.0  
    [创建时间]2008.09.28  
    [描述]生成应收金额记录 
    [功能说明]  
    生成应收金额记录 
    **********/
    if @@rowcount<>1 return
    set nocount on

    declare @djh  ut_hth,
    @khbm  ut_khdm,
    @ysje ut_money,
    @czyh ut_czyh,
    @jlzt  ut_bz,
    @now ut_rq10
    select @now= convert(varchar(10),getdate(),121)if exists(select 1 from inserted)
    begin
    begin tran 
    select @djh=hth,@khbm=khmc,@ysje=htzje,@czyh=czyh from inserted 
    if exists(select 1 from CW_YSJEK where djh=@djh)
    begin
    update CW_YSJEK set ysje=c.ysje+a.htzje-isnull(b.htzje,0),wsje=wsje+a.htzje-isnull(b.htzje,0) 
    from inserted a,deleted b,CW_YSJEK c
    where a.hth*=b.hth and a.hth=c.djh and c.czyh=@czyh
    if @@error<>0
    begin
    select "F","更新CW_YSJEK数据出错"
    rollback tran
    return
    end
    end
    else
    begin
    insert into CW_YSJEK(djh,khdm,ysje,skje,wsje,yhje,czyh,gzbz,fgzbz,jlzt,czrq)
    values(@djh,@khbm,@ysje,0,@ysje,0,@czyh,0,0,0,@now)
    if @@error<>0
    begin
    select "F","插入数据到CW_YSJEK出错"
    rollback tran
    return
    end
    end
    commit tran 
    end
    else
    if exists(select 1 from deleted)
    begin
    begin tran
    select @djh=a.hth,@ysje=b.htzje from deleted a,inserted b where a.hth=b.hth
    if update(htzje) or update(jlzt) 
    begin
    update CW_YSJEK set ysje=@ysje,wsje = @ysje-skje-yhje where djh=@djh
    if @@error<>0
    begin
    select "F","更新CW_YSJEK数据出错"
    rollback tran
    return
    end
    end
    commit tran
    endreturn
    go
      

  3.   

    数据库触发器:你在对方的数据库里写一个触发器,触发器会由数据库管理,
    和你的应用程序没有半点关系。
    这个触发器的处罚类型应该是Insert,就是说当有数据插入的时候自动执行这个过程。
    你可以拦截到这个插入过程,可以修改其中的插入数据,....
    你在这个过程里,建立一个可以连接到你自己数据库的连接,把你的算法在触发器里实现,
    把数据写入到你的数据库中。
      

  4.   

    如果两个数据库在同一服务器上,就在你所说的别人的数据库里面的表上建立一个insert触发器,其他方式不建议这样使用