Convertion de valeurs dans une requete SQL [Résolu][SQL] - VB/VBA/VBS - Programmation
Marsh Posté le 20-10-2005 à 17:29:58
Tu devras faire appel à une fonction non standard, selon la dispo de ton DBMS, genre IF(...).
A éviter. Ce genre de conversion est mieux traitée par l'application par-dessus que par SQL lui-même.
Marsh Posté le 20-10-2005 à 17:35:05
Désolé j'ai pas compris tes remarques ...
Si tu peux eclaircir svp
Marsh Posté le 20-10-2005 à 17:55:08
Jete un oeil sur la doc te ton DBMS, pour voir si il offre une fonction "IF".
Maintenant, même si c'est le cas, ce n'est pas standard et il y a fort à croire que tu ne présentes pas les résultats de tes queries tels quels, non ?
A la limite, si tu n'as pas d'appli par dessus, tu peux envisager cette solution.
Marsh Posté le 21-10-2005 à 10:21:01
Si dans mon cas il faut que je procède comme cela.
Je vais tester si je trouve une fonction "IF"
à suivre...
Marsh Posté le 21-10-2005 à 10:24:25
sLiZeR a écrit : Si dans mon cas il faut que je procède comme cela. |
Ah ouais ? Strofor sa !
Marsh Posté le 21-10-2005 à 13:23:45
sircam a écrit : Ah ouais ? Strofor sa ! |
ce qui est trop fort c'est l'ortographe utilisé par un soit disant "Tueur de boulays illettrés"
Bref je ne vois pas trop ta remarque, j'ai une zone de liste et il faut bien que je lui donne un contenu nan ? C'est pas judicieux d'utiliser une requete sql pour ça ?
Me.lstNC.RowSource = "SELECT [N°], [Raison sociale], [CF], [Date évènement], [Secteur], [Type de NC], [Securite] FROM RS_CF, NC WHERE [CF] = [Code Fournisseur] ORDER BY [N°];"
je vois pas ou est le problème... Si ce n'est que mon champ sécurité (qui est un champ de type bit) n'est pas très lisible pour les utilisateurs... (cf 1er message)
Marsh Posté le 21-10-2005 à 13:56:38
Super c'est parfait ça fonctionne.
N'empeche que j'avais pas vu ta fonction. J'était tomber sur IF(tazone=0, "non", "oui" ) mais SQL me disait qu'il ne connaissait pas. J'ai trouver cela dans l'aide d'Access. Quelle est la différence plz ?
Marsh Posté le 21-10-2005 à 14:05:02
IIF ( Condition, ValeurRetournéeSiVrai, ValeurRetournéeSiFaux)
> IIf est donc une fonction qui renvoit une valeur
> Par contre a utiliser avec modération, car les deux valeurs sont évaluées..
Par exemple
x = 0
IIf(x>0, 1/X, 1)
> la valeur 1/X est evaluée et donc cause une erreur (division par zero)
Marsh Posté le 21-10-2005 à 14:27:55
Si je pe me permettre une pitite correction.
Je parle pour les zones de liste.
ça ne fonctionne que si c'est inscrit comme cela
SELECT ...., IFF([securite]=0, "Non", "Oui" ) AS Securite2 ....
Par exemple.
Voila
Marsh Posté le 21-10-2005 à 14:31:34
Oui c'est exact il le faut le nommer, comme par exemple pour AVG() etc..
EDIT : mais pourquoi n'as tu pas déclaré cette variable en booleen?
EDIT 2 : si jamais tu appelle cette requête à partir d'un programme (ce que je doute), evite d'utiliser cette fonction, et gère cela plutot dans ton programme lorsque tu affiche cette valeur.
Marsh Posté le 21-10-2005 à 14:49:03
sLiZeR a écrit : ce qui est trop fort c'est l'ortographe utilisé par un soit disant "Tueur de boulays illettrés" |
Mais je peux me le permettre.
Si tu passais plus souvent, tu comprendrais...
Parfois, j'essaye de me mettre au niveau de la masse.
Pour ton pb, on vient de te donner la solution toute faite, mais je persiste à me demander si c'est bien judicieux. Les rares fois où, dans ma folle jeunesse, j'ai utilisé de tels artifices, et l'expérience m'a appris que ce n'était pas la bonne façon de faire.
Mais si tu es convaincu du contraire, tant mieux pour toi.
Marsh Posté le 21-10-2005 à 15:52:16
Je n'en suis pas convaincu mais je ne vois pas comment faire autrement. Je vous expose le contexte si vous voyez d'autre moyen dites moi.
Mon programme démarre, présence de 4 onglets, contenant chaqun une zone de liste pour tout simplement afficher des valeurs contenu dans mes tables.
au lancement du formulaire principal, j'ai mis une fonction init_lst qui comme son nom l'indique initialise mes 4 zone de liste. Pour cela j'utilise la commande suivante :
Me.la_liste_concernée.rowsource = "La requete SQL qui me renvoie mes informations."
Sur ce topic j'ai présenter une de mes listes qui devait afficher une information binaire.
Comment puis-je eviter d'utiliser cette fonction si ce n'est pas judicieux merci.
Marsh Posté le 21-10-2005 à 15:58:57
Comme on te l'as dit plusieurs fois : c'est à l'application à mettre en page les données et de décider, p.e., de remplacer "1" par "oui". Pas vraiment à ton query SQL de le faire. Imagine p.e. que ton appli soit multilingue : comment ferais-tu pour gérer ça au niveau SQL ?
Maintenant, avec ces trucs RAD 4GL à dix sous ou le GUI fait office de data access layer et de persistence layer, on s'expose à des difficultés.
Marsh Posté le 20-10-2005 à 17:22:49
Bonjour,
J'ai un champ sous SQL nommé "Securite" qui est soit à 0 soit à -1.
Pour que ce soit moins dur à lire je convertis en Oui (-1) ou Non (0)
Je fait la convertion à chaque fois qu'il est necessaire mais j'ai une zone de liste ou je n'y arrive pas.
Me.lstNC.RowSource = "SELECT [N°], [Raison sociale], [CF], [Date évènement], [Secteur], [Type de NC], [Securite] FROM RS_CF, NC WHERE [CF] = [Code Fournisseur] ORDER BY [N°];"
Comment puis-je modifier ma requete pour qu'elle renvoie Oui ou Non à la zone de liste en fonction de la valeur du champ securite plz ? (plutot que 0 ou -1)
Si vous preferez aiguiller que donner la réponse je suis preneur d'information merci
Message édité par sLiZeR le 21-10-2005 à 13:56:51