2012-11-20 40 views
0

我正在用vb.net寫一個ArcMap-AddIn。試圖compact我IWorkspace(MDB)時,我得到了一個錯誤,該錯誤是:在使用的IWorkspace上的IDatabaseCompact.Compact()

收到COMException

您試圖打開一個數據庫,這是已經被用戶 「ADMIN」的計算機打開「 XXXXXX」。當數據庫是 可用時再試一次。

論 MyProject.MyClass.CompactGDB ESRI.ArcGIS.Geodatabase.IDatabaseCompact.Compact()(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 

回答

0

找到了解決辦法:

之前調用compact()方法確保不會有對數據庫的任何現有的鎖

如果是文件地理然後在Windows資源管理器中打開GDB目錄下,尋找LOCK類型的文件,他們結束.lock。

對於個人地理數據庫會有一個.LDB文件中的目錄具有相同名稱作爲的.mdb

  • 如果您在地圖 中加載的地理數據庫有一個圖層或表格,那麼您將無法刪除所有鎖定。
  • 如果另一個用戶是 訪問地理數據庫,那麼您將無法刪除所有的 鎖。
  • 如果要使用arcobjects臨時訪問 地理數據庫,那麼當調用進程結束時,您需要使用良好的做法並關閉任何地理數據庫資源。 這包括 當你完成它們時釋放所有的COM對象。

使用ComReleaser ClassESRI.ArcGIS.ADF.Connection.Local命名空間