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

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

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许可当我们意识到需要使用EngineGDB 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

'判断AoArcEngine扩展模块许可是否有效

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值