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)

  • 相关阅读:
    Androidproject文件下assets目录与res目录的差别
    tomcat 实现域名crm.test.com訪问
    全文索引--自己定义chinese_lexer词典
    Elasticsearch 之 慘痛部署(分片移位)
    iOS开发核心语言Objective C —— 全部知识点总结
    [LeedCode OJ]#28 Implement strStr()
    【Django】 gunicorn部署纪要
    PKI(公钥基础设施)基础知识笔记
    Cocoapods Undefined symbols for architecture armv7sarm64
    Android开发Tips(3)
  • 原文地址:https://www.cnblogs.com/lauer0246/p/1321383.html
Copyright © 2011-2022 走看看