Как обновить записи в шейп-файле?

0 голосов
спросил 25 Авг, 08 от Oleg11 (260 баллов) в категории Программные продукты Esri
Здравствуйте!

Пытаюсь обновить записи в шейп-файле, как в примере:

Dim pFeatcls As IFeatureClass
Dim pFeatLayer As IFeatureLayer
Dim pDoc As IMxDocument
Dim pMap As IMap

Set pDoc = ThisDocument
Set pMap = pDoc.Maps.Item(0)
Set pFeatLayer = pMap.Layer(0)
Set pFeatcls = pFeatLayer.FeatureClass

' +++ create the query filter
Dim pQueryFilter As IQueryFilter
Set pQueryFilter = New QueryFilter
With pQueryFilter
   .WhereClause = "subtype = 'COM'"
   .SubFields = "FID, Type"
End With

' +++ get the field we are interested in updating
Dim lFld As Long
Dim pFlds As IFields
Dim pTable As ITable
Dim pFeatCur As IFeatureCursor
Dim pFeat As IFeature

Set pFeatCur = pFeatcls.Update(pQueryFilter, False)
Set pFlds = pFeatcls.Fields
lFld = pFlds.FindField("Type")

' +++ loop through each feature and update
' +++ the field to its new value    
Set pFeat = pFeatCur.NextFeature

While Not pFeat Is Nothing
   Debug.Print "The old type: " & pFeat.Value(lFld)
   pFeat.Value(lFld) = "ABC"
   pFeatCur.UpdateFeature pFeat
   Debug.Print "The new type: " & pFeat.Value(lFld)
   Set pFeat = pFeatCur.NextFeature
Wend

Получаю ошибку: Поле не доступно для редактирования

Подскажите, пожалуйста, что делать?

2 Ответы

0 голосов
ответил 28 Авг, 08 от Vitaliy (200 баллов)
Попробуй
 
Dim pEditor As IEditor

Dim pID As New UID

Dim pDataset As IDataset

 

 

pID = "esriEditor.Editor"
Set pEditor = Application.FindExtensionByCLSID(pID)
Set pDataset = pFeatLayer.FeatureClass

pEditor.StartEditing pDataset.Workspace

pEditor.StartOperation
 
  //здесь сам процесс редактирования
 
pEditor.StopOperation "название операции"
pEditor.StopEditing True
0 голосов
ответил 04 Сен, 08 от Oleg11 (260 баллов)
Спасибо Вам большое!
Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...