在开发软件中,记录软件的操作日志 是很有必要的,一来可以查找错误,二来可以优化性能,三来呢 要是碰到客户死活不承认这样操作,说你们软件又问题,打开数据库一查日志。。。。
要记录操作日志就要说一下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 爱好者加入,一起学习、进步。