0

我正在用 vb.net 编写 ArcMap-AddIn。尝试使用compactIWorkspace(mdb) 时出现错误,错误是:

异常

您试图打开一个数据库,该数据库已由计算机“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
4

1 回答 1

0

找到了解决方案:

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

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

对于个人地理数据库,目录中将有一个与.mdb同名的.ldb文件。

  • 如果您在地图中加载了地理数据库中的图层或表,则您将无法移除所有锁定。
  • 如果其他用户正在访问地理数据库,那么您将无法移除所有锁定。
  • 如果您使用 arcobjects 临时访问地理数据库,那么您需要使用良好的做法并在调用过程结束时关闭所有地理数据库资源。 这包括在您完成所有 COM 对象后释放它们。

使用ESRI.ArcGIS.ADF.Connection.Local命名空间中的ComReleaser 类

于 2012-11-22T15:36:29.340 回答