zoukankan      html  css  js  c++  java
  • 添加、删除连接(Join)和关联(Relate)VBA实例

    添加、删除连接(Join)和关联(Relate)VBA实例

    内容摘要
    ArcMap里面可以通过属性字段为两个图层建立或删除连接和关联,怎样使用VBA或Engine完成同样的工作呢?
    这里主要用到IDisplayRelationshipClass.DisplayRelationshipClass方法,如下为实现的VBA代码:
    过程描述
    Private Sub AddJoin_Relation_Click()
        Dim pFeatLayer As IFeatureLayer
        Dim pDispTable As IDisplayTable
        Dim pFCLayer As IFeatureClass
        Dim pTLayer As ITable
       
        Dim pTabCollection As IStandaloneTableCollection
        Dim pStTable As IStandaloneTable
        Dim pDispTable2 As IDisplayTable
        Dim pTTable As ITable
        Dim pMemRelFact As IMemoryRelationshipClassFactory
        Dim pRelClass As IRelationshipClass
        Dim pDispRC As IDisplayRelationshipClass
       
        Set pFeatLayer = GetLayer(0) ' MapControl1.Layer(0)
       
        Dim pDoc As IMxDocument
        Set pDoc = ThisDocument
        Dim pMap As IMap
        Set pMap = pDoc.ActiveView
        Set pTabCollection = pMap
        If pTabCollection.StandaloneTableCount = 0 Then
            Exit Sub
        End If
       
        Set pDispTable = pFeatLayer
        Set pFCLayer = pDispTable.DisplayTable
        Set pTLayer = pFCLayer
        Set pDispRC = pFeatLayer
       
        Set pStTable = pTabCollection.StandaloneTable(0)
       
        Set pDispTable2 = pStTable
        Set pTTable = pDispTable2.DisplayTable
        Set pMemRelFact = New MemoryRelationshipClassFactory
        Set pRelClass = pMemRelFact.Open(pStTable.Name, pTTable, "id", pTLayer, "省行政中心", "forward", "backward", esriRelCardinality.esriRelCardinalityOneToMany)    '这里参数根据具体数据和需求设置,详细信息可参照开发帮助文档

        '增加连接Join
        pDispRC.DisplayRelationshipClass pRelClass, esriJoinType.esriLeftOuterJoin
         
        '增加关系 --Relate
        Dim pRelClassCollEdit As IRelationshipClassCollectionEdit
        Set pRelClassCollEdit = pFeatLayer
        pRelClassCollEdit.AddRelationshipClass pRelClass
        Set pDispRC = pFeatLayer
        If Not pDispRC.RelationshipClass Is Nothing Then
            MsgBox "建立关联时:" & pDispRC.RelationshipClass.OriginClass.AliasName
        End If
    End Sub

    '删除连接和关联
    Private Sub RemoveJoinRelation_Click()
        Dim pFeatLayer As IFeatureLayer
        Dim pDispRC As IDisplayRelationshipClass
        Dim pRelationshipClassCollectionEdit As IRelationshipClassCollectionEdit
       
        Set pFeatLayer = GetLayer(0) ' MapControl1.Layer(0)
        Set pRelationshipClassCollectionEdit = pFeatLayer
       
        Set pDispRC = pFeatLayer
       
        If Not pDispRC.RelationshipClass Is Nothing Then
            MsgBox "删除关联前:" & pDispRC.RelationshipClass.OriginClass.AliasName
        End If
       
        '删除Relate
        Call pRelationshipClassCollectionEdit.RemoveAllRelationshipClasses
       
        '删除所有Join
        pDispRC.DisplayRelationshipClass Nothing, esriJoinType.esriLeftOuterJoin    '这里第一个参数传入Nothing即可完成删除
       
        Set pDispRC = pFeatLayer
        If Not pDispRC.RelationshipClass Is Nothing Then
            MsgBox "删除关联后:" & pDispRC.RelationshipClass.OriginClass.AliasName
        End If

    End Sub

    关联后的表,查询时可以使用 IDisplayFeatureClass来查询

    Dim pFeatureCursor As IFeatureCursor
    Dim pFeature As IFeature
    Dim pFClass As IFeatureClass
    pFClass = pGeoFeatureLayer.DisplayFeatureClass
    pFeatureCursor = pFClass.Search(Nothing, False)

  • 相关阅读:
    Windows XP下安装和配置Apache2.2.22服务器+PHP5+Mysql5
    win7下80端口被(Pid=4)占用的解决方法
    netty入门实例
    java NIO经典实例
    Eclipse下快速打开本地文件插件EasyExplorer(转)
    Nexus配置
    Maven依赖(转)
    【原创】C#玩高频数字彩快3的一点体会
    【原创】.NET读写Excel工具Spire.Xls使用(2)Excel文件的控制
    【踩坑经历】一次Asp.NET小网站部署踩坑和解决经历
  • 原文地址:https://www.cnblogs.com/lauer0246/p/1321383.html
Copyright © 2011-2022 走看看