数据保存(50分)

  • 主题发起人 主题发起人 jxj
  • 开始时间 开始时间
我的数据库中一个表有50多个字段,
 
,客户需求是将每个字段的每一次修改都要进行
 
保存到‘修改内容记录表’结构为:
字段 原值 新值 修改日期 修改人
 
对不起各位,我只能这样提问,如果放在一起,
 
总是提示找不到该页。分开就好了,什么原因?
 
写个触发器如何?
 
不懂你说什么:(
 
你用什么数据库,可不可以用AUDIT的方式进行检测呢?
 
sql7.比如:字段一的原值为‘abc',修改后为'abcd'。
 
那么程序要在’修改内容记录表’
 
添加一条记录:'字段一'、'ABC','ABCD','JXJ','2000-01-01 15:45'
 
CREATE OR REPLACE TRIGGER AddUpdateRecord BEFORE UPDATE ON SourceTable(源表名)
FOR EACH ROW
BEGIN
{
假设 SourceTable 有 A,B,C 三个字段
}
If :new.A<>:old.A Then --如果会有空值的话请先判断一下 ,Ok?
Insert Into 修改内容记录表(字段,原值,新值,修改日期,修改人)
Values ('A',:old.A,:new.A,SysDate,'Not me');
End If;

If :new.B<>:old.B Then
Insert Into 修改内容记录表(字段,原值,新值,修改日期,修改人)
Values ('B',:old.B,:new.B,SysDate,'You');
End If;

If :new.C<>:old.C Then
Insert Into 修改内容记录表(字段,原值,新值,修改日期,修改人)
Values ('C',:old.C,:new.C,SysDate,'She');
End If;
END;
/
 
Sailan:
触发器虽好,但你也得看实际需要呀!请问"修改人"一项,你数据库自己怎么知道?
jxj:
我认为还是要在程序中写代码较好.建立两个数组,再一两个循环即可.
 
我的思路:
1.用CachedUpdates
2.BeforePost中比较OldValue和NewValue
3.使用FieldCount可以历编所有字段进行比较,精简代码.
 
While Not Eof Do
Begin
1.检查纪录是否已修改?
If 修改 Then
Begin
将修改的纪录添加到你的库中;
修改纪录计数
End
Next;
End;
 
对不起,忘了提到一点,插入修改人时用 User 即可
 
要检查记录是否真正被修改了
比较困难
Edit->Post未变
 
agree with Sailan
 
后退
顶部