Erreur Recordset selection de données VB6 base Access

Résolu
niffec
Messages postés
15
Date d'inscription
vendredi 24 juin 2005
Statut
Membre
Dernière intervention
21 mars 2008
- 18 mars 2008 à 10:03
LIBRE_MAX
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
- 19 mars 2008 à 13:47
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

LIBRE_MAX
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
18 mars 2008 à 17:52
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>
3
Renfield
Messages postés
17287
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
71
19 mars 2008 à 08:27
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
3
Renfield
Messages postés
17287
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
71
19 mars 2008 à 11:16
dommage d'avoir perdu tant de temps.
3
LIBRE_MAX
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
18 mars 2008 à 10:33
 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>
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Renfield
Messages postés
17287
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
71
18 mars 2008 à 10:40
Pour les objets on mets SET, normallement...

Set rsTableau.ActiveConnection = Con_Base

Renfield
Admin CodeS-SourceS- MVP Visual Basic
0
LIBRE_MAX
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
18 mars 2008 à 10:50
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>
0
LIBRE_MAX
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
18 mars 2008 à 11:02
 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>
0
Renfield
Messages postés
17287
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
71
18 mars 2008 à 11:06
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
0
niffec
Messages postés
15
Date d'inscription
vendredi 24 juin 2005
Statut
Membre
Dernière intervention
21 mars 2008

18 mars 2008 à 11:29
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
0
Renfield
Messages postés
17287
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
71
18 mars 2008 à 11:34
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
0
LIBRE_MAX
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
18 mars 2008 à 11:36
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>
0
LIBRE_MAX
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
18 mars 2008 à 11:38
je parlais à niffec bien sûr
post croisé !

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

18 mars 2008 à 11:42
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 çà ?
0
Renfield
Messages postés
17287
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
71
18 mars 2008 à 11:51
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
0
niffec
Messages postés
15
Date d'inscription
vendredi 24 juin 2005
Statut
Membre
Dernière intervention
21 mars 2008

18 mars 2008 à 11:55
je n'ai une erreur que lorsqu'il y'a une jointure

erreur: Methode 'open' of  object 'recordset' failed
0
Renfield
Messages postés
17287
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
71
18 mars 2008 à 11:59
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
0
niffec
Messages postés
15
Date d'inscription
vendredi 24 juin 2005
Statut
Membre
Dernière intervention
21 mars 2008

18 mars 2008 à 11:59
rectification, j'ai une erreur tout le temps, même avec un "select * from session"
0
Renfield
Messages postés
17287
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
71
18 mars 2008 à 12:03
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
0
niffec
Messages postés
15
Date d'inscription
vendredi 24 juin 2005
Statut
Membre
Dernière intervention
21 mars 2008

18 mars 2008 à 12:13
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
0
LIBRE_MAX
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
18 mars 2008 à 12:37
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>
0