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

我有一个VBA代码,我打电话oracle使用ODBC两次检索数据。 首先数据检索很好。 但第二次是说,

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

我的代码如下,

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

 '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 

另外我试图创build新的命令对象为cmdSQLData1但仍然是相同的错误

我可以知道为什么错误是第二次查询? 查询没有问题,因为我已经在oracle目录中进行了testing。 请告诉我

你不会在任何地方看到这个logging,但是用不同的comamndText重复使用Command对象实际上是一个不好的做法。 你不会说你正在使用什么样的连接,但是例如,如果是ODBC,这将在内部向Oracle发送一个假的无效SQL来强制某种清理。 所以,相反,使用后扔掉你的Command对象,并创build一个新的。

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

你根本不需要使用命令文本来处理这些types的查询,你可以做的是:

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”。