VBA / ADODB运行时错误:3704

时间:2009-11-05 18:47:41

标签: oracle excel vba adodb oracle9i

以下VBA子例程将运行大多数查询。 (即:SELECT * FROM DUAL

Sub DisplayQuery(QueryString As String)
  Dim rs As New ADODB.Recordset
  Dim connStr As String
  connStr = _
   "Provider=MSDAORA.1;" _
   & "User ID=abc;Password=123;" _
   & "Data Source=xxx/xxx;"
  out QueryString

  rs.Open QueryString, connStr, adOpenStatic, adLockOptimistic
  Range("DataTable").Clear
  Cells(1, 1).CopyFromRecordset rs
End Sub

但是,当我运行下面的查询时,会立即弹出以下错误消息:Run-time error '3704':Operation is not allowed when the object is closed.

with all_hours as
  ( select to_date('2009-11-03 05:00 PM','yyyy-mm-dd hh:mi PM') + numtodsinterval(level-1,'hour') hour
      from dual
   connect by level <= 4 /*hours*/

  )
  select h.hour
       , count(case when h.hour = trunc(s.sampled_on,'hh24') then 1 end) sampled
       , count(case when h.hour = trunc(s.received_on,'hh24') then 1 end) received
       , count(case when h.hour = trunc(s.completed_on,'hh24') then 1 end) completed
       , count(case when h.hour = trunc(s.authorized_on,'hh24') then 1 end) authorized
    from all_hours h cross join sample s
   group by h.hour

为什么?

2 个答案:

答案 0 :(得分:0)

如果我没记错的话,ADO Command对象有一个默认超时(我认为是30秒)可能会导致你的问题:应该有一个像

这样的设置
cn.ConnectionTimeout = (your value here)

你可以延长。

答案 1 :(得分:0)

我刚重构了我的查询(link),以便我可以将其放入视图中。然后,我在Excel中创建了一个连接以查看名称。