使用的IWorkspace上的IDatabaseCompact.Compact()

时间:2012-11-20 09:07:39

标签: vb.net workspace arcmap arcobjects compact-database

我正在使用vb.net编写ArcMap-AddIn。尝试compact我的IWorkspace(mdb)时遇到错误,错误是:

  

收到COMException

     

您尝试打开已由用户打开的数据库   计算机'XXXXXX'上的'ADMIN'。数据库时再试一次   可用。

     

在ESRI.ArcGIS.Geodatabase.IDatabaseCompact.Compact()上   MyProject.MyClass.CompactGDB(IWorkspace pWS)

如何压缩使用的工作空间? 还有8个其他功能也使用了我的工作区。

有什么建议吗?

守则:

' 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

1 个答案:

答案 0 :(得分:0)

找到解决方案:

在调用Compact()方法之前,请确保数据库上没有任何现有锁

如果是文件地理数据库,请在Windows资源管理器中打开 gdb 目录并查找 LOCK 类型文件,它们以.lock结尾。

对于个人地理数据库,目录中会出现 .ldb 文件,其名称与 .mdb 相同。

  • 如果您在地图中加载了地理数据库中的图层或表格 然后你将无法删除所有锁。
  • 如果是其他用户 访问地理数据库,您将无法删除所有 锁。
  • 如果您使用arcobjects临时访问 地理数据库然后你需要使用良好的做法并关闭任何 调用进程结束时的地理数据库资源。 这包括 完成后释放所有COM对象。

使用 ESRI.ArcGIS.ADF.Connection.Local 命名空间

中的 ComReleaser Class