Syntaxe d'une requête select avec plusieurs tables sous VB
cs_Eric25
Messages postés175Date d'inscriptionmardi 19 octobre 2004StatutMembreDernière intervention26 juin 2006
-
24 janv. 2005 à 16:30
cs_Eric25
Messages postés175Date d'inscriptionmardi 19 octobre 2004StatutMembreDernière intervention26 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
A voir également:
Syntaxe d'une requête select avec plusieurs tables sous VB
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201578 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)
cs_Eric25
Messages postés175Date d'inscriptionmardi 19 octobre 2004StatutMembreDernière intervention26 juin 20063 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
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201578 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)
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_Eric25
Messages postés175Date d'inscriptionmardi 19 octobre 2004StatutMembreDernière intervention26 juin 20063 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.
cs_Eric25
Messages postés175Date d'inscriptionmardi 19 octobre 2004StatutMembreDernière intervention26 juin 20063 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...