Oracle数据库查询在第二次运行时抛出错误

时间:2012-07-25 17:16:04

标签: oracle excel vba excel-vba odbc

我有一个VBA代码,我在调用oracle使用ODBC检索数据两次。 第一次数据检索很好。但它第二次说,

**RunTime Error '-2147467259 (80004005)'; Unspecified error**

我的代码如下,

  

注意:相同的代码适用于连接Teradata但在使用时失败   甲骨文

'First Data retrieval
Query1 = "Select TableName from all_tables"
CmdSQLData.CommandText = Query1
CmdSQLData.CommandType = adcmdText 
CmdSQLData.Timeout=0
set rs = CmdSQLData.Execute()
'Then code to store data ...
'This part gives proper result ...
rs.close()

'Second Data retrieval
Query2 = "Select * from db.Event"
CmdSQLData.CommandText = Query2
CmdSQLData.CommandType = adcmdText 
CmdSQLData.Timeout=0
set rs = CmdSQLData.Execute() 'This line Gives Error - RunTime Error '-2147467259 (80004005)'; Unspecified error
  

此外,我尝试将新命令对象创建为cmdSQLData1但仍然相同   错误

我可以知道为什么第二次查询会出错吗? 我在oracle目录中测试过查询没有问题。 请让我知道

2 个答案:

答案 0 :(得分:1)

你不会在任何地方看到这个记录很多,但重用Command对象与不同的comamndText实际上是一种不好的做法。你没有说你正在使用什么样的连接,但是例如,如果它是ODBC,这将在内部向Oracle发送假的无效SQL以强制进行某种清理。因此,在使用后丢弃您的Command对象并创建一个新对象。

当您使用不同的参数值重新执行相同的查询时,重用Command个对象是良好的做法,但这不是这种情况。

答案 1 :(得分:0)

您根本不需要使用命令文本来执行这些类型的查询: -

`Dim con As New ADODB.Connection     Dim rs As New ADODB.Recordset

con.Open "DSN=Oracle", "User", "Password"
rs.Open "select * from table_a", con

' Read all results

rs.Close

rs.Open "select * from table_b", con
' Read all results

rs.Close

con.Close

如果您打算使用存储过程或带有绑定参数的查询,则只需使用“Command”。