I think youre best bet (because IIRC Access doesnt support transactions, and even if it did, in this case its a bad design), is to use a DataSet. If youre dataset has the original records, as you modify them the rows will change to changed or added or deleted. Then if you want things to be really easy, you just have a data adapter that has the correct UPDATE, DELETE, and INSERT commands and when theyre ready to save you do a DataAdapter.Update() method which will call the proper stored procedure for each row that has a state change. Prior to that anytime before they hit save they can cancel changes for a row or for everything (this is done by DataSet.RejectChanges()...) but any changes they have made up until that point will appear to the user to be saved because the dataset holds the current changes until they save to the database (the data adapter will do DataSet.AcceptChanges() when it is completed (successfully) doing the Update() method). DataSets are a perfect fit for this kind of issues - working with disconnected data and only updating the data store at a designated time.