修改MXD图层连接的方法
使用MXD的同志们肯定遇到这样的问题:
一个MXD复制到其它机器上,或者SDE服务器发生了变化,MXD打开后所有图层前都有一个讨厌的红色感叹号。连接丢失了。这个时候怎么办呢?
方法:
1、手工修改法
1)断掉网络,打开MXD。断掉网络是为了加快打开MXD的速度;
2)连上网络
3)在一个图层上,点击鼠标右键,选择【Data】-【Repair Data Source】,选择正确的SDE服务器,或者其它类型数据源。MXD会自动修复。
缺点:
如果我们有多个有效的数据源,只是想切换数据源,修复的时候,你会发现,自动修复的图层仍然采用了之前旧的数据源。似乎要逐个图层去修改。
2、代码修改
可以把下面代码Copy到VBA环境,修改连接串,执行,可以在瞬间完成数据源的修改,是不是很爽?当然也可以做成一个独立的程序,用来修复MXD。
Private Sub IDataLayerExample()
Dim pMxdoc As IMxDocument
Dim pApp As IApplication
Set pApp = Application
Set pMxdoc = pApp.Document
Dim pLayer As ILayer
Dim pDataLayer As IDataLayer
Dim pDatasetName As IDatasetName
Dim pWSName As IWorkspaceName
Dim sFDS As String
Dim pFCName As IFeatureClassName
Dim i As Integer
For i = 0 To pMxdoc.FocusMap.LayerCount - 1
'获取图层
Set pLayer = pMxdoc.FocusMap.Layer(i)
If TypeOf pLayer Is IDataLayer Then
sFDS = ""
Set pDataLayer = pMxdoc.FocusMap.Layer(i)
Set pDatasetName = pDataLayer.DataSourceName
Set pWSName = pDatasetName.WorkspaceName
'修改连接串
pWSName.PathName = "C:\Documents and Settings\Administrator\Application Data\ESRI\ArcCatalog\Connection to localhost(dlg).sde"
'重新连接
pDataLayer.Connect pDatasetName
'以下代码用来显示连接信息
Set pDatasetName.WorkspaceName = pWSName
If TypeOf pDatasetName Is IFeatureClassName Then
Set pFCName = pDatasetName
If Not pFCName.FeatureDatasetName Is Nothing Then
sFDS = pFCName.FeatureDatasetName.Name
End If
End IfDebug.Print "(" + Format(i) + ") Path: " + pWSName.PathName
Debug.Print "Feature Dataset: " + sFDS
Debug.Print "Feature Class/Dataset: " + pDatasetName.Name
Debug.Print
End If
Next i
End Sub
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具