Requète access

Résolu/Fermé
gazzzz Messages postés 4 Date d'inscription mardi 26 janvier 2010 Statut Membre Dernière intervention 26 janvier 2010 - 26 janv. 2010 à 16:50
 gazzzz - 27 janv. 2010 à 21:46
Bonjour à tous, je suis nouveau sur ce forum je vais donc commencer par me présenter:
J'habite l'ardèche, j'ai 21 ans et comme vous je suis accros d'infos!!

J'ai un petit problème, je souhaite réaliser une base de données pour classer des films cependant je bloc sur une requête:
J'ai une table films_HD avec plusieurs champs dont Acteur1, Acteur2, Acteur3.
Je souhaite pouvoir retrouver un film en saisissant un nom d'acteur dans une boite de dialogue. J'en suis la:

SELECT *
FROM Films_HD
WHERE (((Films_HD.Acteur1) Like "*"+[Genre du film?]+"*"));

Cella fonctionne nikel à la condition que le nom d'acteur que j'ai saisie soit dans le champ Acteur1, or je voudrais que la recherche se fasse sur les 3 champs Acteur1, Acteur2, Acteur3, j'ai donc essayé ceci:

SELECT *
FROM Films_HD
WHERE (((Films_HD.Acteur1 Or Films_HD.Acteur2 Or Film_HD.Acteur3) Like "*"+[Genre du film?]+"*"));

Mais cella ne marche pas, je pense qu'il faudrais que je range la valeur de ma boite de dialogue dans une variable et que je fasse les tests sur cette variable... cependant je ne sais pas comment faire, j'ai quelques notions access mais c'est vite limité.

Merci pour votre aide!!!
A++

8 réponses

Salut l'ardéchois.
dans ta dernière condition fais plutot Acteur1+Acteur2+Acteur3 like "*"+[Genre du film]+"*"
c'est plus rapide que (Acteur1 like "*"+[Genre du film]+"*") or (Acteur2 like "*"+[Genre du film]+"*") or (Acteur3 like "*"+[Genre du film]+"*")
1
gazzzz Messages postés 4 Date d'inscription mardi 26 janvier 2010 Statut Membre Dernière intervention 26 janvier 2010
26 janv. 2010 à 18:29
Salut a toi fiu!!
Merci pour ta réponse!
Je viens de m'apercevoir que j'ai fais une erreur, il faut remplacer les Acteur1, Acteur2, Acteur3 par Genre1, Genre2, Genre3 mais bref la n'est pas le problème!
En fait dans ma table films_HD j'ai 3 champs pour les genres et je souhaite pouvoir retrouver un film par son genre.
Exemple dans la boite de dialogue qui me demande:
"genre du film" je tape ==> horrerur et sa me sors tout mes films d'horreur
Pour le moment, avec cette requête la:

SELECT *
FROM Films_HD
WHERE (((Films_HD.Genre1) Like "*"+[Genre du film?]+"*"));

Sa marche seulement si "horreur" est en genre1 (ce qui est normale), je voudrais que sa marche même si horreur est en genre2 ou en genre3. J'ai donc éssayé ceci:

SELECT *
FROM Films_HD
WHERE (((Films_HD.Genre1 Or Films_HD.Genre2 Or Film_HD.Genre3) Like "*"+[Genre du film?]+"*"));

As tu mieux compris mon problème?
0
Oui j'avais compris ton problème.
Le mien est que je ne connais rien à Access.
Mais l'expression que tu formulais (et que tu formules à nouveau), à savoir
WHERE (champx OR champy OR champz) LIKE motif
ne peut pas fonctionner
une méthode simple pour le contourner est
WHERE (champx + champy + champz) LIKE motif
0
gazzzz Messages postés 4 Date d'inscription mardi 26 janvier 2010 Statut Membre Dernière intervention 26 janvier 2010
26 janv. 2010 à 19:26
Non, ces 2 requêtes ne font pas la même chose...
Dans ma table film_HD, un film comme "massacre à la tronçonneuse" aura:
Genre1 = Culte
Genre2 = Horreur
Genre3 = Gore

Ce que je veux c'est que ce film soit proposé quand je tape "horreur" dans ma boite de dialogue
Avec ta requète, pour que le film soit sélectionné il faut que:
genre1=horreur ET genre2 = horreur ET genre3=horreur

Moi ce que je veux c'est genre1 OU genre2 OU genre3 = horreur

D'après mes recherche je suis obligé de stocké le contenue de l'input box dans une variable car autrement access ne peux pas l'utiliser pour plusieurs tests consécutifs.
0

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

Posez votre question
Désolé d'être un gros nul en Access :-(

en SQL standard, la solution serait de concaténer les 3 genres et de voir si le genre cherché se trouve dans la concaténation :
WHERE genre1 || genre2 || genre3 like '%' || genre_du_film || '%'
tu noteras au passage qu'en SQL la concaténation se fait avec || et non +, les chaînes sont délimitées par des apostrophe (') et non des guillemets (") et le joker pour le like est le pourcentage (%) et non l'astérisque (*).

Manque de bol, tu travailles avec Access, et ne connaissant que trrrès mal ce produit, je me fie à ta syntaxe pour essayer de trouver une soluce.
0
gazzzz Messages postés 4 Date d'inscription mardi 26 janvier 2010 Statut Membre Dernière intervention 26 janvier 2010
26 janv. 2010 à 20:21
Merci pour ton aide, access à l'air d'une vraie usine à gazzzz! Mais j'aime bien l'interface qraphique qu'il propose pour ses BDD.
Je n'avais pas pensé à la concaténation (très bonne idée!) mais plutôt à ranger dans une variable la valeur de ma boite de dialogue. Je vais faire plus de recherches! 1000 fois Merci pour ton aide, je te tiens au courant!
A++
0
Rhyton le boyar
27 janv. 2010 à 10:27
Tu met ta requete en mode creation, apres avoir ajouter tes champs x1, x2, x3, etc, tu va dans sur un nouveau champ et tu tape x1&X2&X3 et tu as un champ concatener. si tu veux lui donner un nom particulier, devant la fomule tu tape le nom du champ et tu tape : .
ensuite tu va dans la zone critere de ce champ et tu y met comme ou like et dans le generateur d'expression tu selectionne le champ de ton formulaire. ta requete devrait marcher
0
blux Messages postés 25982 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 21 avril 2024 3 287
27 janv. 2010 à 11:04
Salut,

ta demande est compliquée car ton modèle de données n'est pas le bon.

Il te faudrait une table 'genre' avec un lien n-n entre cette table et ta table films, comme ça, tu pourrais retrouver avec une seule requête l'ensemble des films d'un genre particulier sans avoir de champ 'genre1', 'genre2' et 'genre3'...

Ca marcherait de la même façon avec acteurs...
0
Mes plus plates excuses fiu, il s'agit bien d'une concaténation!! Tu as du nez pour quelqu'un qui se dit "ne rien comprendre à access". Il fallait mettre un "&" tout simplement si j'ose dire, sans toi je n'aurais pas trouvé! Merci aussi à Blux de s'être intéressé à mon problème!

Merciiiiiiiiiiiiii
0