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