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