Два компа - два разных результата

0 голосов
спросил 13 Янв, 12 от Monstria1 (1,040 баллов) в категории Программные продукты Esri
Столкнулся с проблемой работы одной программы, на двух разных компьютеров..
В программе есть код, который узнает путь к источнику данных, получаемый, из используемых слоёв карты...

FLayer As IFeatureLayer 'Соответственно FLayer - это слой карты
Dim FC As IFeatureClass = FLayer.FeatureClass
Dim DS As IFeatureDataset = FC.FeatureDataset
Dim WS As IWorkspace = DS.Workspace
Dim my_Path_DB as String = WS.PathName

На одном компьютере - все это работает как и положено, на втором же... DS возвращается как Nothing, соответственно и все остальное перестает работать...

Куда копать? Почему так происходит?

    

9 Ответы

0 голосов
ответил 17 Янв, 12 от Monstria1 (1,040 баллов)
Вопрос решился неожиданно...
Если классы находятся в корне базы, то IfeatureClass объекта IFeatureLayer возвращается не полным (IFeatureDataSet=Nothing)...
После того как в базе создал набор классов и поместил в них все используемые классы - IfeatureClass стал возвращать полные данные...

image

С чем это связано, где можно прочитать об этом в SDC?
    
0 голосов
ответил 17 Янв, 12 от TDenis (42,620 баллов)
A feature dataset is a collection of related feature classes that share a common coordinate system. Feature datasets are used to spatially or thematically integrate related feature classes. Their primary purpose is for organizing related feature classes into a common dataset for building a topology, a network dataset, a terrain dataset, or a geometric network.

http://webhelp.esri.com/arcgisserver/9.3/java/index.htm#geodatabases/an_overv518725971.htm

http://webhelp.esri.com/arcgisserver/9.3/java/index.htm#geodatabases/feature_class_basics.htm
0 голосов
ответил 17 Янв, 12 от Monstria1 (1,040 баллов)
Про организацию набора данных, и зачем это нужно, было известно и ранее, но вопрос остался не раскрытым...
Почему полные возвращаемые данные объектов, программным способом, из описанного алгоритма в первом посте, я могу получить только в том случае, если классы помещены в набор классов?
Или же - подскажите как узнать путь к источнику данных слоя карты (а именно к файловой базе данных, потому если данные шейпы, то данный алгоритм работает без сбоев) если класс (источник данных) находится в корне базы данных (вне набора классов)...
    
    
0 голосов
ответил 17 Янв, 12 от TDenis (42,620 баллов)
Приводите сам FeatureLayer или FeatureClass к IDataset.
А дальше
pDataset.Workspace.PathName
0 голосов
ответил 17 Янв, 12 от Monstria1 (1,040 баллов)
Приводите сам FeatureLayer или FeatureClass к IDataset.
А дальше
pDataset.Workspace.PathName

    Этот вариант я проигрывал - результат все тот же...
0 голосов
ответил 17 Янв, 12 от TDenis (42,620 баллов)
var pDataset = FLayer as IDataset;
var path = pDataset.Workspace.PathName;
У меня работает, в т.ч. когда класс не в наборе.
Скиньте тестовую неработающую ФБГД с классом.
0 голосов
ответил 17 Янв, 12 от Monstria1 (1,040 баллов)
Скиньте тестовую неработающую ФБГД с классом.


    http://narod.yandex.ru/disk/37989653001/Test.rar

Тут с примерами и со скринами...

PS... Данный фрагмент кода, отображенный на скринах, создан специально для демонстрации
    
0 голосов
ответил 18 Янв, 12 от TDenis (42,620 баллов)
На скриншотах остался Ваш исходный вариант, где используется свойство FeatureDataset. Работать этот вариант не будет, потому что класс из примера не входит в feature dataset.

Сделайте, как я написал выше.
0 голосов
ответил 18 Янв, 12 от Monstria1 (1,040 баллов)
Сделайте, как я написал выше.

    Спасибо!
Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...