我有一个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目录中测试过查询没有问题。 请让我知道
答案 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”。