3

我有一个 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

我也尝试将新的命令对象创建为 cmdSQLData1 但仍然是同样的错误

我可以知道为什么第二个查询会出现错误吗?查询没有问题,因为我在 oracle 目录中测试过。请告诉我

4

2 回答 2

1

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

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

于 2012-07-25T18:51:54.300 回答
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

如果您计划使用存储过程或带有绑定参数的查询,则只需要使用“命令”。

于 2012-07-26T07:50:51.337 回答