0

vb.net で ArcMap-AddIn を作成しています。compactIWorkspace(mdb) にアクセスしようとするとエラーが発生しました。エラーは次のとおりです。

COM例外

コンピュータ '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 オブジェクトの使用が終了したときに、すべての COM オブジェクトを解放することが含まれます。

ESRI.ArcGIS.ADF.Connection.Local名前空間でComReleaser クラスを使用する

于 2012-11-22T15:36:29.340 に答える