http://www.delphi2007.net/DelphiDB/html/delphi_20061222142245163.html
我想记录每个用户对每个表的修改都能记录到一个系统表里,请问应该如何实现呢?
最好可以记录到字段级的修改,对每次修改都记录初值及修改后的值。
我朋友说可以用触发器,但我感觉也不太对,因为触发器并不知道当前操作的用户,我还要记录当前修改是哪个用户
请兄弟们帮我看一下。谢谢啦。
你可以考虑在表中增加一个字段表示记录的当前状态;例如0表示正常可用;1表示被修改过,2表示被删除;另加一个字段表示操作人员;
这样在对表进行更新时不实际操作原记录,而是修改状态字段的值;而同时在表中新增一条记录
当然,新增的记录状态值为0;
db控件post 之前有oldvalue 和newvalue,你可以试试
比如那个的是。我为了简化事务处理把提交事务写在了一个函数里。
function TdmClient.commitUpdate(ADOCon:TADOConnection;DataSet:TCustomADODataSet): Integer;
var DataSetOld,DataSetNew:TCustomADODataSet;
begin
Result := 1;
try
DataSet.Connection := nil;
ADOCon.Close;
ADOCon.Open;
DataSet.Connection := adocon;
ADOCon.BeginTrans;
DataSet.UpdateBatch;
ADOCon.CommitTrans;
except
ADOCon.RollbackTrans;
Result := 0;
end;
end;
我还有一个想法就是在调用这个函数里,把旧的数据集从数据库中取出来然后进行更新,
然后把两个DataSet进行比较,检查出修改和删除或新增的记录,期待楼下朋友的帮助。