Официальный сайт геоинформационной системы (ГИС) ObjectLandОфициальный сайт геоинформационной системы (ГИС) ObjectLand
  
 
ПОИСК ПО САЙТУ:
yandex.ru
КАРТА САЙТА
 
главная / поддержка / форум
E-MAIL:ПАРОЛЬ: 
регистрация

Обсуждение

 Записи в таблицеЗаписи в таблице [ 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.

Ответить

Знаком «*» отмечены обязательные для заполнения поля.
Ваше имя:  *
Адрес электронной почты:  
Тема:  *
Сообщение:
 *
Подтверждение:
(не требуется для зарегистрированных пользователей)
 *
 



Copyright © 1999–2025 ГИС ObjectLand
ГИС ObjectLand ® ООО «Радом-АйТи»
Информация о лицензировании
главная | о продукте | скачать | купить | поддержка | новости