您的位置:首页 > 编程语言 > Delphi

Delphi xe10 FireDac 之 如何生成操作日志

2016-12-01 17:06 357 查看
      在开发软件中,记录软件的操作日志 是很有必要的,一来可以查找错误,二来可以优化性能,三来呢 要是碰到客户死活不承认这样操作,说你们软件又问题,打开数据库一查日志。。。。

    要记录操作日志就要说一下FireDac 数据集的 delta ,这个对象中存储值数据的变化,在默认情况下 只有新增和修改的变化,没的删除的,需要FilterChanges的数据设置成

 FDMemTable2.FilterChanges := [rtModified, rtInserted, rtDeleted, rtUnmodified];



  

部分源码 :  

procedure TForm1.btn1Click(Sender: TObject);
var
strlog: string;
i: Integer;
begin
FDMemTable2.Close;
FDMemTable2.FilterChanges := [rtModified, rtInserted, rtDeleted, rtUnmodified];
// FDMemTable2.FilterChanges 要包含rtDeleted 才能看到删除数据,默认没有rtDeleted
FDMemTable2.Data := FDMemTable1.Delta;

with FDMemTable2 do
begin
First;
while not Eof do
//for 循环数据集的列 即可以记录操作日志,在系统中 记录操作人 操作了什么是很有必要的一个功能
begin
if UpdateStatus = usModified then
begin
Strlog := 'update: ';
for I := 0 to FieldCount - 1 do
begin
if Fields[i].Value <> Fields[i].OldValue then
Strlog := Strlog + Format('列:%s[旧值:%s > 新值:%s] ', [Fields[i].FieldName, Fields[i].OldValue, Fields[i].Value]);
end;
mmo1.Lines.Add(strlog);
end
else if UpdateStatus = usInserted then
begin
Strlog := 'insert: ';
for I := 0 to FieldCount - 1 do
begin
Strlog := Strlog + Format('列:%s[值:%s] ', [Fields[i].FieldName, Fields[i].Value]);
end;
mmo1.Lines.Add(strlog);
end
else if UpdateStatus = usDeleted then
begin
Strlog := 'delete: ';
for I := 0 to FieldCount - 1 do
begin
Strlog := Strlog + Format('列:%s[值:%s] ', [Fields[i].FieldName, Fields[i].Value]);
end;
mmo1.Lines.Add(strlog);
end;
Next;
end;

end;

end;

注意:

  FDMemTable1.CachedUpdates:=True;


  FDMemTable2.FilterChanges := [rtModified, rtInserted, rtDeleted, rtUnmodified];



全部源码 我已经上传到 :

http://download.csdn.net/detail/u013051638/9699098



Q群 Delphi Home 235236282,欢迎delphi 爱好者加入,一起学习、进步。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息