Requête de recherche SQL sous VB6 [Résolu]

Messages postés
74
Date d'inscription
lundi 8 août 2011
Dernière intervention
11 février 2013
- - Dernière réponse : swappp
Messages postés
11
Date d'inscription
lundi 22 août 2011
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
Afficher la suite 

Votre réponse

18 réponses

Meilleure réponse
Messages postés
1241
Date d'inscription
mardi 10 octobre 2006
Dernière intervention
27 août 2013
3
Merci
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..

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 106 internautes ce mois-ci

Commenter la réponse de lolokun
Messages postés
75
Date d'inscription
mercredi 17 août 2011
Dernière intervention
27 septembre 2011
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 106 internautes ce mois-ci

Commenter la réponse de marion8316
Messages postés
14010
Date d'inscription
samedi 29 décembre 2001
Dernière intervention
28 août 2015
3
Merci
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)

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 106 internautes ce mois-ci

Commenter la réponse de cs_Jack
Messages postés
1241
Date d'inscription
mardi 10 octobre 2006
Dernière intervention
27 août 2013
0
Merci
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..
Commenter la réponse de lolokun
Messages postés
74
Date d'inscription
lundi 8 août 2011
Dernière intervention
11 février 2013
0
Merci
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
Commenter la réponse de tastastoussa
Messages postés
74
Date d'inscription
lundi 8 août 2011
Dernière intervention
11 février 2013
0
Merci
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
Commenter la réponse de tastastoussa
Messages postés
74
Date d'inscription
lundi 8 août 2011
Dernière intervention
11 février 2013
0
Merci
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?
Commenter la réponse de tastastoussa
Messages postés
1241
Date d'inscription
mardi 10 octobre 2006
Dernière intervention
27 août 2013
0
Merci
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..
Commenter la réponse de lolokun
Messages postés
781
Date d'inscription
lundi 22 janvier 2007
Dernière intervention
30 octobre 2013
0
Merci
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 & "'" 
Commenter la réponse de 4u4me4us
Messages postés
74
Date d'inscription
lundi 8 août 2011
Dernière intervention
11 février 2013
0
Merci
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?
Commenter la réponse de tastastoussa
Messages postés
1241
Date d'inscription
mardi 10 octobre 2006
Dernière intervention
27 août 2013
0
Merci
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..
Commenter la réponse de lolokun
Messages postés
74
Date d'inscription
lundi 8 août 2011
Dernière intervention
11 février 2013
0
Merci
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?
Commenter la réponse de tastastoussa
Messages postés
781
Date d'inscription
lundi 22 janvier 2007
Dernière intervention
30 octobre 2013
0
Merci
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.
Commenter la réponse de 4u4me4us
Messages postés
74
Date d'inscription
lundi 8 août 2011
Dernière intervention
11 février 2013
0
Merci
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
Commenter la réponse de tastastoussa
Messages postés
74
Date d'inscription
lundi 8 août 2011
Dernière intervention
11 février 2013
0
Merci
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
Commenter la réponse de tastastoussa
Messages postés
74
Date d'inscription
lundi 8 août 2011
Dernière intervention
11 février 2013
0
Merci
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.
Commenter la réponse de tastastoussa
Messages postés
781
Date d'inscription
lundi 22 janvier 2007
Dernière intervention
30 octobre 2013
0
Merci
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.
Commenter la réponse de 4u4me4us
Messages postés
11
Date d'inscription
lundi 22 août 2011
Dernière intervention
4 septembre 2011
0
Merci
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 & "');"
Commenter la réponse de swappp

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.