ACC: "Object invalid or no longer set" Error Using CurrentDb

Last reviewed: August 29, 1997
Article ID: Q167173
The information in this article applies to:
  • Microsoft Access versions 7.0, 97

SYMPTOMS

Moderate: Requires basic macro, coding, and interoperability skills.

When you refer to properties and methods belonging to objects created with the 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 for Applications and with creating Microsoft Access applications using the programming tools provided with Microsoft Access. For more information about 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 requires a reference to a database object, your code refers directly to the CurrentDb function instead of referring to a database object variable that you set with the CurrentDb function.

RESOLUTION

Create a database object variable in your code that refers to the CurrentDb function, rather than using the CurrentDb function directly in Set statements 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 a pointer to the database that is currently open in Microsoft Access. Because the code does not assign that database to an object variable, the pointer returned by the CurrentDb function is temporary and becomes invalid after the TableDef object is set. Consequently, any later references in your code to 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."
    
Keywords          : kbprg SynRef
Version           : 7.0 97
Platform          : WINDOWS
Hardware          : x86
Issue type        : kbprb
Solution Type     : kbworkaround


================================================================================


THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY.

Last reviewed: August 29, 1997
© 1998 Microsoft Corporation. All rights reserved. Terms of Use.