修改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"
     '"C:/Documents and Settings/Administrator/Application Data/ESRI/ArcCatalog/Connection to 192.168.1.100.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 If

            Debug.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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值