ACC1x: Opening Objects in Transactions Can Cause RollbackLast reviewed: June 8, 1997Article ID: Q96906 |
The information in this article applies to:
SYMPTOMSThe following error message is displayed while attempting to open a second occurrence of a database object (such as a table, dynaset, or form) in a transaction:
Invalid database object CAUSEThis error message results from a new occurrence of a database object overwriting a previous occurrence of a database object, which "orphans" the first object (that is, the first object's pointer to the database is destroyed). When Microsoft Access detects that an object is orphaned, it attempts to close it. Because the object is in a transaction, however, the close fails, and therefore Microsoft Access rolls back all levels of nested transactions so that the close succeeds. This implicit rollback causes all objects opened in transactions to be closed. As a result, any reference to an object closed by this process results in the "Invalid database object" error message.
RESOLUTIONThis problem occurs only when objects are implicitly closed (by the process mentioned above), and does not occur when the object is explicitly closed in a transaction. Thus, the keys to avoiding this problem are:
STATUSMicrosoft has confirmed this to be a problem in Microsoft Access version 1.0 and 1.1. This problem no longer occurs in Microsoft Access version 2.0.
MORE INFORMATION
Steps to Reproduce ProblemCreate and run the following procedures:
Sub Sub1() Dim db As Database, tb As Table Set db = CurrentDB() BeginTrans Set tb = db.OpenTable("table1") 'Table opened in transaction Call Sub2 Debug.Print tb.recordcount 'Result: "! Invalid database 'object." tb.Close CommitTrans db.Close End Sub Sub Sub2() Dim d as Database Set d = CurrentDB() End Sub 'd loses scope, does implicit rollback and close of db. |
Additional query words: AB ABC Engine
© 1998 Microsoft Corporation. All rights reserved. Terms of Use. |