Erreur Recordset selection de données VB6 base Access [Résolu]

Signaler
Messages postés
15
Date d'inscription
vendredi 24 juin 2005
Statut
Membre
Dernière intervention
21 mars 2008
-
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
-
Bonjour à tous ! Je viens vers vous car j'ai une erreur VB que je n'arrive pas à comprendre.

je sélectionne des données via un record set dans VB6, et VB n'arrive pas à ouvrir le record set bien que tout fonctionne correctement à côté et que la requête SQL est valide dans Access. à priori çà plante lorsqu'il y'a des jointures dans la requête

je vous donne le code :

Dim rsTableau As ADODB.Recordset
    Set rsTableau = New ADODB.Recordset
    rsTableau.CursorType = adOpenDynamic
    rsTableau.LockType = adLockOptimistic
    rsTableau.ActiveConnection = Con_Base
    rsTableau.Source = "select trainee.name from session, trainee where session.num_session=trainee.session_number and trainee.number_trainee = 1"
    rsTableau.Open

Je peux vous donner le code de connexion si besoin, ainsi qu'une copie d'écran des tables, bien que la requête fonctionne...

Merci d'avance

29 réponses

Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
Re,
j' ai reproduit exactement le même code dans sub Main,
et j' ai ajouter dans l' evenement Load de ma feuille Acceuil le même code de ton premier post et ça fonctionne !


Private Sub Acceuil_Load()
    Dim rsTableau As ADODB.Recordset
    Set rsTableau = New ADODB.Recordset
    rsTableau.CursorType = adOpenDynamic
    rsTableau.LockType = adLockOptimistic
    rsTableau.ActiveConnection = Con_Base
    rsTableau.Source = "select * from DROITS"
    rsTableau.Open
    MsgBox rsTableau.RecordCount '==>325
End Sub


c' est donc que ta requete qui foire :o


Essaies dans un premier temps
"select * from session"


puis
"select * from trainee"


et en dernier,
"select trainee.number_trainee, session.num_session inner join on trainee.number_trainee=session.trainee"


pour avoir au moins quelques lignes avec le number_trainee et num_session.


                         
<hr />
... Y'en a même qui disent qu'ils l'ont vu voler.
<hr />


/P>
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
nom reservé je suppose

ajoutes des `  `   (AltGr+7    ex:   `session`  )
ou des [  ]  ex: [session]

pour séparer nom des tables & champs

Renfield
Admin CodeS-SourceS- MVP Visual Basic
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
dommage d'avoir perdu tant de temps.
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
 Bonjour,


- Si ta requête SQL est valide dans Access alors
Click droit sur la fenêtre conception puis Mode Sql et tu auras
la synthaxe exacte.


-S' il y' a jointure , on n'en voit pas trace dans l' expression.
Je dirais plutôt :


"select trainee.name from session, trainee inner join  session on session.num_session=trainee.session_number where trainee.number_trainee = 1"

-Pourquoi elle fonctionne dans Access ?

Tout simplement parce qu' une requete sans jointure et sans clause fonctionnera toujours, s' il s' agit juste de faire glisser
des champs.Quand au resultat, c' est à tes risques et péril !

-la copie d'écran des tables est souhaitable, pour nous aider à y voir plus clair.







<hr />

... Y'en a même qui disent qu'ils l'ont vu voler.



<hr />





/PRE>
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
Pour les objets on mets SET, normallement...

Set rsTableau.ActiveConnection = Con_Base

Renfield
Admin CodeS-SourceS- MVP Visual Basic
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
Salut Renfield,
Je sais pa trop, mais à priori ,si c' était ça,il y' aurait du y avoir une erreur à ce niveau là.
De plus l' objet a été référencé.
Set rsTableau = New ADODB.Recordset
Mais doit-on le faire aussi au niveau de ActiveConnection ?
<hr />
... Y'en a même qui disent qu'ils l'ont vu voler.
<hr />
/PRE>
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
 Je demande ça parceque j' ai pris l' habitude de faire ceci:


   Dim rs As ADODB.Recordset
   Set rs = New ADODB.Recordset
   rs.CursorLocation = adUseClient
   rs.Open "select  ...etc..", cn, adOpenDynamic, adLockOptimistic







<hr />

... Y'en a même qui disent qu'ils l'ont vu voler.



<hr />





/PRE>
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
je fais ainsi également. Reste que c'est la seule chose qui m'ai vraiment choqué au niveau du code...

Renfield
Admin CodeS-SourceS- MVP Visual Basic
Messages postés
15
Date d'inscription
vendredi 24 juin 2005
Statut
Membre
Dernière intervention
21 mars 2008

J'ai rajouté le set pour que ce soit plus clean, et j'ai essayé avec la requete modifiée par libre_max, qui me donne toujours (methode open failed)

c'est la requête que je dois utiliser dans VB (l'autre requête n'était qu'un test)

 select * from session, trainee from session.num_session=trainee.session_number where trainee.number_trainee = 1
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
du grand n'importe quoi la clause FROM de ta requete...(la deuxieme, puisque tu en as deux....)

voir syntaxe d'un INNER JOIN

Renfield
Admin CodeS-SourceS- MVP Visual Basic
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
tu as oublié la jointure  et quelque chose encore !

select * from session, trainee.number_trainee inner join  session on session.num_session=trainee.session_number where trainee.number_trainee = 1

<hr />
... Y'en a même qui disent qu'ils l'ont vu voler.
<hr />
/PRE>
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
je parlais à niffec bien sûr
post croisé !

<hr />
... Y'en a même qui disent qu'ils l'ont vu voler.
<hr />
/PRE>
Messages postés
15
Date d'inscription
vendredi 24 juin 2005
Statut
Membre
Dernière intervention
21 mars 2008

J'ai modifié ma requête mais j'ai toujours le même soucis. çà ne peut pas venir par hasard d'un problèmes de références ou quelque chose comme çà ?
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
si avec une requete bidon (genre "SELECT * FROM `Table` ) ca passe, ca vient de ta requete...

a voir selon le message d'erreur obtenu lors du Open. Sans plus de détail, on joue en aveugle

Renfield
Admin CodeS-SourceS- MVP Visual Basic
Messages postés
15
Date d'inscription
vendredi 24 juin 2005
Statut
Membre
Dernière intervention
21 mars 2008

je n'ai une erreur que lorsqu'il y'a une jointure

erreur: Methode 'open' of  object 'recordset' failed
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
pas plus de détail dnas le message ? juste 'failed' :o  (bonne orthographe des noms de tables, etc ?)

Renfield
Admin CodeS-SourceS- MVP Visual Basic
Messages postés
15
Date d'inscription
vendredi 24 juin 2005
Statut
Membre
Dernière intervention
21 mars 2008

rectification, j'ai une erreur tout le temps, même avec un "select * from session"
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
ok, donc le soucis dans la configuration de ta connection...
elle est bien configurée et ouverte, cette connection ?

Renfield
Admin CodeS-SourceS- MVP Visual Basic
Messages postés
15
Date d'inscription
vendredi 24 juin 2005
Statut
Membre
Dernière intervention
21 mars 2008

oui configurée et ouverte, nickel. a priori çà me le fais qu'a une seule table, la table session. je suis en train de chercher pourquoi il n'y a que cette table qui pose problème
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
ka connection est configurée et ouverte d' accord,
mais l' ouverture du recordset est mal faite.
essaies avec :
rsTableau.Open "select* from session", Con_Base, adOpenDynamic, adLockOptimistic

PS; et cette capture, elle vient ?

<hr />
... Y'en a même qui disent qu'ils l'ont vu voler.
<hr />
/PRE>