Индексирование таблицы

0 голосов
спросил 25 Июль, 12 от Flash-Samara (840 баллов) в категории Программные продукты Esri
При работе с таблицами столкнулся с такой проблемой. У каждой таблицы есть индексное поле, ObjectID обычно называется, при удалении из таблицы строки а позже при добавлении новой, получается что пропущен один и индекс...
В последствии при работе с таблицей в цикле выскакивает ошибка
Run-time Error ...

Пример цикла:

For i = 1 To pTable.RowCount(Nothing)
   
    Dim pFeatureT As IFeature
    Set pFeatureT = pTable.GetRow(i)
    Dim pPointT As iPoint
    Set pPointT = pFeatureT.Shape
        If pPointT.x = pPoint.x And pPointT.Y = pPoint.Y Then
        MsgBox "Error"
        Exit Sub
    Else
        End If
Я так думаю надо проиндексировать таблицу или как то в коде обходить эту ошибку, может кто то сталкивался с этой проблемой и знает как ее лучше решить?

8 Ответы

0 голосов
ответил 25 Июль, 12 от TDenis (42,620 баллов)
Для перебора записей используются курсоры.
См. у таблицы методы Search, Update и Insert.
0 голосов
ответил 26 Июль, 12 от Flash-Samara (840 баллов)
И снова спасибо TDenis, кажется разобрался:

Dim pTable As ITable
Set pTable = pFeatureclass

Dim pCursor As ICursor
Set pCursor = pTable.Search(Nothing, True)
Dim pRow As IRow
Set pRow = pCursor.NextRow


Do While Not (pRow Is Nothing)

    Dim pFeatureT As IFeature
    Set pFeatureT = pRow
    Dim pPointT As iPoint
    Set pPointT = pFeatureT.Shape
            If pPointT.x = pPoint.x And pPointT.Y = pPoint.Y Then
                MsgBox "Error"
                Exit Sub
            End If
    Set pRow = pCursor.NextRow
Loop

0 голосов
ответил 26 Июль, 12 от TDenis (42,620 баллов)
Убивать курсор не забывайте.

http://help.arcgis.com/en/sdk/10.0/arcobjects_net/conceptualhelp/index.html#//0001000004tm000000
Releasing geodatabase cursors
0 голосов
ответил 27 Июль, 12 от Flash-Samara (840 баллов)
Чот не понял как его убить и нужно ли, у меня в справке ничего не написано про это, у меня ArcGIS 9.3.1, VB, вот эта строка не работает:
System.Runtime.InteropServices.Marshal.ReleaseComObject(pCursor)

Наверное что то в заголовок надо добавить, вот только что...

0 голосов
ответил 27 Июль, 12 от Flash-Samara (840 баллов)
Может вот так в моем случае:
Set pCursor = Nothing
???
0 голосов
ответил 27 Июль, 12 от TDenis (42,620 баллов)
Я почему-то подумал, что у вас VB.NET.
0 голосов
ответил 27 Июль, 12 от Flash-Samara (840 баллов)
Странно, я не писал такого... В VB получается не нужно убивать курсор? Достаточно просто очистить переменную?

0 голосов
ответил 27 Июль, 12 от TDenis (42,620 баллов)
Боюсь соврать, но наверное да.
...