Syntaxe d'une requête select avec plusieurs tables sous VB

cs_Eric25 Messages postés 175 Date d'inscription mardi 19 octobre 2004 Statut Membre Dernière intervention 26 juin 2006 - 24 janv. 2005 à 16:30
cs_Eric25 Messages postés 175 Date d'inscription mardi 19 octobre 2004 Statut Membre Dernière intervention 26 juin 2006 - 27 janv. 2005 à 13:33
Bonjour,
Je voudrais éxécuter une requête d'extraction toute bête portant sur plusieurs tables en vue d'alimenter un MsFlexgrid mais je ne connais pas la syntaxe sous VB (Jusque là, je me suis cantonner à des requêtes ne concernant qu'une seule table).
Voilà comment je l'aurais écrite sous SQL Serveur :

select Lib_Sup
from CONSOMMATEUR CO, Contenir C
where CO.Nom_Conso="BOB"
and CO.Pre_Conso="Bob"
and CO.Paye_Com=0
and CO.Num_Com = C.Num_Com

voilà comment j'avais commencé sous VB:
Rs_Con.open
Rs_Com.Open "select * from [CONSOMMATEUR CO, Contenir C], where [CO.Nom_Conso]=LbNom and [CO.Pre_Conso]=LbPre and [CO.Paye_Com]=0 and [CO.Num_Com] = [C.Num_Com] ", Cn, adOpenDynamic, adLockOptimistic
...

mais forcement ce n'est pas aussi simple...

Pouvez-vous me donner un petit coup de pouce...
Merci d'avance

7 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
24 janv. 2005 à 18:29
Salut
A mon avis, tu as mal interprété l'utilisation des corchets [ et ] : Ils permettent de cadrer le nom d'un champ dont la synatxe ne serait pas compatible avec SQL, par exemple quand le champ comporte des espaces. Seul le champ doit être encadré (mais ça ne coute rien d'en mettre partout).
D'autre part, SQL oblige à cadrer les données avec des ' lorsqu'il s'agit de champ type texte. Il n'en faut pas pour les champs numériques. (pour les dates, c'est #)Dans l'exemple CO.Nom_Conso '" & LbNom, Conso est suivi : du, puis d'un espace (optionel), d'un ' pour séparateur de texte SQL et d'un " pour ressortir de la chaine VB.
Bien sûr, pour rerentrer dans la chaine VB : " puis ' ...
Et enfin, quand, sous VB, tu veux insérer le contenu d'une variable VB, il faut ressortir de la chaine pour préciser la variable (genre : "ma requète " & maVar & " la suite" )
Rs_Com.Open "select * from CONSOMMATEUR CO, Contenir C, where CO.Nom_Conso '" & LbNom & "' and CO.Pre_Conso '" & LbPre & "' and CO.Paye_Com = 0 and CO.Num_Com = C.Num_Com", Cn, adOpenDynamic, adLockOptimistic

Vala
Jack
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage. (Socrate)
0
cs_Eric25 Messages postés 175 Date d'inscription mardi 19 octobre 2004 Statut Membre Dernière intervention 26 juin 2006 3
24 janv. 2005 à 18:48
Merci, merci, merci beaucoup...

Y'a des choses que je savais car j'ai écrit la requête à la "va vite" mais pour le reste, merci...
J'ai perdu quelques heures sur ce pb tout simple...
0
cs_Eric25 Messages postés 175 Date d'inscription mardi 19 octobre 2004 Statut Membre Dernière intervention 26 juin 2006 3
24 janv. 2005 à 19:05
Malheureusement, ca ne marche pas... VB me met nom de colonne incorrect pour Paye_Com et Num_Com, or ce sont des champs...
J'ai essayé sans les alias et c'est le même problème...
Y'a t'il encore un pb de syntaxe (hormis la virgule dèrrière CONTENIR C qui doit etre en trop...)????

Voici le code en plusieurs (+ clair à la lecture) :
Rs_Com.Open "select * from CONSOMMATEUR CO, Contenir C
where CO.Nom_Conso = '" & LbNom & "'
and CO.Pre_Conso = '" & LbPre & "'
and CO.Paye_Com = 0
and CO.Num_Com = C.Num_Com",
Cn, adOpenDynamic, adLockOptimistic

merci d'avance
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
24 janv. 2005 à 19:36
lol, j'espère que tu n'as pas saisi ça comme tu viens de le coller ?
Car les changements de ligne en plein milieu d'une chaine VB n'est pas accepté par l'éditeur !
Alors, deux solutions :
-1- Tu écris tout sur la même ligne (pas facile à relire)
-2- Tu utilises le symbole _ en fin de ligne pour faire une coupure.
Par contre, cette coupure ne doit pas apparaitre à l'intérieur d'une chaine !
Donc, en fin de ligne : il faut :
- fermer la chaine
- ajouter le caractère de concaténation de chaine &
- un espace suivi du _
Exemple :
MaChaine = "Début gnagnagna trop longue" & _
"je suis passé à la ligne de l'éditeur mais pas du texte"
est la même chose que
MaChaine = "Début gnagnagna trop longueje suis passé à la ligne de l'éditeur mais pas du texte"
Tu auras remarqué qu'il n'y a pas d'espace entre 'longue' et 'je' : suffit de penser à en rajouter un après longue (je te dis ça parce que si tu l'oublies dans ta requète, ça va pas marcher)

Un conseil : Avant de te lancer dans de la gestion de base de données, commence par faire des tests de manipulation de chaine, apprendre à manipuler l'éditeur, tu gagneras du temps (et moi aussi, lol).

Vala
Jack
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage. (Socrate)
0

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

Posez votre question
cs_Eric25 Messages postés 175 Date d'inscription mardi 19 octobre 2004 Statut Membre Dernière intervention 26 juin 2006 3
24 janv. 2005 à 22:42
Non, bien sur, je n'ai pas sauté de lignes, c'était juste pour faciliter la lecture et pour faire apparaître plus facilement une éventuelle erreur de syntaxe (mis à part le saut de ligne bien sur qui ne fonctionnerait pas).
Je ne comprends toujours pas mon erreur...
Elle est peut-etre au niveau de ma base SQL serveur et des connexions des tables puisque selon vous la syntaxe est correcte. Ma connexion à la base n'est pas en cause. Il n'y a pas non plus d'erreurs au niveau du MLD et du contenu des tables, les clés etrangères sont là où elles doivent être...
Je continue à chercher d'où peut provenir l'erreur.

Merci pour votre aide
0
Manu94600 Messages postés 107 Date d'inscription lundi 9 juin 2003 Statut Membre Dernière intervention 20 février 2008
26 janv. 2005 à 17:55
Je crois que c'est au niveau de * car kan il ya plusieurs tables il est preferablede mettre table1.* et table2.*.

Mais je suis pas sure, Merci de me tenir au courant.

++

Manu
0
cs_Eric25 Messages postés 175 Date d'inscription mardi 19 octobre 2004 Statut Membre Dernière intervention 26 juin 2006 3
27 janv. 2005 à 13:33
La requête a fini par passer tel quel, sans autres modifications, au redémarrage du PC... Je ne comprends pas ce qui s'est passé, c'est un mystère
Peut être un bug au niveau de SQL Serveur ou un problème dans le genre...

Merci
0
Rejoignez-nous