| Обсуждение |
| Записи в таблице [ marat ]Воскресенье, 2 сентября 2007, 09:34
Проблема с удалением записей из таблицы не привязанных к
обектам на карте не зактрыта.
Первый путь решения из ответа на форуме:
http://www.objectland.ru/support/forum/256/
не решает проблемы для уже существующих карт,
а второй требует написания приложения програмистом.
Так как я не програмист и возможностей у меня (и не только у меня)
таких нет, есть просьба:
Если кто нибудь уже написал такое приложение поделитесь с народом.
Если нет то просьба написать. (Как я понимаю ничего сильно сложного в плане логики выполнения нет)
Заранее спасибо.
P.S. Просьба не только к службе поддержки. |
|
| [ ObjectLand Support ]Понедельник, 3 сентября 2007, 13:11
Т.е. Вам необходимо выполнить операцию для таблицы, которая связана с более чем одним типом объектов? |
|
| Удаление мусора из таблицы [ Максим Юрьевич Трухачёв ]Понедельник, 3 сентября 2007, 14:12
Марат, попробуйте сделать вот как. Скопируйте через буфер обмена нижеприведённый текст в пустой (новый) текстовый файл с любым именем, сохраните файл, закройте его и задайте ему расширение ".vbs". После этого в "Проводнике" просто дважды кликните этот файл - он запустится на выполнение. О результатах сообщите здесь или мне на email: batmax(=@=)mail.ru
Вот текст, который вам надо скопировать в файл:
Dim objGDBEngine ' Ядро ObjectLand.
Dim objGDB ' ГБД.
Dim objGDBTable ' Таблица ГБД.
Dim objGDBRecordset ' Получаемый набор записей.
Dim objGDBMap ' Карта.
Dim objGDBLayer ' Слой карты.
Dim objGDBFeatureType ' Тип геометрии слоя.
Dim objGDBFeatureset ' Получаемый набор геометрий.
Dim KeepThis
Dim strGDBPath ' Путь и имя файла ГБД.
' Установка имени и пути к ГБД.
strGDBPath = inputbox ("Введите полное имя файла ГБД (включая полный путь, но БЕЗ расширения .gdb)", "Ввод имени ГБД", "")
' Создание ядра ObjectLand.
Set objGDBEngine = WScript.CreateObject("GDBEngine.Application")
' Открытие ГБД с именем, определенным переменной strGDBPath,
' и атрибутами "Монопольно", "Чтение/Запись", "Без файла изменений".
Set objGDB = objGDBEngine.OpenGDB(strGDBPath, 8, "", "", "")
' Установка имени таблицы.
TABLE_NAME = inputbox ("Введите название таблицы", "Ввод названия таблицы", "")
' Получение таблицы из коллекции GeoDatabase::Tables.
Set objGDBTable = objGDB.Tables(TABLE_NAME)
' Открытие набора записей для заданной таблицы.
Set objGDBRecordset = objGDBTable.OpenRecordset
Do
KeepThis=0
for i=1 to objGDB.Maps.Count
' Получение карты из коллекции GeoDatabase::Maps.
Set objGDBMap = objGDB.Maps(i)
for j=1 to objGDBMap.Layers.Count
' Получение слоя из коллекции Map::Layers.
Set objGDBLayer = objGDBMap.Layers(j)
for k=1 to objGDBLayer.FeatureTypes.Count
' Получение типа геометрии из коллекции Layer::FeatureTypes.
Set objGDBFeatureType = objGDBLayer.FeatureTypes(k)
' Получение набора геометрий для текущей записи.
Set objGDBFeatureset = objGDBRecordset.OpenFeatureset(objGDBFeatureType, 1) 'gdbScopeCurrentRecord
' Проверка присутствия геометрий в наборе.
If objGDBFeatureset.FeatureCount > 0 Then
KeepThis=KeepThis+1
End If
Next
Next
Next
If KeepThis=0 then
objGDBRecordset.Delete
Else
objGDBRecordset.MoveNext
End If
Loop Until objGDBRecordset.EOF
' Закрытие ГБД.
objGDBEngine.Close
' Освобождение ядра ObjectLand.
Set objGDBEngine = Nothing
MsgBox "Усё готово!" |
|
| Записи в таблице [ marat ]Понедельник, 3 сентября 2007, 16:52
Спасибо, что откликнулись.
Все сделал как Вы сказали:
1.Полный путь
2.Название таблицы
и тут...
Сообщение:
Сценарий: c:\028.vbs
Строка: 48
Символ: 1
Ошибка: Таблица не присоединена к типу геометрии
Код: 80040FC2
Источник: GDBEngine.GDBRecordset
Немного не понятно.
Карта обычная которая используется в ПК ЕГРЗ-Т, таблица MDKK System Table. |
|
| [ Максим ]Понедельник, 3 сентября 2007, 17:57
|
| [ Максим ]Понедельник, 3 сентября 2007, 18:46
Dim objGDBEngine ' Ядро ObjectLand.
Dim objGDB ' ГБД.
Dim objGDBTable ' Таблица ГБД.
Dim objGDBRecordset ' Получаемый набор записей.
Dim objGDBMap ' Карта.
Dim objGDBLayer ' Слой карты.
Dim objGDBFeatureType ' Тип геометрии слоя.
Dim objGDBFeatureset ' Получаемый набор геометрий.
Dim objGDBDataLink ' Связь типа геометрий с таблицей.
Dim isLinked
Dim KeepThis
Dim strGDBPath ' Путь и имя файла ГБД.
' Установка имени и пути к ГБД.
strGDBPath = inputbox ("Введите полное имя файла ГБД (включая полный путь, но БЕЗ расширения .gdb)", "Ввод имени ГБД", "")
' Создание ядра ObjectLand.
Set objGDBEngine = WScript.CreateObject("GDBEngine.Application")
' Открытие ГБД с именем, определенным переменной strGDBPath,
' и атрибутами "Монопольно", "Чтение/Запись", "Без файла изменений".
Set objGDB = objGDBEngine.OpenGDB(strGDBPath, 8, "", "", "")
' Установка имени таблицы.
TABLE_NAME = inputbox ("Введите название таблицы", "Ввод названия таблицы", "")
' Получение таблицы из коллекции GeoDatabase::Tables.
Set objGDBTable = objGDB.Tables(TABLE_NAME)
' Открытие набора записей для заданной таблицы.
Set objGDBRecordset = objGDBTable.OpenRecordset
Do
KeepThis = False
for i=1 to objGDB.Maps.Count
' Получение карты из коллекции GeoDatabase::Maps.
Set objGDBMap = objGDB.Maps(i)
for j=1 to objGDBMap.Layers.Count
' Получение слоя из коллекции Map::Layers.
Set objGDBLayer = objGDBMap.Layers(j)
for k=1 to objGDBLayer.FeatureTypes.Count
' Получение типа геометрии из коллекции Layer::FeatureTypes.
Set objGDBFeatureType = objGDBLayer.FeatureTypes(k)
isLinked = False
For m=1 to objGDBFeatureType.DataLinks.count
Set objGDBDataLink = objGDBFeatureType.DataLinks.item(m)
if objGDBDataLink.Table.Name = TABLE_NAME then
isLinked = True
end if
next
if isLinked then
' Получение набора геометрий для текущей записи.
Set objGDBFeatureset = objGDBRecordset.OpenFeatureset(objGDBFeatureType, 1) 'gdbScopeCurrentRecord
' Проверка присутствия геометрий в наборе.
If objGDBFeatureset.FeatureCount > 0 Then
KeepThis = True
End If
End If
Next
Next
Next
If KeepThis = False then
objGDBRecordset.Delete
Else
objGDBRecordset.MoveNext
End If
Loop Until objGDBRecordset.EOF
' Закрытие ГБД.
objGDBEngine.Close
' Освобождение ядра ObjectLand.
Set objGDBEngine = Nothing
MsgBox "Усё готово!" |
|
| [ marat ]Вторник, 4 сентября 2007, 11:20
Все делаю как положено
в карте 8037 объектов
в таблице 2647 строк
процесс OL.exe занял 50% проца.
процесс wscript.exe 9% проца.
непонятно толи он работает толи нет.
жду уже больше 2 часов.
по оценке времени за сколько он должен очистить таблицу? |
|
| [ Максим ]Вторник, 4 сентября 2007, 21:05
Скрипт работает медленно, ничего не поделаешь. Я переписал программку на VB.Net и выслал по email. |
|
ОтветитьЗнаком «*» отмечены обязательные для заполнения поля. |
| |