我读别人的数据库,这个数据库表中的数据每分钟会有一条新数据写入,我把它读出来,计算,然后写进自己的数据库表中。上次问过,都只说使用触发器。
是指我在delphi中给用户的数据库中数据表中写入一个触发器,然后用户写入数据的时候触发吗?
那我这个触发器写在我的程序中的哪个地方?create里吗?那么我的程序要是关了,用户再添加数据还能触发吗?要是程序再启动,不是又创建了一个吗?
别的位置写哪里呢?
是指我在delphi中给用户的数据库中数据表中写入一个触发器,然后用户写入数据的时候触发吗?
那我这个触发器写在我的程序中的哪个地方?create里吗?那么我的程序要是关了,用户再添加数据还能触发吗?要是程序再启动,不是又创建了一个吗?
别的位置写哪里呢?
解决方案 »
- delphi如何控制窗体显示位置?
- 送分100分:如何迅速的查看DELPHI6中各变量的值。
- 有一段string变量,内容结构与ini文件的结构一样,有没有方便的方法读出string的内容
- SakEmail接收新邮件的问题
- 两个ado查询.一个ADO已经更改了数据库,如何更新另一个已经打开的ADO查询
- 建立COM组件的大概步骤是怎样的?
- 如何汉化ExpressBars v4.2中的dxBarCustForm!急!!!!!
- 大侠们;我做的报表由于字段太多一行写不完,能不能写两行,怎么写?具体点!
- 关系数据库的录入问题
- 给我提供好书!!!
- delphi如何实现左右声道播放不同的MP3音乐,最好提供参考程序。
- sqlconnection+sqldataset如何彻底断开?
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;
-------
那我如何实现我想要的呢,你们的回答我不是很理解
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
和你的应用程序没有半点关系。
这个触发器的处罚类型应该是Insert,就是说当有数据插入的时候自动执行这个过程。
你可以拦截到这个插入过程,可以修改其中的插入数据,....
你在这个过程里,建立一个可以连接到你自己数据库的连接,把你的算法在触发器里实现,
把数据写入到你的数据库中。