Question

I am writting an ArcMap-AddIn with vb.net. I got an error when trying to compact my IWorkspace(mdb), the error is:

COMException

You tried to open a database, which was already opened by the user 'ADMIN' on Computer 'XXXXXX'. Try it again when the database is available.

On ESRI.ArcGIS.Geodatabase.IDatabaseCompact.Compact() on MyProject.MyClass.CompactGDB(IWorkspace pWS)

How can i compact the used workspace? There are 8 other functions which also used my workspace.

Any suggestions?

The Code:

' CompactGDB
    Public Sub CompactGDB(ByVal pWS As IWorkspace)

        Dim pDatabaseCompact As IDatabaseCompact
        If (TypeOf pWS Is IDatabaseCompact) Then
            pDatabaseCompact = CType(pWS, IDatabaseCompact)
            If (pDatabaseCompact.CanCompact) Then
                Try
                    pDatabaseCompact.Compact()
                Catch ex As Exception
                    MessageBox.Show(ex.type & ex.Message & ex.StackTrace, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
                End Try    
            End If
        End If    
    End Sub
Was it helpful?

Solution

Found the solution:

Before calling the Compact() method make sure there are not any existing locks on the database.

If it is a file geodatabase then open the gdb directory in Windows Explorer and look for LOCK type files, they end in .lock.

For personal geodatabase there will be a .ldb file in the directory with the same name as the .mdb.

  • If you have a layer or table from the geodatabase loaded in the map then you will not be able to remove all locks.
  • If another user is accessing the geodatabase then you will not be able to remove all locks.
  • If you are using arcobjects to temporarily access the geodatabase then you need to use good practices and close any geodatabase resources when the calling process ends. This includes releasing all COM objects when you are finished with them.

Use the ComReleaser Class in ESRI.ArcGIS.ADF.Connection.Local namespace

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top