Группа фильтрации может не добавляться в коллекцию по множеству причин. Чтобы выяснить что именно мешает добавлению, Вам необходимо получить описание возникшей ошибки.
Вот пример на VisualBasic, который выполняет практически то же самое:
[-----------]
Private Const GDB_NAME As String = "City" ' Имя файла ГБД
Private Const MAP_NAME As String = "Город Энск"
Private Const THEME_NAME As String = "Сегменты улиц" ' Имя темы ГБД
Private Const LAYER_NAME As String = "Улицы" ' Имя слоя темы
Private Const FEATURETYPE_NAME As String = "Сегмент улицы" ' Имя типа геометрий
Private Const TABLE_NAME As String = "Сегменты" ' Имя таблицы
Private Const FIELD1_NAME As String = "Код улицы" ' Имя поля
Private Const FILTERGROUP2_NAME As String = "По коду улицы"
Private Sub Main()
Dim objGDBEngine As GDBEngine ' Ядро ObjectLand
Dim objGDB As GDBGeoDatabase ' ГБД
Dim objGDBTheme As GDBTheme ' Тема ГБД
' Установка обработчика ошибок
'On Error GoTo PROC_ERROR
Dim strGDBPath As String ' Путь и имя файла ГБД
' Установка имени и пути к ГБД
strGDBPath = "C:\Documents and Settings\All Users\Application Data\ObjectLand\DEMO\RU\City"
' Создание ядра ObjectLand
Set objGDBEngine = New GDBEngine
' Открытие ГБД с именем, определённым переменной strGDBPath,
' и атрибутами "Монопольно", "Чтение/Запись", "Без файла изменений"
Set objGDB = objGDBEngine.OpenGDB(strGDBPath, gdbOpenExclusive Or gdbOpenReadWrite Or _
gdbOpenNoChgFile, "", "", "")
' Создание темы
Set objGDBTheme = objGDB.CreateTheme(objGDB.Maps(MAP_NAME))
objGDBTheme.Name = THEME_NAME
Dim objGDBLayer As GDBLayer ' Слой
' Получение слоя из коллекции Theme::Layers
Set objGDBLayer = objGDBTheme.Layers(LAYER_NAME)
Dim objGDBFeatureType As IGDBFeatureType ' Тип геометрий
' Получение типа геометрий из коллекции Layer::FeatureTypes
Set objGDBFeatureType = objGDBLayer.FeatureTypes(FEATURETYPE_NAME)
Dim objGDBFilterGroup As IGDBFilterGroup ' Группа фильтрации
Dim objGDBFilterCondition As IGDBFilterCondition ' Критерий фильтрации
' Создание группы фильтрации на основе типа геометрий
Set objGDBFilterGroup = objGDBFeatureType.CreateFilterGroup
' Установка имени группы фильтрации
objGDBFilterGroup.Name = FILTERGROUP2_NAME
' Вывод сообщения о создании группы фильтрации
Debug.Print vbCrLf & "Создана группа фильтрации """ & objGDBFilterGroup.Name & """."
' Получение таблицы
Dim objGDBTable As IGDBTable ' Таблица критерия фильтрации
Set objGDBTable = objGDB.Tables(TABLE_NAME)
' Получение поля для первого критерия фильтрации
Dim objGDBField As IGDBField ' Поле критерия фильтрации
Set objGDBField = objGDBTable.Fields(FIELD1_NAME)
' Создание критерия фильтрации
Set objGDBFilterCondition = _
objGDBFeatureType.CreateFilterCondition(gdbLogicalNone, objGDBField, _
gdbGeoPropertyNone, gdbFilterRelEQ, 1, Null)
objGDBFilterGroup.FilterConditions.Append objGDBFilterCondition
Set objGDBFilterCondition = _
objGDBFeatureType.CreateFilterCondition(gdbLogicalOr, objGDBField, _
gdbGeoPropertyNone, gdbFilterRelEQ, 2, Null)
objGDBFilterGroup.FilterConditions.Append objGDBFilterCondition
Set objGDBFilterCondition = _
objGDBFeatureType.CreateFilterCondition(gdbLogicalOr, objGDBField, _
gdbGeoPropertyNone, gdbFilterRelEQ, 3, Null)
objGDBFilterGroup.FilterConditions.Append objGDBFilterCondition
Set objGDBFilterCondition = _
objGDBFeatureType.CreateFilterCondition(gdbLogicalOr, objGDBField, _
gdbGeoPropertyNone, gdbFilterRelEQ, 4, Null)
objGDBFilterGroup.FilterConditions.Append objGDBFilterCondition
objGDBFilterGroup.LineStyle = objGDBEngine.SharedLibrary.LineStyles("_Пунктир 10x2")
objGDBFilterGroup.Visibility = True
' Добавление группы фильтрации в коллекцию FeatureType::FilterGroups
objGDBFeatureType.FilterGroups.Append objGDBFilterGroup
' Каталогизация темы
objGDB.Themes.Append objGDBTheme
' Сохранение модификации темы
objGDBTheme.Update gdbThemeWindowStay
' Закрытие ГБД
objGDBEngine.Close
' Освобождение ядра ObjectLand
Set objGDBEngine = Nothing
' Завершение программы
Exit Sub
' Выдача сообщения об ошибке
PROC_ERROR:
MsgBox Err.Description
End Sub
[-----------]
|