Ma chaine sql pose problème (from)

Signaler
Messages postés
152
Date d'inscription
mardi 4 novembre 2008
Statut
Membre
Dernière intervention
10 avril 2017
-
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
-
Bonjour tout le monde et bonne année,

J'ai cette variable qui contient une chaine sql :
sql "SELECT * From ingredient INNER JOIN detail_recette (ON ingredient.id detail_recette.ref_ingredient) INNER JOIN recette (ON detail_recette.ref_recette = recette.id Where recette.id) = " & listRecettes(0).ItemData(listRecettes(0).ListIndex)

ça me donne ceci :
SELECT * From ingredient INNER JOIN detail_recette (ON ingredient.id detail_recette.ref_ingredient) INNER JOIN recette (ON detail_recette.ref_recette recette.id Where recette.id) = 2

Erreur de syntaxe dans la clause FROM

Sauriez-vous me dire comment résoudre ce problème svp ?

Un tout grand merci d'avance.

beegees

18 réponses

Messages postés
14761
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
21 janvier 2021
151
Bonjour,

Bien que je ne comprenne pas toute ta chaine :
SELECT * From ingredient INNER JOIN detail_recette (ON ingredient.id =
detail_recette.ref_ingredient) INNER JOIN recette (ON
detail_recette.ref_recette recette.id Where recette.id <strike>)</strike> 2)

Ne serais-ce pas plus exacte (mauvais emplacement de la parenthèse fermante) (ta question serais mieux sur www.sqlfr.com) ?

Ou alors :
SELECT * From ingredient INNER JOIN detail_recette (ON ingredient.id =
detail_recette.ref_ingredient) INNER JOIN recette (ON
detail_recette.ref_recette recette.id) Where recette.id 2

Ou encore
SELECT * From ingredient ,detail_recette INNER JOIN detail_recette (ON ingredient.id =
detail_recette.ref_ingredient) INNER JOIN recette (ON
detail_recette.ref_recette recette.id Where recette.id) 2

Je répete que je ne connais pas assez cette syntaxe pour être sûr de ne pas dire une bêtise.

http://nhen0039.chez-alice.fr/index.php
Messages postés
152
Date d'inscription
mardi 4 novembre 2008
Statut
Membre
Dernière intervention
10 avril 2017
1
Bonjour,

Merci pour ta réponse.

C'est sur ce code que je dois travailler :
sql "SELECT * From ingredient INNER JOIN detail_recette (ON ingredient.id detail_recette.ref_ingredient) INNER JOIN recette (ON detail_recette.ref_recette = recette.id Where recette.id = )" &

pour avoir ensuite un résultat convenable ici :

SELECT * From ingredient INNER JOIN detail_recette (ON ingredient.id =
detail_recette.ref_ingredient) INNER JOIN recette (ON
detail_recette.ref_recette recette.id Where recette.id) 2

Ma question porte donc surtout sur du code SQL dans à l'intérieure du code VB6.

Ce que tu me propose ne m'avance malheureusement pas car c'est dans le code VB que je dois apporter la modification.

Merci encore pour ton aide.

beegeezzz
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
37
supprime les parenthèses, elles ne sont pas nécessaires.

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
37
en plus elles sont pas bien placées et t'induisent en erreur

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
Messages postés
14761
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
21 janvier 2021
151
Bonjour,

Essaye peut être :
sql = "SELECT * From ingredient,detail_recette,recette INNER JOIN detail_recette (ON
ingredient.id = detail_recette.ref_ingredient) INNER JOIN recette (ON
detail_recette.ref_recette recette.id) Where recette.id " &
listRecettes(0).ItemData(listRecettes(0).ListIndex)

http://nhen0039.chez-alice.fr/index.php
Messages postés
152
Date d'inscription
mardi 4 novembre 2008
Statut
Membre
Dernière intervention
10 avril 2017
1
Casy,

Merci pour ta réponse.

Voici le message d'erreur que j'obtiens :

Erreur d'exécution 3075 :
Erreur de syntaxe (opérateur absent) dans l'expression 'ingredient.id detail_recette.ref_ingredient INNER JOIN recette detail_recette.ref_recette recette.id

avec ce code (donc sans les parenthèses) :
sql "SELECT * From ingredient INNER JOIN detail_recette ON ingredient.id detail_recette.ref_ingredient INNER JOIN recette ON detail_recette.ref_recette = recette.id Where recette.id = " & listRecettes(0).ItemData(listRecettes(0).ListIndex)

Qu'en penses-tu ?

Merci pour ton aide.

beegeezzzz
Messages postés
152
Date d'inscription
mardi 4 novembre 2008
Statut
Membre
Dernière intervention
10 avril 2017
1
Re,

Toujours la même erreur :

Erreur de syntaxe dans la clause FORM

avec ton code :

sql = "SELECT * From ingredient,detail_recette,recette INNER JOIN
detail_recette (ON ingredient.id = detail_recette.ref_ingredient) INNER
JOIN recette (ON detail_recette.ref_recette = recette.id) Where
recette.id = " & listRecettes(0).ItemData(listRecettes(0).ListIndex)

Merci quand même.

beegeezzz
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
37
sql = "SELECT * From ingredient INNER JOIN detail_recette ON
ingredient.id = detail_recette.ref_ingredient INNER JOIN recette ON
detail_recette.ref_recette recette.id Where recette.id " &
listRecettes(0).ItemData(listRecettes(0).ListIndex

Cette syntaxe est correcte.

Qui te renvoie l'erreur, c'est VB ou c'est ton moteur de bases de données qui te la renvoie à l'exécution de la requette.

Autre point : cette ligne de code telle qu'écrite ici doit etre écrite sur une seule ligne dans VB6, est-ce le cas ?

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
Messages postés
152
Date d'inscription
mardi 4 novembre 2008
Statut
Membre
Dernière intervention
10 avril 2017
1
Re Casy,

Merci pour ta réponse.

Chez moi, ça ne fonctionne toujours pas.

C'est Access qui me renvoie l'erreur je pense (comment le vérifier).

En VB, c'est bien en une seule ligne.

J'ai cette ligne qui fonctionne très bien mais que je ne comprends pas bien :
sql "SELECT * FROM ingredient INNER JOIN (recette INNER JOIN detail_recette ON recette.id detail_recette.ref_recette) ON ingredient.id = detail_recette.ref_ingredient WHERE recette.id = " & listRecettes(0).ItemData(listRecettes(0).ListIndex)

beegeezzz
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
37
J'ai fait quelques tests et effectivement Access semble assez susceptible avec les jointures. Visiblement il accepte mal les jointures imbriquées.

Cette requête ne marche pas sous Access (elle marche sous SQLServer par contre) :SELECT * FROM ingredient INNER JOIN detail_recette ON ingredient.id detail_recette.ref_ingredient INNER JOIN recette ON detail_recette.ref_recette recette.id
WHERE recette.id=2

Cette requête marche sous Access :SELECT * FROM (ingredient INNER JOIN detail_recette ON ingredient.id detail_recette.ref_ingredient) INNER JOIN recette ON detail_recette.ref_recette recette.id
WHERE recette.id=2

Les 2 requêtes sont intrinsèquement identiques

je ne saurais te donner plus d'explications

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
Messages postés
152
Date d'inscription
mardi 4 novembre 2008
Statut
Membre
Dernière intervention
10 avril 2017
1
Re,

Merci pour tes explications.

Si quelqu'un trouve, je suis preneur.

Merci encore à toi casy.

beegeezzzz
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
Bonjour,

essaies avec
WHERE ingredient.id = " &




au lieu de WHERE recette.id = " & listRecettes(0).ItemData(listRecettes(0).ListIndex)

vérifies ensuite la concordance de type..
A mon avis listRecettes(0).ItemData(listRecettes(0).ListIndex)
renvoie une chaine.





<hr />




[] Ce qui va sans dire. va mieux en le disant.


<hr />
Messages postés
152
Date d'inscription
mardi 4 novembre 2008
Statut
Membre
Dernière intervention
10 avril 2017
1
Bonjour,

Je vais essayer ce que tu me proposes.

En attendant, voici un autre petit problème que j'ai posté sur SQL mais qui je pense devrais ne pas vous poser de problème :

http://www.sqlfr.com/forum/sujet-SAURIEZ-VOUS-AIDER-CREER-CHAINE-SQL-SVP_1249682.aspx

Merci pour tout.

beegeezzz
Messages postés
45
Date d'inscription
samedi 6 juillet 2002
Statut
Membre
Dernière intervention
4 décembre 2011

Bonjour

Efectivement elle pose probème.

sql = "SELECT * FROM ingredient INNER JOIN
(recette INNER JOIN detail_recette ON recette.id = detail_recette.ref_recette)
ON ingredient.id = detail_recette.ref_ingredient
WHERE recette.id ='
" & listRecettes(0).ItemData(listRecettes(0).ListIndex) &"'"

Comme cela le WHERE sera interprété comme une valeur de condition
Bien a vous
hgrandsart
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
le recette.id étant nuùérique, convertis alors ton item en Integer ou en Long ..

<hr />

[] Ce qui va sans dire. va mieux en le disant.

<hr />
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
non non CHEF !
detail_recette.ref_recette étant de type Texte,
detail_recette.ref_recette = 10EST FAUX
Tu as bien des numéros dans la colonne ref_recette de
la table detail_recette, mais ils sont alignés à gauche.
C' est donc du texte.

Changes donc le type de ce champ en Entier.
Les données étant en chiffre, tu ne risques pas de les perdre.

Et dis-nous au passage ce qu' il y a dans ta listerecettes(0),
du rexte ou des numéros ?

NB:Je n' arrivais pas à poster sur l' autre lien.


Ma réponse est donc valable pour les deux..





<hr />




[] Ce qui va sans dire. va mieux en le disant.


<hr />
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
cette expression te renvoie tout de la tables ingredient et de la table detail_recette liées sur l' identifiant ingredient (qui n' a pas la même désignation dans les dux tables) et avec le critère ref_recette=ce que tu veux ..

SELECT ingredient.id, ingredient.nom, ingredient.stock, detail_recette.id, detail_recette.ref_recette, detail_recette.quantite, detail_recette.ref_ingredient
FROM ingredient INNER JOIN detail_recette ON ingredient.id = detail_recette.ref_ingredient
WHERE (((detail_recette.ref_recette)=2));

Tu peux par la suite retirer les champs que tu ne désires pas voir..

Ceci bien sûr après avoir suivi les recommandations du post précédent.

A+





<hr />




[] Ce qui va sans dire. va mieux en le disant.


<hr />
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
et cette expression ajoute aux deux autres la table recette liée à detail_recette..(detail_recette.ref_recette = recette.id)

SELECT ingredient.id, ingredient.nom, ingredient.stock, detail_recette.id, detail_recette.ref_recette, detail_recette.quantite, detail_recette.ref_ingredient, recette.idFROM (ingredient INNER JOIN detail_recette ON ingredient.id detail_recette.ref_ingredient) INNER JOIN recette ON detail_recette.ref_recette recette.id
WHERE (((recette.id)=2));

<hr />

[] Ce qui va sans dire. va mieux en le disant.

<hr />