amber
路人甲
路人甲
  • 注册日期2005-01-24
  • 发帖数26
  • QQ
  • 铜币243枚
  • 威望0点
  • 贡献值0点
  • 银元0个
阅读:1519回复:1

请教:添加和删除特征时出现的问题,有具体代码

楼主#
更多 发布于:2005-09-14 10:53
<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>
喜欢0 评分0
qian_piao
路人甲
路人甲
  • 注册日期2005-01-06
  • 发帖数1
  • QQ
  • 铜币106枚
  • 威望0点
  • 贡献值0点
  • 银元0个
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>
举报 回复(0) 喜欢(0)     评分
游客

返回顶部