Le sous-programme VBA suivant exécutera la plupart des requêtes correctement. (Ex: SELECT * FROM DUAL
)Erreur d'exécution VBA/ADODB: 3704
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
Cependant, quand je lance la requête ci-dessous, le message d'erreur suivant pops immédiatement: 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
Pourquoi?
Les bases de données Oracle font des choses intelligentes avec la gestion de la mémoire/le regroupement de connexions, etc. L'objet de connexion peut sembler fermé si l'exécution de la requête est dans une file d'attente. Une solution de contournement pourrait être (a) l'optimisation des requêtes et (b) les requêtes directes. – heferav
Y a-t-il des valeurs nulles dans h.heure? – dendarii
ou les champs de la table d'échantillons? – dendarii