来自Excel的Oracle和ADO查询不返回任何结果

时间:2013-10-24 17:56:49

标签: oracle vba excel-vba excel-2010 ado

使用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

什么都不返回

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

答案 2 :(得分:0)

我在Oracle ADO查询后无法正常运行。

虽然它在问题中说明了'您可以使用ODBC来解决这个问题,我花了一些时间来弄清楚如何使ODBC连接字符串正常工作。

这是我工作的Oracle的Oracle连接。

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的默认超时相对较短。