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

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

   要记录操作日志就要说一下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];



联系电话:
020-00000000
联系电话:
020-00000000
联系电话:
020-12345678