【转帖】ArcEngine连接表join
http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=15012&extra=page%3D2
本例实现的是如何将地图中的一个FeatureLayer的属性表与另一个数据文件建立连接。
l 要点
首先需要定义两个ITable接口对象,分别用来获得地图中的属性表和需要连接的数据文件,再通过IMemoryRelationshipClassFactory.Open方法将两个ITable接口对象根据某个关键字段建立连接,
最后使用IDisplayRelationshipClass.DisplayRelationshipClass方法将显示该连接
主要用到IMemoryRelationshipClassFactory接口,IRelationshipClass接口和IDisplayRelationshipClass接口。
l 程序说明
函数Join是将当前激活的地图中名称为sLayerName的图层和路径为sFilePath、文件名为sFileName的文件按字段名为sFieldName的字段进行连接。
l 代码
Private Function Join(ByVal sLayerName As String, ByVal sFilePath As String, _ByVal sFileName As String, ByVal sFieldName As String) As Boolean
Dim pMxDocument As IMxDocument
Dim pMap As IMap
Dim pWorkspaceFactory As IWorkspaceFactory
Dim pWorkspace As IWorkspace
Dim pFeatureWorkspace As IFeatureWorkspace
Dim pFeatureLayer As IFeatureLayer
Dim pFeatureClass As IFeatureClass
Dim pPrimaryTable As ITable
Dim pForeignTable As ITable
Dim pDisplayTable As IDisplayTable
Dim pMemoryRelationshipCF As IMemoryRelationshipClassFactory
Dim pRelationshipClass As IRelationshipClass
Dim pDisplayRelationshipC As IDisplayRelationshipClass
Dim nNumber As Integer
Dim sForeignFile As String
On Error GoTo ErrorHandler:
Join = False
sForeignFile = Dir(sFilePath & "\" & sFileName)
If (sForeignFile = "") Then
MsgBox "The ForeignFile is not exist."
Exit Function
End If
Set pWorkspaceFactory = New ShapefileWorkspaceFactory
Set pWorkspace = pWorkspaceFactory.OpenFromFile(sFilePath, 0)
Set pFeatureWorkspace = pWorkspace
Set pForeignTable = pFeatureWorkspace.OpenTable(sFileName)
Set pMxDocument = ThisDocument
Set pMap = pMxDocument.FocusMap
For nNumber = 0 To pMap.LayerCount - 1
If pMap.Layer(nNumber).Name = sLayerName Then
Set pFeatureLayer = pMap.Layer(nNumber)
Exit For
End If
Next
If pFeatureLayer Is Nothing Then
MsgBox "No Layer's Name is " & sLayerName
Exit Function
End If
Set pDisplayTable = pFeatureLayer
Set pFeatureClass = pDisplayTable.DisplayTable
Set pPrimaryTable = pFeatureClass
Set pMemoryRelationshipCF = New MemoryRelationshipClassFactory
Set pRelationshipClass = pMemoryRelationshipCF.Open("TabletoLayer", pPrimaryTable, sFieldName, _
pForeignTable, sFieldName, "forward", "backward", esriRelCardinalityOneToOne)
Set pDisplayRelationshipC = pFeatureLayer
pDisplayRelationshipC.DisplayRelationshipClass pRelationshipClass, esriLeftOuterJoin
Join = True
Exit Function
ErrorHandler:
MsgBox Err.Description
End Function
Private Sub UIButtonControl1_Click()
Dim pVBProject As VBProject
On Error GoTo ErrorHandler:
Set pVBProject = ThisDocument.VBProject
Join "WorldCountries", pVBProject.FileName & "\..\..\..\.." & "\data", "Continents.dbf", "FID"
Exit Sub
ErrorHandler:
MsgBox Err.Description
End Sub
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程