Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Requêtes et SQL.
Requêtes et SQL. Tout ce qui concerne vos questions sur les requêtes et le SQL sous Access se trouve ici.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 01/09/2011, 22h59   #1
Invité régulier
 
Inscription : août 2008
Messages : 25
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 25
Points : 7
Points : 7
Par défaut Requete selection avec cbobox sur liste valeurs

Bonjour,

Je bute sur un problème de selection basé sur une valeur retournée depuis un formulaire par une combobox.

Cette combobox est batie à partir d'une liste déroulante contenant 4 valeurs texte sans valeur par défaut. Si aucun choix n'est sélectionné, elle renvoie donc une valeur nulle.

J'intègre cette cbo dans la zone de critère d'une requète sélection et je voudrais avoir tous les enregistrements de la table quand aucun choix n'a été fait. Sans intégrer la cbo, on peut l'obtenir par "comme "*""

J'ai regardé dans l'excellent tutoriel de Jeannot45 mais pas trouvé la réponse!

Voila en SQL la requete:

Code sql :
1
2
3
SELECT T100_fusion.niveaufusion, T100_fusion.typefusion
FROM T100_fusion
WHERE (((T100_fusion.niveaufusion)=IIf(IsNull([Formulaires]![F110_ListeFusion]![cboniveau]),(T100_fusion.niveaufusion) LIKE "* ",[Formulaires]![F110_ListeFusion]![cboniveau])));

Si vous avez des idées, elles seront les bienvenues

Pierre dit Pedro
pedro91 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/09/2011, 17h22   #2
Rédacteur/Modérateur

 
Avatar de loufab
 
Homme Fabrice CONSTANS
Ingénieur développement logiciels
Inscription : avril 2005
Messages : 7 089
Détails du profil
Informations personnelles :
Nom : Homme Fabrice CONSTANS
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : avril 2005
Messages : 7 089
Points : 11 622
Points : 11 622
Bonjour,
As-tu lu le tuto sur l'opérateur LIKE ?

Code :
(((T100_fusion.niveaufusion)=IIf(IsNull([Formulaires]![F110_ListeFusion]![cboniveau LIKE "* ",[Formulaires]![F110_ListeFusion]![cboniveau])));
Lorsque le moteur Jet va interprété il fera :

Si F110 est null alors
Code :
(T100_fusion.niveaufusion)=(T100_fusion.niveaufusion) LIKE "* "
Pense-tu que c'est cohérent ?

Concernant ton opérateur Like :

Code :
...(T100_fusion.niveaufusion) LIKE "* ",[...
ça veut dire que tu vas rammener tout les enregistrement dont niveaufusion contient "Des caractères" suivit "d'un espace".

Est-ce ce que tu souhaites faire ?

Cordialement,
__________________
Classe MELA(CRUD) Opérateur IN et zone de liste
MsGraph et VBA - 1e Partie 2e partie
Entête d'états-Opérateur LIKE-Evénements formulaires-Cours 2010
Complément :Générateur de msgbox
Visitez mon Blog
Les questions techniques par MP ne sont pas lues et je ne pratique pas l'extispicine
loufab est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/09/2011, 22h37   #3
Invité régulier
 
Inscription : août 2008
Messages : 25
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 25
Points : 7
Points : 7
Par défaut Merci de se pencher sur les devoirs mal faits!

Effectivement tes remarques sont très pertinentes:

Pour la première, si la cbo renvoit un "null", il ne faut garder que un like "*" ou peut etre seulement un "*" ou *. J'ai parcouru le tuto concernant LIKE mais pas encore tout digéré!

Pour la seconde, tout à fait exact il faut peut etre "*" mais surement pas "* "! En conclusion, il faut recopier le texte des commandes dans word ou autre pour distinguer clairement s'il n'y a pas un espace en trop qui traine.

Moyennant quoi, ces deux remarques corrigées, cela ne marche toujours pas.

J'ai aussi essayé de ne plus avoir de null dans la table (une valeur par defaut du genre "non défini"), d'ajouter une valeur possible dans la cbo qui serait "tous" et qui renverrai un caractère générique du genre *: echec aussi!

Si tu as encore du temps à me consacrer, j'avancerai sans doute plus vite, sinon il me faut un peu de temps pour étudier la doc que tu me recommandes de lire. Je découvre d'ailleurs que la documentation fournie est une vraie mine de renseignements.

Merci beaucoup pour ces remarques.

Pedro
pedro91 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/09/2011, 00h13   #4
Invité régulier
 
Inscription : août 2008
Messages : 25
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 25
Points : 7
Points : 7
Avec du temps et beaucoup de tatonnements, voila une solution qui fonctionne, peut etre pas très académique!

Code :
1
2
3
SELECT T100_fusion.niveaufusion, T100_fusion.typefusion
FROM T100_fusion
WHERE (((T100_fusion.niveaufusion)=IIf([Formulaires]![F110_ListeFusion]![cboniveau]="---Tous---",([T100_fusion].[niveaufusion]),[Formulaires]![F110_ListeFusion]![cboniveau])));
Elle suppose bien sur que niveaufusion ne soit jamais null dans T100 et que "---Tous---" soit la valeur par défaut de la cbo.

A+

Pedro
pedro91 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/09/2011, 10h36   #5
Rédacteur/Modérateur

 
Avatar de loufab
 
Homme Fabrice CONSTANS
Ingénieur développement logiciels
Inscription : avril 2005
Messages : 7 089
Détails du profil
Informations personnelles :
Nom : Homme Fabrice CONSTANS
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : avril 2005
Messages : 7 089
Points : 11 622
Points : 11 622
Bonjour,
En effet comparer le champ à sa propre valeur est une astuce valide mais qui a le désavantage de nécessiter l'interprétation d'une condition peut-être inutile. Sur de grosses tables cela peut être pénalisant.

Dans le code fourni ci-dessous, si la combo est "Tous" on renvoi True, simplement. Dans le cas contraire on applique la condition Combo=Champ.

Code :
WHERE iif([Forms]![F110_ListeFusion]![cboniveau]="---Tous---",true,[T100_fusion].[niveaufusion])=[Forms]![F110_ListeFusion]![cboniveau]);
Cordialement,
__________________
Classe MELA(CRUD) Opérateur IN et zone de liste
MsGraph et VBA - 1e Partie 2e partie
Entête d'états-Opérateur LIKE-Evénements formulaires-Cours 2010
Complément :Générateur de msgbox
Visitez mon Blog
Les questions techniques par MP ne sont pas lues et je ne pratique pas l'extispicine
loufab est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/09/2011, 18h12   #6
Invité régulier
 
Inscription : août 2008
Messages : 25
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 25
Points : 7
Points : 7
Par défaut Pb considéré résolu

Effectivement c'est plus court, logique et cela me convient tout à fait!

Mille merci pour l'aide

A+

Pierre
pedro91 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h35.


 
 
 
 
Partenaires

Hébergement Web