Audit or History of Changes

Audit or History of Changes

Is this correct?

1. If I use a combination of getfieldname and getfieldvalues:
   a. Used in the ON LOAD or VALIDATE -  it is null
    b. Used in the ON SUCCESS - it returns the new value

2. The old. property only works in the VALIDATE 

Is there any way to marry these two, so I can build a routine that will store the original value of any field that is changed?