Account Options

  1. Sign in
The old Google Groups will be going away soon, but your browser is incompatible with the new version.
Google Groups Home
« Groups Home
Message from discussion Acc2000: Database in unexpected state
The group you are posting to is a Usenet group. Messages posted to this group will make your email address visible to anyone on the Internet.
Your reply message has not been sent.
Your post was successful
 
From:
To:
Cc:
Followup To:
Add Cc | Add Followup-to | Edit Subject
Subject:
Validation:
For verification purposes please type the characters you see in the picture below or the numbers you hear by clicking the accessibility icon. Listen and type the numbers you hear
 
Frank Miller  
View profile  
 More options Oct 8 2001, 6:14 pm
Newsgroups: microsoft.public.access.conversion
From: Frank-NoSpam-Mil...@microsoft.com (Frank Miller)
Date: Mon, 08 Oct 2001 22:09:33 GMT
Local: Mon, Oct 8 2001 6:09 pm
Subject: RE: Acc2000: Database in unexpected state
Hi Marcel,

My name is Frank Miller. Thank you for using the Microsoft Access
Newsgroups.

Simply opening the database file would not corrupt it unless the file was
being opened in another application such as Word, which would definitely
corrupt the database.

When opening a database in the Access user interface, if we receive the
error...

"The database is in an unexpected state. Microsoft Access can't open it.
This database has been converted from a prior version of MS Access by using
the DAO compact database method instead of the convert database command on
the tools menu (database utilities sub menu). This has left the database in
a partially converted state. If you have a copy of the database in its
original format, use the convert database command on the tools menu
(database utilities submenu) to convert it."

..we may not be able to convert the database. This message is usually due
to some corruption that has occurred in the database's project (forms,
reports, macros, modules).

To address this issue we should use standard corruption troubleshooting to
see if the problem can be corrected. However, more than likely, all
attempts to recover it will fail with the same error. In some cases, you
can recover the Jet database objects (tables and queries) by creating a new
database and using DAO code to bring the objects over. Even though you
cannot save the project items, at least the user may be able to recover
their data and queries. To use this technique, follow these steps:

1. Make a backup copy of the original database.

2. Start Microsoft Access.

3. Create a new, blank database.

4. Press ALT+F11 or on the Insert menu, click Module to launch the Visual
Basic Editor in a separate window, and will create a new module for you.

5. On the Tools menu, click References. This will display a References
dialog box.

6. Scroll down through the list, and check the box next to "Microsoft DAO
3.6 Object Library".

7. Click OK to close the References dialog box.

8. Copy and paste the following code into the new module that is open on
the screen:

Sub RecoverCorruptDB()
        Dim dbCorrupt As DAO.Database
        Dim dbCurrent As DAO.Database
        Dim td As DAO.TableDef
        Dim tdNew As DAO.TableDef
        Dim fld As DAO.Field
        Dim fldNew As DAO.Field
        Dim ind As DAO.Index
        Dim indNew As DAO.Index
        Dim qd As DAO.QueryDef
        Dim qdNew As DAO.QueryDef
        Dim strDBPath As String
        Dim strQry As String

'Replace the path below to the path of the corrupted database

        strDBPath = "C:\My Documents\Appraisals.mdb"
        On Error Resume Next
        Set dbCurrent = CurrentDb
        Set dbCorrupt = OpenDatabase(strDBPath)
        For Each td In dbCorrupt.TableDefs
                If Left(td.Name, 4) <> "MSys" Then
                    strQry = "SELECT * INTO [" & td.Name & "] FROM [" & td.Name &
"] IN '" & dbCorrupt.Name & "'"
                    dbCurrent.Execute strQry, dbFailOnError
                    dbCurrent.TableDefs.Refresh
                    Set tdNew = dbCurrent.TableDefs(td.Name)

'Recreate the indexes on the table

                    For Each ind In td.Indexes
                        Set indNew = tdNew.CreateIndex(ind.Name)
                        For Each fld In ind.Fields
                            Set fldNew = indNew.CreateField(fld.Name)
                            indNew.Fields.Append fldNew
                        Next
                        indNew.Primary = ind.Primary
                        indNew.Unique = ind.Unique
                        indNew.IgnoreNulls = ind.IgnoreNulls
                        tdNew.Indexes.Append indNew
                        tdNew.Indexes.Refresh
                    Next
                End If
        Next

'Recreate the queries

        For Each qd In dbCorrupt.QueryDefs
                If Left(qd.Name, 4) <> "~sq_" Then
                    Set qdNew = dbCurrent.CreateQueryDef(qd.Name, qd.SQL)
                End If
        Next
        dbCorrupt.Close
        Application.RefreshDatabaseWindow

        MsgBox "Procedure Complete."
End Sub

This code should import all tables and queries from the damaged database
into the current database. Note that this solution does not take secured
databases into effect, so additional code to create workspaces, etc may be
needed if the database has been secured.

I hope this helps! If you have additional questions on this topic, please
reply to this posting.

Regards, Frank Miller
Microsoft Support

This posting is provided "AS IS" with no warranties, and confers no rights.
You assume all risk for your use. © 2001 Microsoft Corporation. All rights
reserved.


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.