You are currently offline, waiting for your internet to reconnect

ACC2000: "Object Invalid or No Longer Set" Error with CurrentDb

This article was previously published under Q200592
Moderate: Requires basic macro, coding, and interoperability skills.
SYMPTOMS
When you refer to properties and methods belonging to objects created withthe CurrentDb function, you may receive the following error message:
Object invalid or no longer set.
CAUSE
When you set an object variable, such as a TableDef object, which requiresa reference to a database object, your code refers directly to theCurrentDb function instead of referring to a database object variable thatyou set with the CurrentDb function.
RESOLUTION
Microsoft provides programming examples for illustration only, without warranty either expressed or implied. This includes, but is not limited to, the implied warranties of merchantability or fitness for a particular purpose. This article assumes that you are familiar with the programming language that is being demonstrated and with the tools that are used to create and to debug procedures. Microsoft support engineers can help explain the functionality of a particular procedure, but they will not modify these examples to provide added functionality or construct procedures to meet your specific requirements. NOTE: The sample code in this article uses Microsoft Data Access Objects. For this code to run properly, you must reference the Microsoft DAO 3.6 Object Library. To do so, click References on the Tools menu in the Visual Basic Editor, and make sure that the Microsoft DAO 3.6 Object Library check box is selected.

Create a database object variable in your code that refers to the CurrentDbfunction, rather than using the CurrentDb function directly in Setstatements to create other objects, as in the following example:
  1. Start Access and open the sample database Northwind.mdb.
  2. Create a module and type the following procedure:
    Sub CurrentDbSuccess()   Dim db As DAO.Database   Dim td As DAO.TableDef   Set db = CurrentDb()   Set td = db.TableDefs("Customers")   MsgBox td.NameEnd Sub					
  3. To test this procedure, type the following line in the Debug window, and then press ENTER:
    CurrentDbSuccess					
Note that you receive the message "Customers" indicating the name of theCustomers table.
MORE INFORMATION

Steps to Reproduce Behavior

The following example attempts to use the CurrentDb function to return apointer to the database that is currently open in Microsoft Access. Becausethe code does not assign that database to an object variable, the pointerreturned by the CurrentDb function is temporary and becomes invalid afterthe TableDef object is set. Consequently, any later references in your codeto the TableDef object variable will result in an error.
  1. Start Access and open the sample database Northwind.mdb.
  2. Create a module and type the following procedure:
    Sub CurrentDbFail()   Dim td As DAO.TableDef   Set td = CurrentDb.TableDefs("Customers")   MsgBox td.NameEnd Sub					
  3. To test this procedure, type the following line in the Immediate window, and then press ENTER:
    CurrentDbFail					
Note you receive the error described in the Symptoms section of this article
Properties

Article ID: 200592 - Last Review: 06/23/2005 23:22:00 - Revision: 2.0

  • Microsoft Access 2000 Standard Edition
  • kbprogramming kbprb KB200592
Feedback