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

Signaler
Messages postés
74
Date d'inscription
lundi 8 août 2011
Statut
Membre
Dernière intervention
11 février 2013
-
Messages postés
11
Date d'inscription
lundi 22 août 2011
Statut
Membre
Dernière intervention
4 septembre 2011
-
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

Messages postés
1241
Date d'inscription
mardi 10 octobre 2006
Statut
Membre
Dernière intervention
27 août 2013
6
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..
Messages postés
75
Date d'inscription
mercredi 17 août 2011
Statut
Membre
Dernière intervention
27 septembre 2011
2
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
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
75
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)
Messages postés
1241
Date d'inscription
mardi 10 octobre 2006
Statut
Membre
Dernière intervention
27 août 2013
6
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..
Messages postés
74
Date d'inscription
lundi 8 août 2011
Statut
Membre
Dernière intervention
11 février 2013
4
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
Messages postés
74
Date d'inscription
lundi 8 août 2011
Statut
Membre
Dernière intervention
11 février 2013
4
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
Messages postés
74
Date d'inscription
lundi 8 août 2011
Statut
Membre
Dernière intervention
11 février 2013
4
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?
Messages postés
1241
Date d'inscription
mardi 10 octobre 2006
Statut
Membre
Dernière intervention
27 août 2013
6
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..
Messages postés
781
Date d'inscription
lundi 22 janvier 2007
Statut
Membre
Dernière intervention
30 octobre 2013
3
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 & "'" 
Messages postés
74
Date d'inscription
lundi 8 août 2011
Statut
Membre
Dernière intervention
11 février 2013
4
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?
Messages postés
1241
Date d'inscription
mardi 10 octobre 2006
Statut
Membre
Dernière intervention
27 août 2013
6
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..
Messages postés
74
Date d'inscription
lundi 8 août 2011
Statut
Membre
Dernière intervention
11 février 2013
4
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?
Messages postés
781
Date d'inscription
lundi 22 janvier 2007
Statut
Membre
Dernière intervention
30 octobre 2013
3
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.
Messages postés
74
Date d'inscription
lundi 8 août 2011
Statut
Membre
Dernière intervention
11 février 2013
4
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
Messages postés
74
Date d'inscription
lundi 8 août 2011
Statut
Membre
Dernière intervention
11 février 2013
4
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
Messages postés
74
Date d'inscription
lundi 8 août 2011
Statut
Membre
Dernière intervention
11 février 2013
4
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.
Messages postés
781
Date d'inscription
lundi 22 janvier 2007
Statut
Membre
Dernière intervention
30 octobre 2013
3
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.
Messages postés
11
Date d'inscription
lundi 22 août 2011
Statut
Membre
Dernière intervention
4 septembre 2011

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 & "');"