【发布时间】:2017-11-08 13:13:31
【问题描述】:
我有以下代码块,它非常适合 OpenOffice SDK 以自动化邮件合并功能。
Public Function runQueryOnDataSource(ByVal nameOfdDtaource As String, ByVal query As String) As Boolean
strLog = strLog + vbCrLf + Now.ToString() + ": runQueryOnDataSource nameOfdDtaource:" + nameOfdDtaource + ",query:" + query + "-Started"
Dim oDB As Object, oBase As Object
Dim oStatement As Object
Dim rSQL As String
Dim oRequete As Object
Dim oServiceManager As Object, CreateUnoService As Object
Try
'Creation instance Open office
oServiceManager = CreateObject("com.sun.star.ServiceManager")
CreateUnoService = oServiceManager.createInstance("com.sun.star.sdb.DatabaseContext")
mxMSFactory = (uno.util.Bootstrap.bootstrap()).getServiceManager()
oDB = CreateUnoService.getByName(nameOfdDtaource) 'oDB=XDataSource
'Connection
oBase = oDB.getConnection("", "") 'oBase=XConnection
oStatement = oBase.createStatement 'XStatement
'rSQL = "SELECT * FROM ""26_MailMergeResult_DEMO"
rSQL = query
oRequete = oStatement.execute(rSQL)
Return True
Catch ex As Exception
strLog = strLog + vbCrLf + Now.ToString() + ": Exception" + ex.ToString()
Throw ex
Finally
oDB = Nothing
oBase.Close()
oBase.Dispose()
End Try
strLog = strLog + vbCrLf + Now.ToString() + ": runQueryOnDataSource-Finished"
Return True
End Function
上面的代码用于将数据插入到已经在 libre office 注册的数据源中。但是现在当我尝试使用它时,oServiceManager = CreateObject("com.sun.star.ServiceManager") 行会生成错误“创建 ActiveX 对象时出错”。
有谁知道,我该如何解决这个问题。
【问题讨论】:
-
我对上面的代码做了以下修改。
m_xContext = uno.util.Bootstrap.bootstrap() mxMSFactory = DirectCast(m_xContext.getServiceManager(), XMultiServiceFactory) databaseContext = mxMSFactory.createInstance("com.sun.star.sdb.DatabaseContext") Dim databaseNames As container.XNameAccess = DirectCast(databaseContext, container.XNameAccess) oDB = databaseNames.getByName(nameOfdDtaource)。现在我收到运行时错误“未找到类型 'Any' 上的公共成员 'getConnection'。” -
如果我更改
oDB = databaseNames.getByName(nameOfdDtaource) to oDB=DirectCast(databaseNames.getByName(nameOfdDtaource),XDataSource),我会得到“'Any' 类型的值不能转换为'XDataSource'”。
标签: libreoffice libreoffice-writer