5

我无法使用 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

不返回任何内容

4

3 回答 3

2

我将其作为答案只是因为注释格式不允许我添加代码。

如果您通过命令对象单独运行存储过程,它是否有效?

command2.CommandText = "MySchema.MyPackage.MyFunction"
command2.CommandType = adCmdStoredProc
command2.Parameters.Refresh
command2.Parameters.Item(1).Value = "Param1"
command2.Execute
Debug.Print command2.Parameters.Item(0).Value
于 2013-11-22T21:10:47.907 回答
1

我不确定这就是你要找的。我正在寻找另一个答案,我知道这对我有用。

    Set cmdSum = New adodb.Command

With cmdSum
    Set .ActiveConnection = oCon
    .Properties("PLSQLRSet") = True
    .CommandText = "{CALL StoredProc(?,?)}"
    .CommandType = adCmdText
    .Parameters.Append .CreateParameter(, adVarChar, adParamInput, 10, Format(CDate(sTerm), "mm/dd/yyyy"))
    .Parameters.Append .CreateParameter(, adVarChar, adParamInput, 10, Format(CDate(sEff), "mm/dd/yyyy"))
End With

Set Rs = cmdSum.Execute()

For c = 0 To Rs.Fields.Count - 1
    Wk.Cells(3, c + 1) = Rs.Fields(c).Name
Next c
于 2013-12-13T00:00:45.847 回答
0

在对 Oracle 的 Excel ADO 查询不起作用后,我最终来到了这里。

虽然它在问题的评论中声明您可以使用 ODBC 来解决这个问题,但我花了一段时间才弄清楚如何让 ODBC 连接字符串正常工作。

这是我开始工作的与 Oracle 的 ODBC 连接。

dbConn = "ODBC;Provider=OraOLEDB.Oracle;" & _
         "Data Source=odbc_connection_name;" & _
         "User Id=user_id;" & _
         "Password=user_pwd;" & _
         "DBQ=tns_name;"

tns_name是您在tnsnames.ora文件中命名连接的名称。

odbc_connection_name是您命名 odbc 连接的名称。

然后你可以像往常一样使用 ADO 连接到 Oracle:

cn.Open dbConn
cn.CommandTimeout = 1000
rs.Open sql, cn

注意我还必须增加CommandTimeout属性,因为 ODBC 的默认超时时间相对较短。

于 2017-04-13T11:22:49.497 回答