• join and relate


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

  • 相关阅读:
    How to solve the problem "A project with an Output Type of Class Library cannot be started directly "
    Javascript 操作select控件大全(新增、修改、删除、选中、清空、判断存在等)
    JavaScript实现startWith、endWith效果函数
    不同格式证书导入keystore方法
    用KeyTool生成安全证书
    怎样让操作系统的虚拟机退出全屏?
    对https的理解
    JDK中keytool常用命令
    百折不回结局凄惨的金庸反角
    主题数据库的特征
  • 原文地址:https://www.cnblogs.com/zhangjun1130/p/1417402.html
Copyright © 2020-2023  润新知