Requête de recherche SQL sous VB6

Résolu
tastastoussa Messages postés 73 Date d'inscription lundi 8 août 2011 Statut Membre Dernière intervention 11 février 2013 - 18 août 2011 à 10:39
swappp Messages postés 11 Date d'inscription lundi 22 août 2011 Statut Membre Dernière intervention 4 septembre 2011 - 27 août 2011 à 21:39
Salut tout le monde,
je suis entrain de créer une application dans laquelle,je dois permettre à l'utilisateur de chercher un ou plusieurs enregistrement d'une table (sous access)selon les critéres qu'il saisit auparavant.
j'ai créé mes zonestextes que doit remplir l'utilisateur par ses critéres,et une datagrid.
j'ai placé un ADODC pour y mettre ma requête,qui a la forme
select * from table where couleur='"&text1.text"' and energie='"&text2.text"'
mais quand je pase au code j'ai ecris
adodc.recordsource="select * from table where couleur='"&text1.text"' and energie='"&text2.text"'"
adodc.refresh
il m'affiche un message d'erreur,la faute est au niveau de syntaxe je pense.
Alors pour une requête SQL select comportant plusieurs conditions comment je dois ecrire mes conditions,sachant que j'ai essayé d'ajouter des paranthéses mais tojours meme probleme.
Merci bien de m'aider

18 réponses

lolokun Messages postés 1241 Date d'inscription mardi 10 octobre 2006 Statut Membre Dernière intervention 27 août 2013 7
18 août 2011 à 10:53
Et donc, as tu essayé avec un espace? qu'est ce que ça donne?
Tes champs "couleur" et "énergie" dans ta table sont bien de type texte?

Ha autre chose, je me demande si le mot "table" n'est pas un mot réservé, ce n'est pas vraiment explicite comme nom de table essayes aussi en la renommant


L'expérience, c'est une connerie par jour, mais jamais la même..
3
marion8316 Messages postés 75 Date d'inscription mercredi 17 août 2011 Statut Membre Dernière intervention 27 septembre 2011 1
18 août 2011 à 11:09
Bonjour,

Il me semble qu'il manque le caractère "&" après le nom de la zone.

Votre requête :
select * from table where couleur='"&text1.text"' and energie='"&text2.text"'

Nouvelle requête :
select * from table where couleur '" & text1.text & "' and energie '" & text2.text & "'

A tester.

Didier
3
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
18 août 2011 à 11:17
Salut

Le symbole de 'tous' sous SQL est le %.
Il te faut donc remplacer le contenu de ta TextBox par ce symbole si elle est vide au moment de la soumission.
De plus, cela ne fonctionnera QUE si tu remplaces tes = par des Like

Je ne t'écris pas la ligne corrigée ainsi parce que j'ai l'impression que tu attends que ça vienne tout cuit. Creuse toi un peu la tête avant de poser des questions où il n'y a qu'un problème de syntaxe à corriger.

Vala
Jack, MVP VB
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)
3
lolokun Messages postés 1241 Date d'inscription mardi 10 octobre 2006 Statut Membre Dernière intervention 27 août 2013 7
18 août 2011 à 10:43
Bonjour,

Et quel est donc ce message d'erreur qui est affiché?
tu as mis un espace entre ton & et le text1.text ?

PS : une remarque comme ça, si tu as plusieurs textbox, penses à les renommer de façon plus claire..


L'expérience, c'est une connerie par jour, mais jamais la même..
0

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

Posez votre question
tastastoussa Messages postés 73 Date d'inscription lundi 8 août 2011 Statut Membre Dernière intervention 11 février 2013 4
18 août 2011 à 10:48
non j'ai pas mis un espace.il me dit qu'il y a une erreur:fin de l'instruction
et colore la partie where en rouge
0
tastastoussa Messages postés 73 Date d'inscription lundi 8 août 2011 Statut Membre Dernière intervention 11 février 2013 4
18 août 2011 à 10:57
Alors quande j'ai mis l'espace,on m'affiche plus le message,mais en execution ça n'affiche pas le resultat.
Sachant que quand j'ai essayé avec un seul critére c'est à dire j'ai ecrit just:
select * from table where couleur='"&text1.text"'
ça donne le resultat desiré,alors je pense que ça manque des parenthéses peut être,je vais essayer
0
tastastoussa Messages postés 73 Date d'inscription lundi 8 août 2011 Statut Membre Dernière intervention 11 février 2013 4
18 août 2011 à 11:02
en fait le nom de ma table c'est Voiture.
Alors j'ai ajouter des parenthéses au debut et à la fin de la partie where
la recherche est bien affichée que si je rmpli tous les critéres.
Mais ce que je voulais plutôt c'est de m'afficher le resultat même si je n'impose qu'un seul critére de recherche.
avez vous une idée SVP?
0
lolokun Messages postés 1241 Date d'inscription mardi 10 octobre 2006 Statut Membre Dernière intervention 27 août 2013 7
18 août 2011 à 11:06
Il manque un & :
select * from table where couleur='" & text1.text & "' AND energie='" & text2.text & "'"

Attention cependant, avant de lancer ta requete il te faudra surement vérifier si une donnée a bien été saisie dans ta textbox

L'expérience, c'est une connerie par jour, mais jamais la même..
0
4u4me4us Messages postés 780 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 30 octobre 2013 3
18 août 2011 à 11:06
Dans ce cas il faut que à la place du and tu mets un or.

Si je reprends la ligne que tu as posté (corrigée) cela donne
adodc.recordsource="select * from table where couleur='" & text1.text & "' OR energie='" & text2.text & "'" 
0
tastastoussa Messages postés 73 Date d'inscription lundi 8 août 2011 Statut Membre Dernière intervention 11 février 2013 4
18 août 2011 à 11:10
oui j'ai deja ajouté les &.
exactement c ça mon probléme,mon code ne me permet d'effectuer la recherche que si tous les champs sont remplis,et ceci ne me convient pas en fait.
Alors comment puisse-je faire pour permettre le lancement d'une recherche méme avec des champs vides(en fait les champs vides je les considére comme "tous")
y a _t_il une possibilité d'initialiser mes champs à une chose comme ça?
sinon que proposez vous SVP?
0
lolokun Messages postés 1241 Date d'inscription mardi 10 octobre 2006 Statut Membre Dernière intervention 27 août 2013 7
18 août 2011 à 11:15
Une condition if avant de lancer ta requete :

if textbox="" -> ça veut dire que ton champ est vide donc ne pas tenir compte de ce champ lors de ta requete select


L'expérience, c'est une connerie par jour, mais jamais la même..
0
tastastoussa Messages postés 73 Date d'inscription lundi 8 août 2011 Statut Membre Dernière intervention 11 février 2013 4
18 août 2011 à 11:18
en fait si je remplace le and par or ça va m'afficher les enregistrements contenant même l'un des critéres,alors que je veux afficher seulement les enregistrement ou toutes mes critéres s'interceptent.
n'est-ce-pas?
0
4u4me4us Messages postés 780 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 30 octobre 2013 3
18 août 2011 à 11:26
Comme dit lolokun il faut que tu céer ta requête avec des if. Tu ne peux pas fair une req. au debut de ta sub, tu dois l'adapte aux valeurs saisie par l'utilisateur. Tu dois donc au travers de if adapté la req.

Cela est très facile à faire. Je pourrais te le poster mais comme dis jack, je pense qu'il serrait bon que tu cherche un peut (C pour ton bien)

De plus tu as tout les éléments.
0
tastastoussa Messages postés 73 Date d'inscription lundi 8 août 2011 Statut Membre Dernière intervention 11 février 2013 4
18 août 2011 à 11:33
Merci bien ,oui j'ai deja commencé à ecrire mes if,j'espére que j'arrive.
juste une remarque,assurez vous que je ne cherche jamais avoir un code pris comme pense JACK,c pas moi qui prend des codes prêts.
Bref merci à vous tous
0
tastastoussa Messages postés 73 Date d'inscription lundi 8 août 2011 Statut Membre Dernière intervention 11 février 2013 4
18 août 2011 à 11:47
alors j'ai écris ma structure if mais je me bloque.
en effet si je la fais imbriqué je ne vais accepter qu'un seul champ vide.
et si je la fait chaque cas à part,c'est à dire je fais
If (Text1.Text = "") Then
Adodc1.RecordSource = " select* from Voiture where (Energie='" & Text2.Text & "' and Marque='" & Text3.Text & "' and Puissance_fiscale='" & Text4.Text & "'and Num_imatriculation='" & Text5.Text & "'and Nombre_de_places='" & Text6.Text & "'); "
Adodc1.Refresh
End If

Dans ce cas je viens de mettre le champ 2 par exemple qui pourrait lui même étre vide.
j'espére avoir bien expliquer mon probléme.
Merci d'avance
0
tastastoussa Messages postés 73 Date d'inscription lundi 8 août 2011 Statut Membre Dernière intervention 11 février 2013 4
18 août 2011 à 11:56
Bon j'ai changé mon code en utilisant le fait que si le champ est vide je le remplace par % et grâce aux instructions if et ça fonctionne.
Merci beaucoup pour tous ceux qui m'ont aider.
0
4u4me4us Messages postés 780 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 30 octobre 2013 3
18 août 2011 à 12:01
Tu n'est pas encore dans le bon cap. Mais presque(courrage)
Le truc(celon moi et en te proposera surement d'autre), c d'avoir une bête variable string.

Dans cette variable tu ajoute du texte au fure et à mesure de tes if. Seulement a la fin des if tu executre ta req. Si cette variable s'appelle MaReq cela te donnera après les if.
Adodc1.RecordSource = MaReq

Ainsi si tu dois ajouter ou supprmer des text.text dans le future cela sera simple

De plus, tu n'es pas obligé de faire des structures if comme celle qui suit

if ..... then
else
end if

tu peux faire des if comme celà:
if condition1 = vrai then ajoute "Bonjour" à ma MaReq 
if condition2 = vrai then ajoute "Madame" a ma MaReq 
etc.
0
swappp Messages postés 11 Date d'inscription lundi 22 août 2011 Statut Membre Dernière intervention 4 septembre 2011
27 août 2011 à 21:39
if Text1.Text = vbNullString then Text1.Text = "%"
if Text2.Text vbNullString then Text2.Text "%"
if Text3.Text vbNullString then Text3.Text "%"
if Text4.Text vbNullString then Text4.Text "%"
if Text5.Text vbNullString then Text5.Text "%"
if Text6.Text vbNullString then Text6.Text "%"
Adodc1.RecordSource = "select * from Voiture where Energie like '" & Text2.Text & _
"' and Marque like '" & Text3.Text & "' and Puissance_fiscale like '" & Text4.Text & _
"' and Num_imatriculation like '" & Text5.Text & "' and Nombre_de_places like '" & Text6.Text & "');"
0
Rejoignez-nous