And the simple answer which is two lines of code is back in post #7.
Ensuring that the user push one of the buttons is a little more complicated. Now you have to have code in several events, plus you need a variable that gets set when the record is dirtied and unset when the record gets saved or the record gets canceled. But, we never got past the discussion on why you would not need to wrap a transaction inside of a transaction to change the way Access works to accomplish any of this so we don't know if the OP wants to take it to this level. Most people just want an easy way to cancel an update and it doesn't get any easier than Me.Undo.