Oracle数据库查询抛出错误的第二次运行
问题描述:
我已经在那里我打电话甲骨文检索使用ODBC数据两倍的VBA代码。 第一次数据检索很好。但是,第二次则说,Oracle数据库查询抛出错误的第二次运行
**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目录中测试过。 请让我知道
答
你不会在任何地方看到这个记录,但是重用Command
具有不同comamndText的对象实际上是一种不好的做法。你不说你使用什么样的连接,但例如如果是ODBC,这将在内部发送假的无效SQL甲骨文来强制某种形式的清理。所以,相反,使用后丢弃你的Command
对象,并创建一个新的。
重用Command
对象是好练习当您重新执行具有不同参数值的相同查询时,但这不是这种情况。
答
你不需要在所有使用命令文本对于那些类型的查询你可以做的是: -
`昏暗CON作为新ADODB.Connection 昏暗RS作为新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
你只需要使用“命令”,如果你打算使用存储过程或绑定参数的查询。
请不要把关键字质疑冠军。这是标签的用途。问题标题只能包含关键字,如果它们可以有机地使用,而不是夹在问题的开头(或结尾)。我们不要陷入编辑之战。有关更多信息,请参阅http://meta.stackexchange.com/a/10651/147645。 – JimmyPena 2012-07-25 18:34:30