【发布时间】:2013-10-24 17:56:48
【问题描述】:
我无法使用 Oracle OraOLEDB.Oracle Provider 在 Excel 2010 VBA 代码中运行查询。
某些查询工作正常并返回结果,而其他查询则不返回任何结果...
我是这样连接的:
Set DBConnection = New ADODB.Connection
DBConnection.Provider = "OraOLEDB.Oracle"
DBConnection.CursorLocation = adUseClient
DBConnection.ConnectionString = "Data Source=" & TNSName & ";User Id=" & OraUserName & ";Password=" & OraPassWord & ";"
DBConnection.Open
然后我尝试查询:
command2.ActiveConnection = DBConnection
command2.CommandText = "SELECT COL1,COL2,COL3 FROM table(MySchema.MyPackage.MyFunction('Param1'))"
command2.CommandType = adCmdText
Set QueryRecordSet = New ADODB.Recordset
QueryRecordSet.LockType = adLockReadOnly
QueryRecordSet.CursorType = adOpenDynamic
QueryRecordSet.Open command2
command2.Execute
我什么也没得到……有什么想法吗?
如果我运行一个简单的查询,例如
select * From my_table
它工作正常...似乎连接或其他更复杂的查询无法编译??
此外,从视图中选择也不起作用。
select * from my_view
什么都不返回
【问题讨论】:
-
我想我也应该注意这些函数都在一个包中。
-
我也遇到过很多关于 CTE(带有声明)不能与 ADO 一起使用的帖子。很高兴听取 ADO 专家的意见,为什么不简单地将查询传递给数据库? ADO 试图解析这个查询做什么?为什么它会默默地失败?
-
你试过
DBConnection.CursorLocation = adUseServer吗? -
MySchema.MyPackage.MyFunction()的代码中可能有错误。你能发布这个函数的确切代码吗?如果没有,尝试放置一个简单的代码返回记录集而不是当前函数体,看看函数是否返回结果集。 -
@ThinkJet - 是的,我尝试了所有可能的连接属性排列。如果您从 SQL 中调用该函数,该函数可以完美运行……但我肯定会在今天晚些时候发布代码。
标签: oracle vba excel excel-2010 ado