You are currently offline, waiting for your internet to reconnect

ACC: "Object Invalid or No Longer Set" Error Using CurrentDb

This article was previously published under Q167173
Retired KB Content Disclaimer
This article was written about products for which Microsoft no longer offers support. Therefore, this article is offered "as is" and will no longer be updated.
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.
This article assumes that you are familiar with Visual Basic forApplications and with creating Microsoft Access applications using theprogramming tools provided with Microsoft Access. For more informationabout Visual Basic for Applications, please refer to your version of the"Building Applications with Microsoft Access" manual.
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
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 Microsoft Access and open the sample database Northwind.mdb.
  2. Create a module and type the following procedure:
          Sub CurrentDbSuccess()         Dim db As Database         Dim td As TableDef         Set db = CurrentDb()         Set td = db.TableDefs("Customers")         MsgBox td.Name      End 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 the Customers 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 Microsoft Access and open the sample database Northwind.mdb.
  2. Create a module and type the following procedure:
          Sub CurrentDbFail()         Dim td As TableDef         Set td = CurrentDb.TableDefs("Customers")         MsgBox td.Name      End Sub					
  3. To test this procedure, type the following line in the Debug window, and then press ENTER:
    CurrentDbFail
    Note that you receive the error "Object invalid or not set."
Properties

Article ID: 167173 - Last Review: 01/19/2007 23:09:07 - Revision: 3.3

  • Microsoft Access 95 Standard Edition
  • Microsoft Access 97 Standard Edition
  • kbprb kbprogramming KB167173
Feedback