Значения в таблице

0 голосов
спросил 09 Май, 10 от Swallow (2,740 баллов) в категории Программные продукты Esri
 Вот какой день уже не могу нормально написать код. Задача в следующем. Есть допустим 5 слоев. В каждом слое таблице есть столбец допустим name. нужно получить значения поля где name = 'абракадабра'. Может кто подсказать пример как это сделать. А то хелпы читаю и вообще не догоняю их( Или может не то я читаю?)  

33 Ответы

0 голосов
ответил 09 Май, 10 от Swallow (2,740 баллов)
str = pFeatcls.FindField(pQFilt.whereClause)
Я догадываюсь что тут не правильно написал. Надо указывать в параметр имя поля. Но мне надо что то типа того что я сделал. А вот как так сделать незнаю(
0 голосов
ответил 09 Май, 10 от TDenis (42,620 баллов)
str = pFeatcls.FindField(pQFilt.whereClause)

If str <> -1 Then
"А дальше если streetname='Значению одному'" буду выполнять код. Но все время -1 значение

В FindField надо просто название поля передавать, а не SQL-запрос.
0 голосов
ответил 09 Май, 10 от TDenis (42,620 баллов)
Но мне надо что то типа того что я сделал. А вот как так сделать незнаю(

O_o
str = pFeatcls.FindField("StreetName")
0 голосов
ответил 09 Май, 10 от Swallow (2,740 баллов)
str = pFeatcls.FindField(pQFilt.whereClause)

If str <> -1 Then
"А дальше если streetname='Значению одному'" буду выполнять код. Но все время -1 значение

В FindField надо просто название поля передавать, а не SQL-запрос.

    Ну я это понял. А мне нужно чтоб если pQFilt.whereClause истинно и такое поле с таким параметром существует то продолжить иначе нет)
0 голосов
ответил 09 Май, 10 от Swallow (2,740 баллов)
Но мне надо что то типа того что я сделал. А вот как так сделать незнаю(

O_o
str = pFeatcls.FindField("StreetName")

    нет) StreetName = 'параметр'. У меня там выше такое было) Может не заметили
т.е. если StreetName = 'Советская' то продолжить иначе нет.
0 голосов
ответил 09 Май, 10 от TDenis (42,620 баллов)
Объясняю. Вам надо перебрать все слои, так?
При переборе, первым делом для каждого слоя надо проверить, есть ли у него необходимое поле (по которому будете строить запрос). С помощью FindField("поле").
Если поля нет - переходите к следующему слою.
Если поле есть, то формируете запрос (WhereClause = "Поле = значение"). Вызываете метод Search и в цикле перебираете результаты:
http://resources.esri.com/help/9.3/ArcGISDesktop/ArcObjects/esriGeoDatabase/IFeatureClass_Search.htm

Если вызывать Search с некорректным запросом (например запрос к слою, у которого нет необходимого поля), то будет выброшено исключение. Отсюда и проверка.
0 голосов
ответил 09 Май, 10 от Swallow (2,740 баллов)
Объясняю. Вам надо перебрать все слои, так?
При переборе, первым делом для каждого слоя надо проверить, есть ли у него необходимое поле (по которому будете строить запрос). С помощью FindField("поле").
Если поля нет - переходите к следующему слою.
Если поле есть, то формируете запрос (WhereClause = "Поле = значение"). Вызываете метод Search и в цикле перебираете результаты:
http://resources.esri.com/help/9.3/ArcGISDesktop/ArcObjects/esriGeoDatabase/IFeatureClass_Search.htm

Если вызывать Search с некорректным запросом (например запрос к слою, у которого нет необходимого поля), то будет выброшено исключение. Отсюда и проверка.

    В таком случае почемуто если Поле = значение не выполняется ошибка в цикле.
Dim pFeat As IFeature
Set pFeat = pFeatCur.NextFeature
dtotArea = pFeat.Value(lAIndex) - вот тут
0 голосов
ответил 09 Май, 10 от TDenis (42,620 баллов)
Либо значение индекса равно -1, либо несоответствие типов.
Например, если переменной, хранящий число присваиваете строку.
0 голосов
ответил 09 Май, 10 от Swallow (2,740 баллов)
Спасибо, вроде разобрался.
0 голосов
ответил 09 Май, 10 от Swallow (2,740 баллов)
А вот еще такой вопрос.
Selection->options->selection color. Можно как нибудь сделать так чтоб всегда было no colour?
Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...