栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

关于VB6开发Arcgis连接地理数据库总是提示自动化错误的解决办法

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

关于VB6开发Arcgis连接地理数据库总是提示自动化错误的解决办法

在连接地理数据库的代码如下

Dim pWorkspaceFactory  As esriGeoDatabase.IWorkspaceFactory
Dim pWorkspace         As esriGeoDatabase.IWorkspace

'----------------------------------------------------------------------------------------------------------

Set pWorkspaceFactory = New esriDataSourcesGDB.AccessWorkspaceFactory

Set pWorkspace = pWorkspaceFactory.OpenFromFile(DestDBFilename, 0)

或者

Set pWorkspaceFactory = New esriDataSourcesGDB.AccessWorkspaceFactory

Dim propertySet As esriSystem.IPropertySet

Set propertySet = New esriSystem.propertySet

propertySet.SetProperty "DATAbase", DestDBFilename

Set pWorkspace = pWorkspaceFactory.Open(propertySet, 0)

上面两种方式我都测试过,在Arcmap VBA中没有问题,但在VB6中问题出来了,提示“自动化错误”,引用文件与VBA中相同,通过编译器的自动提示功能及对象浏览器中,均可查询到pWorkspaceFactory.OpenFromFile和pWorkspaceFactory.Open方法,这就奇怪了。在百度中搜索了好久,也发现有人有类似的问题,但没有回答,想必是现在用VB6开发Acgis10版本以上的人少了吧。

将VB6代码转移到VB.net中也发现同样问题,在网络搜索原来是许可问题,只需要在程序执行前,绑定许可就可。那么VB6中的提示的问题是不是正是许可问题导致的呢。

通过查看

ArcEngine 许可初始化问题 - qb371 - 博客园、ArcGIS10和ArcGIS10.1关于AO Licence初始化的问题、ArcEngine 许可初始化问题_hsg77的专栏-CSDN博客

后,终于得到解决办法。

怎样初始化GDB Update许可当我们意识到需要使用Engine的GDB Update许可时,怎样才能将它正确的初始化呢?Engine给我们提供了两种初始化许可的方法:

1)使用LicenseControl控件。将该控件拖放到主窗体之上,勾选适当的许可,并确保程序启动该窗体可加载,就可以完成许可初始化。如下图(文章中未查询到图片,这个方法以后再测试,直接测试方法2)

2)使用IAoInitialize.Initialize方法加入适当的参数进行初始化。VB6的例子代码如下:

Option Explicit

Dim m_pAoInitialize As IAoInitialize

Private Sub Form_Load()

    '实例化

    Set m_pAoInitialize = New AoInitialize

    '初始化 EngineGeoDB 许可

    Call m_pAoInitialize.Initialize(esriLicenseProductCodeEngineGeoDB)

End Sub

当然,对于一个健壮的程序而言,我们还需要在初始化之前先判断将被初始化的许可是否可用,应先使用IsProductCodeAvailable方法进行判断,需要初始化扩展模块的许可,可使用CheckOutExtension方法。
 

'判断Ao、ArcEngine许可是否有效
 Function IsAoInitializeSucceed() As Boolean

    IsAoInitializeSucceed = True

    If IsNull(m_pAoInitialize) Then

        MsgBox "没有安装ArcEngine,系统无法运行!", vbOKOnly, "系统提示"

        IsAoInitializeSucceed = False

    Else

        If m_pAoInitialize.IsProductCodeAvailable(esriLicenseProductCode.esriLicenseProductCodeEngineGeoDB) = esriLicenseStatus.esriLicenseAvailable Then

            If m_pAoInitialize.Initialize(esriLicenseProductCode.esriLicenseProductCodeEngineGeoDB) <> esriLicenseStatus.esriLicenseCheckedOut Then

                MsgBox "没有ArcEngine中的GDBEdit许可!", vbOKOnly, "系统提示"

                IsAoInitializeSucceed = False

            End If

        Else

            MsgBox "没有ArcEngine中的GDBEdit许可!", vbOKOnly, "系统提示"

            IsAoInitializeSucceed = False

        End If

    End If

End Function

'判断Ao、ArcEngine扩展模块许可是否有效

Function IsAoInitializeExtensionSucceed() As Boolean

    IsAoInitializeExtensionSucceed = True

    If IsNull(m_pAoInitialize) Then

        MsgBox "没有安装ArcEngine,系统无法运行!", vbOKOnly, "系统提示"

        IsAoInitializeExtensionSucceed = False

    Else

        If m_pAoInitialize.IsExtensionCodeAvailable(esriLicenseProductCode.esriLicenseProductCodeEngine, esriLicenseExtensionCode.esriLicenseExtensionCodeNetwork) <> esriLicenseStatus.esriLicenseCheckedOut Then

            MsgBox "没有ArcEngine中的Network许可!", vbOKOnly, "系统提示"

            IsAoInitializeExtensionSucceed = False

        End If

    End If

End Function

将上述两个函数放到Form_Load或Sud Main中

Private Sub Form_Load()
    Set m_pAoInitialize = New AoInitialize
    If Not IsAoInitializeSucceed Then
        Unload Me
    End If

    'If Not IsAoInitializeExtensionSucceedThen
        'Unload Me
    'End If
    Call m_pAoInitialize.Initialize(esriLicenseProductCodeEngineGeoDB)
End Sub

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/450682.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号