Erro de tempo de execução VBA/ADODB: 3704
Pergunta
A sub -rotina VBA a seguir executará a maioria das consultas muito bem. (ou seja: 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
No entanto, quando eu corro a consulta abaixo, a seguinte mensagem de erro aparece imediatamente: 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
Por quê?
Solução 2
Eu apenas reestruturei minha consulta (link), para que eu pudesse colocá -lo em vista. Em seguida, criei uma conexão no Excel para visualizar o nome.
Outras dicas
Se bem me lembro corretamente, o objeto de comando ADO tem um tempo limite padrão (30 segundos, eu acho) que pode estar causando seu problema: deve haver uma configuração como
cn.ConnectionTimeout = (your value here)
que você poderia se estender.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow