• 添加、删除连接(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)

  • 相关阅读:
    BZOJ 1492 [NOI2007]货币兑换Cash
    BZOJ 2285 [Sdoi2011]保密
    BZOJ 2962 序列操作
    BZOJ 3197 [Sdoi2013]assassin
    BZOJ 3131 [Sdoi2013]淘金
    BZOJ 3532 [Sdoi2014]Lis
    BZOJ 1923 [Sdoi2010]外星千足虫
    BZOJ 4855 [Jsoi2016]轻重路径
    BZOJ 4289 PA2012 Tax
    微信开发之 微信支付
  • 原文地址:https://www.cnblogs.com/lauer0246/p/1321383.html
Copyright © 2020-2023  润新知