有下面这样一个过程
Dim pFeaCursor As IFeatureCursor
Dim pFeature As IFeature
Dim pGeometry As IGeometry
Set pFeaCursor = pFcls.Search(pSpatialFlt, False)
Set pFeature = pFeaCursor.NextFeature
Do While Not pFeature Is Nothing
Set pGeometry = TopoDifference(pFeature.ShapeCopy, pUpdatePolygon)
On Error GoTo NextFeature
If pGeometry Is Nothing Or pGeometry.IsEmpty Then
pFeature.Delete
Else
Set pFeature.Shape = pGeometry
pFeature.store '第一次这里出错的时候,会运行到 NextFeature行,但是第二次如果再遇到错误就直接跳出过程了,查看了一下网上资料,说是On error goto语句只在本次过程内第一次遇到错误有效,第二次遇到错误就无效了,这样应该怎么处理,让他每次遇到错误都运行到 NextFeature行?
End If
SetSysProValue i
i = i + 1
DoEvents
NextFeature:
Set pFeature = pFeaCursor.NextFeature
Loop
NextLayer:
rs.MoveNext
Loop
Dim pFeaCursor As IFeatureCursor
Dim pFeature As IFeature
Dim pGeometry As IGeometry
Set pFeaCursor = pFcls.Search(pSpatialFlt, False)
Set pFeature = pFeaCursor.NextFeature
Do While Not pFeature Is Nothing
Set pGeometry = TopoDifference(pFeature.ShapeCopy, pUpdatePolygon)
On Error GoTo NextFeature
If pGeometry Is Nothing Or pGeometry.IsEmpty Then
pFeature.Delete
Else
Set pFeature.Shape = pGeometry
pFeature.store '第一次这里出错的时候,会运行到 NextFeature行,但是第二次如果再遇到错误就直接跳出过程了,查看了一下网上资料,说是On error goto语句只在本次过程内第一次遇到错误有效,第二次遇到错误就无效了,这样应该怎么处理,让他每次遇到错误都运行到 NextFeature行?
End If
SetSysProValue i
i = i + 1
DoEvents
NextFeature:
Set pFeature = pFeaCursor.NextFeature
Loop
NextLayer:
rs.MoveNext
Loop
Dim pFeature As IFeature
Dim pGeometry As IGeometry
Set pFeaCursor = pFcls.Search(pSpatialFlt, False)
Set pFeature = pFeaCursor.NextFeature
Do While Not pFeature Is Nothing
Set pGeometry = TopoDifference(pFeature.ShapeCopy, pUpdatePolygon)
On Error GoTo Handler
If pGeometry Is Nothing Or pGeometry.IsEmpty Then
pFeature.Delete
Else
Set pFeature.Shape = pGeometry
pFeature.store
End If
SetSysProValue i
i = i + 1
DoEvents rs.MoveNext
NextFeature:
Loop
Handler:
Set pFeature = pFeaCursor.NextFeature
Goto NextFeature
Dim pFeaCursor As IFeatureCursor
Dim pFeature As IFeature
Dim pGeometry As IGeometry
Set pFeaCursor = pFcls.Search(pSpatialFlt, False)
Set pFeature = pFeaCursor.NextFeature
Do While Not pFeature Is Nothing
Set pGeometry = TopoDifference(pFeature.ShapeCopy, pUpdatePolygon)
On Error GoTo NextFeature
If pGeometry Is Nothing Or pGeometry.IsEmpty Then
pFeature.Delete
Else
Set pFeature.Shape = pGeometry
pFeature.store
End If
SetSysProValue i
i = i + 1
DoEvents
NextFeature:
Set pFeature = pFeaCursor.NextFeature
Loop 就是如果在循环内处理一条记录出错的话,就跳到NextFeature处理下一条记录
Dim pFeature As IFeature
Dim pGeometry As IGeometry
Set pFeaCursor = pFcls.Search(pSpatialFlt, False)
Set pFeature = pFeaCursor.NextFeature
On Error GoTo Resume Next Do While Not pFeature Is Nothing
Set pGeometry = TopoDifference(pFeature.ShapeCopy, pUpdatePolygon)
If Err.Number = 0 Then
If pGeometry Is Nothing Or pGeometry.IsEmpty Then
pFeature.Delete
Else
Set pFeature.Shape = pGeometry
pFeature.store
End If
SetSysProValue i
i = i + 1
End If
DoEvents
Set pFeature = pFeaCursor.NextFeature
Loop
Set pGeometry = TopoDifference(pFeature.ShapeCopy, pUpdatePolygon)
On Error GoTo ResumeNextFeature
If pGeometry Is Nothing Or pGeometry.IsEmpty Then
pFeature.Delete
Else
Set pFeature.Shape = pGeometry
pFeature.store
End If
SetSysProValue i
i = i + 1
DoEvents
NextFeature:
Set pFeature = pFeaCursor.NextFeature
Loop ...
exit sub
ResumeNextFeature:
Resume NextFeature
end sub
on error go to ErrPort
ErrStore=True 'Initial
Set pFeature.Shape = pGeometry
pFeature.store
ErrStore=True
exit functionErrPort:
ErrStore=false
end function
========================================================================================== Dim pFeaCursor As IFeatureCursor
Dim pFeature As IFeature
Dim pGeometry As IGeometry
Set pFeaCursor = pFcls.Search(pSpatialFlt, False)
Set pFeature = pFeaCursor.NextFeature
Do While Not pFeature Is Nothing
Set pGeometry = TopoDifference(pFeature.ShapeCopy, pUpdatePolygon)
If pGeometry Is Nothing Or pGeometry.IsEmpty Then
pFeature.Delete
Else
if ErrStore=false then .........(goto NextFeature)'自己改进,不建议这样使用GOTO
End If
SetSysProValue i
i = i + 1
DoEvents
NextFeature:
Set pFeature = pFeaCursor.NextFeature
Loop
NextLayer:
rs.MoveNext
Loop