Log in Updating event

What do you mean by duplicate a record? 

In OnUpdating event Aurelius gives you database column names and values, can't you just use those for the operations you want to perform?

I would like to create a copy of the record I am going to update containing the values ​​before the change. This is because I need to keep the history of all the changes made to the records of the entire application.

Again, can't you just use the column values provided by the event and do whatever you want?

You can get it directly from the entity being inserted:

var Cols: TDictionary<string, Variant>;
  Cols := TDictionary<string, Variant>.Create;
  TMappingExplorer.Default.GetColumnValues(Args.Entity, Cols, '');

Thanks for the tip!