阅读:1715回复:1
请教:添加和删除特征时出现的问题,有具体代码
<P>我用vb+mo,写了一段添加和删除特征的代码,出现的问题是:</P>
<P>1。最后添加的特征不随图层的隐藏而隐藏</P> <P>2。最后添加的特征无法删除,其他的特征都可以正常删除;</P> <P>3。有时会出现删除特征后,地图上的特征还存在,但数据库里的数据已经删除了的现象;</P> <P>代码如下:</P> <P>'用鼠标画多边形特征,并存储到已经存在的多边形shp文件<BR></P> <P>If tbToolBar.Buttons(1).Value = 1 Then </P> <P> Dim j As Long<BR> Dim ss As Long<BR> Dim test1 As Long<BR> Dim sss As Long<BR> <BR> <BR> Dim oPolygon As New MapObjects2.Polygon<BR> Set oPolygon = Map1.TrackPolygon<BR> moPolygons.Add oPolygon<BR> <BR> <BR> <BR> Dim Rect2 As MapObjects2.Recordset<BR> Set Rect2 = Map1.Layers(0).Records<BR> <BR> Rect2.MoveFirst '移动到记录最后<BR> test1 = Rect2.Count<BR> For sss = 1 To test1 - 1<BR> Rect2.MoveNext<BR> Next<BR> <BR> Rect2.Edit<BR> <BR> j = Rect2.Fields("Id").Value<BR> <BR> <BR> With Rect2<BR> .AddNew<BR> .Fields("Id").Value = j + 1<BR> .Fields("Shape").Value = moPolygons(1)<BR> .Update<BR> End With<BR> <BR> Rect2.StopEditing<BR> <BR> Ans = False '画Layer层<BR> Map1.Refresh<BR> <BR> tbToolBar.Buttons(1).Value = 0<BR> tbToolBar.Buttons(8).Value = 1<BR> End If</P> <P>画图层:</P> <P>Private Sub Map1_AfterLayerDraw(ByVal index As Integer, ByVal canceled As Boolean, ByVal hdc As stdole.OLE_HANDLE)</P> <P>If Ans = False Then<BR> <BR> Dim oPoly As MapObjects2.Polygon '画多边形<BR> If moPolygons.Count <> 0 Then<BR> For Each oPoly In moPolygons<BR> Map1.DrawShape oPoly, moSymbol2<BR> Next<BR> End If<BR>End Sub</P> <P>删除特征:</P> <P>Set Recset2 = Map1.Layers(0).SearchByDistance(P1, moPointInPolygon, "")<BR> If Not Recset2.EOF Then<BR> Anss = MsgBox("要删除这个特征?", vbYesNo, "删除特征")<BR> If Anss = vbYes Then<BR> If Recset2.Updatable Then<BR> <BR> Recset2.Edit<BR> Recset2.Delete<BR> Recset2.MoveFirst<BR> Recset2.StopEditing<BR> Map1.Refresh<BR> Else<BR> MsgBox "记录集不可修改."<BR> End If<BR> End If </P> <P>这些问题困扰了我很久,迫切需要大家的指教,谢谢!</P> |
|
1楼#
发布于:2005-10-13 12:51
<P>不知道你用的什么MO版本,我用2.1的有这种说明:</P>
<P>Generally, you should invoke Edit on complete Recordset objects only. MapObjects will issue a run-time error if you invoke Edit on a Recordset that represents a subset of a MapLayer object's Recordset created by one of the following Recordset methods: SearchShape, SearchByDistance, or SearchExpression. If your Recordset is derived from an SDE layer however, you may call Edit on a subset Recordset. </P> |
|