Résolu Impossible de trouver l'objet dans la collection correspondant au nom

ajor

Habitué
Bonjour,

En ouvrant mon fichier Excel, j'obtiens une erreur :
[cpp]3265
Impossible de trouver l'objet dans la collection correspondant au nom ou à la référence ordinale demandé[/cpp]

Le code contient une requête SQL qui fonctionne très bien quand je la fais directement dans Oracle (par SQL+)

Voici la requête :

[cpp] strSQL = "select cote.indice, cote.cote_actuelle " & _
"from t_detail_vin pr, type_vin vin, (select ind.id_tvin,ind.milesime millesime,c.cote cote_actuelle, ind.id_indice indice from t_indices ind,cote_annuelle c where ind.id_indice = c.id_indice and ind.format in('Bouteille') and c.annee='2010' and ind.id_indice not in ('1','2','3') and ind.id_indice < '100') cote" & _
"where vin.id_tvin = pr.id_tvin and pr.milesime = cote.millesime and vin.id_tvin=cote.id_tvin and vin.proprietaire not in ('Indifferent') and vin.proprietaire is not null order by cote.indice"[/cpp]


A votre avis, d'où vient l'erreur ?

Précision : je travaille sur Excel 2003, j'appelle une base Oracle 10g avec cette fonction (qui fonctionne très bien avec des requêtes simples):
[cpp]Set cN = New ADODB.Connection
cN.ConnectionString = "Provider=msdaora;Data Source=OIU;User Id=XXXXX;Password=XXXX;"[/cpp]
 

zeb

Modérateur
Bonjour,

Fais un effort, écris correctement tes requêtes :
Code:
' // Requête
  select cote.indice,
         cote.cote_actuelle
    from t_detail_vin pr,
         type_vin     vin,
         (select ind.id_tvin,
                 ind.milesime millesime,
                 c.cote cote_actuelle,
                 ind.id_indice indice
            from t_indices ind,
                 cote_annuelle c
           where ind.id_indice = c.id_indice
             and ind.format in ('Bouteille')
             and c.annee='2010'
             and ind.id_indice not in ('1','2','3')
             and ind.id_indice < '100') cote
   where vin.id_tvin = pr.id_tvin
     and pr.milesime = cote.millesime
     and vin.id_tvin = cote.id_tvin
     and vin.proprietaire not in ('Indifferent')
     and vin.proprietaire is not null
order by cote.indice

Là, on voit bien mieux. Et on ne décèle aucune anomalie. [:spamafote]
Cherchons l'erreur ailleurs. Et si c'était dans ta façon d'écrire.

Code:
strSQL = "sel...lle " & _
         "fro...ote" & _
         "whe...ice"
Ah, aaah ! Je vois là comme un problème. Il manquerait un espace.
 

ajor

Habitué
Salut !

Sans l'espace entre "cote" et "where", on obtient l'erreur suivante à l'exécution :

ORA-00933: SQL command not properly ended

Si je met l'espace on obtient l'erreur décrite plus haut (petit oubli dans mon copier coller).
Je précise qu'à l'exécution, il n'y a aucune erreur.
C'est en ouvrant le fichier Excel que j'obtiens l'erreur 3265

Désolé pour la présentation de la requête...
 

zeb

Modérateur
Désolé pour la présentation de la requête...
Eh, c'est pour toi, hein !

Attends, t'as une erreur sur la requête ou pas ?
Pourquoi tu nous en parles alors ?

C'est donc à l'ouverture de Excel que t'as tes problèmes.
C'est là qu'il faut chercher.

Ôte-moi d'un doute. Si tu mets
Code:
strSQL = "SELECT 'hello, world' FROM DUAL "
dans ta requête, l'ouverture de ta feuille plante quand même ?
 

ajor

Habitué
Meilleure réponse
C'est bon, j'ai trouvé !

Si ça intéresse d'autres personne, voici le soucis :
Excel n'aime pas les points dans les variables (comme "cote.indice"...)
Du coup, j'ai mis un alias, et maintenant ça fonctionne !

[cpp]strSQL = ""
strSQL = strSQL & "select cote.indice indiceZ, "
strSQL = strSQL & " cote.cote_actuelle coteZ"
strSQL = strSQL & " from t_detail_vin pr, "
strSQL = strSQL & " type_vin vin, "
strSQL = strSQL & " (select ind.id_tvin, "
strSQL = strSQL & " ind.milesime millesime, "
strSQL = strSQL & " c.cote cote_actuelle, "
strSQL = strSQL & " ind.id_indice indice "
strSQL = strSQL & " from t_indices ind, "
strSQL = strSQL & " cote_annuelle c "
strSQL = strSQL & " where ind.id_indice = c.id_indice"
strSQL = strSQL & " and ind.format in('Bouteille') "
strSQL = strSQL & " and c.annee='2010' "
strSQL = strSQL & " and ind.id_indice not in ('1','2','3') "
strSQL = strSQL & " and ind.id_indice < '100') cote "
strSQL = strSQL & " where vin.id_tvin = pr.id_tvin "
strSQL = strSQL & " and pr.milesime = cote.millesime "
strSQL = strSQL & " and vin.id_tvin=cote.id_tvin "
strSQL = strSQL & " and vin.proprietaire not in ('Indifferent') "
strSQL = strSQL & " and vin.proprietaire is not null "
strSQL = strSQL & " order by cote.indice"

rs.Open strSQL, cN, adOpenForwardOnly, adLockOptimistic

If rs.RecordCount > 0 Then

j = 1
i = 0

Do While Not rs.EOF And Not rs.BOF

i = i + 1
Feuil1.Cells(i, j) = rs("coteZ")
Feuil1.Cells(i, j + 1) = rs("coteZ")
rs.MoveNext[/cpp]
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 134
Messages
6 718 063
Membres
1 586 394
Dernier membre
Manoushk
Partager cette page
Haut