IDatabaseCompact.Compact() в используемом IWorkspace

Я пишу ArcMap-AddIn с vb.net. Я получил ошибку при попытке compact мой IWorkspace(mdb), ошибка:

COMException

Вы попытались открыть базу данных, которая уже была открыта пользователем "ADMIN" на компьютере "XXXXXX". Попробуйте еще раз, когда база данных доступна.

На 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 ответ

Решение

Нашел решение:

Перед вызовом метода Compact() убедитесь, что в базе данных нет существующих блокировок.

Если это файловая база геоданных, откройте каталог gdb в проводнике Windows и найдите файлы типа LOCK, они заканчиваются на.lock.

Для персональной базы геоданных в каталоге будет файл .ldb с тем же именем, что и .mdb.

  • Если у вас есть слой или таблица из базы геоданных, загруженных на карту, вы не сможете удалить все блокировки.
  • Если другой пользователь обращается к базе геоданных, вы не сможете удалить все блокировки.
  • Если вы используете arcobjects для временного доступа к базе геоданных, вам нужно использовать передовые методы и закрыть все ресурсы базы геоданных, когда завершится вызывающий процесс. Это включает в себя освобождение всех объектов COM, когда вы закончите с ними.

Используйте класс ComReleaser в пространстве имен ESRI.ArcGIS.ADF.Connection.Local

Другие вопросы по тегам