Question: I want to make a form the essentially creates an invoice, but using some other related data as inputs or limits; In the process of adding items to the invoice, I need to reduce the items in another table. Since the user will enter several items at a time, I'd like to issue a "START TRANSACTION" when the form loads, and then do a "COMMIT" when the form updates. Thus, if they cancel the form, the other related tables (shown via subforms) would roll back to the previous values.

Answer: 
Can't be done using bound forms. You could use temporary tables to store the data and then update the main tables. A bit of a kludge but I've done that in the past.

See the [TempTables.MDB page at my website](http://www.granite.ab.ca/access/temptables.htm) which illustrates how to use a temporary MDB in your app.
Yes it can be done, to take control over the transaction in the form you need use this code:

```

Private Sub Form_Open(Cancel As Integer)
    Set Me.Recordset = CurrentDb.OpenRecordset("NAME_OF_YOUR_TABLE_OR_QUERY")
End Sub

```

After that, you can use DBEngine to control the transaction.

It work for me (Im using Access 2007)

Note: If you insert a new record using the form interface it is visible when the Form\_AfterInsert event is raised, therefore you can use DbEngine.Rollback in that event to undo the changes.