After doing some research and a bit of experimenting-
You may be interested to know that transactions can be indeed done for bound forms. There's an
article at MSDN detailing how to do so. However, this won't just work with a linked subform.
Looking through other googles, it seems that one developer using a MySQL backend came up with an idea of using bound forms for navigating, and a custom procedure to "unbind" the form to allow for the editing or inserting new records. This is quite a brilliant solution that does not take lot of work a true unbound form would entail.
So I got the idea of creating a class to make transactions across linked subforms possible, but there is one more barrier I need to figure out. More often than not, a subform are usually viewed in continuous or datasheet view and for a good reason. It goes without saying that you can't have a unbound control on either view. At that point, I'm juggling between several ideas and am hoping others can give me advice on what would be probably the best solution.
Idea #1
Use a dummy table with set of dummy fields to act as a placeholder and bind the the subform to the dummy table. If I can figure out how to track what changes are made to data so I can send it off to the server for transactional processing, it would work. But how do I keep track of the changes? I'm afraid that using either an array or a custom collection will get too unwieldly especially if the user shuttles all over the fields.
Idea #2
Use a subform that shows only one active record from a read-only continuous/datasheet subform and log the changes into a transaction. This is probably most easiest on the developer (e.g. me), but I don't think my users will like being constrained to single record, especially if they want to update same type of values in different records quickly without having to clicking a button to select a record to be updated. Also, how would I update the read-only subform, when the transaction isn't complete?
Idea #3
Somehow similar to #1, except instead of using a dummy table that has no meaning at all, pull over the needed recordsets for each form, save it to a local cache (if possible. I'm not positive if this can be done and in which case, use local tables instead), and simply destroy the link between form and subform (mind, the user will not be allowed to move off the main form until the transaction is complete). I'm not sure, however, of the effects this will have on the performance and Access has a tendency to treat disconnected recordset as nonupdateable.
Questions:
1) I understand that Jet's transaction is not a true ACID-compliant transaction. I intend to use ODBCDirect Workspace to execute transactions. Will that mean it uses the server's transaction processing, not Jet, correct? I ask this because the help files is a bit fuzzy on that one point: Workspace is still a DAO object, and I am not clear whether Transaction methods are derived from Jet or from DAO and whether DBEngine object represents Jet or simply is a pointer to Jet.
2) Do you have any additional information on how caching are done? I would like to ensure local cache is used, and DAO seems to have some methods providing for such, but the documentation is sketchy.