> BEGIN TRANSACTION > llRollBack = .F. > IF NOT TableUpdate(0,.f.,"Table1") > llRollBack = .T. > ELSE > IF NOT TableUpdate(0,.f.,"Table2") > llRollback = .F. > ELSE > IF NOT TableUpdate(0, .F., "Table3) > llRollBack = .T. > ENDIF > ENDIF > ENDIF > IF llRollBack > ROLLBACK > ELSE > ENDTRANSACTION > ENDIF >After mulling over the problem for awhile, I decided my use of buffering was inappropriate. I was using table buffering to store error messages until after the transaction and then submitting them. Unfortunatelly, Fox decided to rollback the message even in the Table Buffer, so now I'm using just a plain old array to buffer the error messages until after the rollback/end transaction block. Other options are of course available, such as create cursor, but the array is nice because you don't have to worry about data types, etc.