PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV (précédentes versions) → Requête paramétrée et paramètre(s) = NULL
Requête paramétrée et paramètre(s) = NULL
Débuté par jack31, 20 fév. 2019 23:08 - Aucune réponse
Membre enregistré
37 messages
Popularité : +1 (1 vote)
Posté le 20 février 2019 - 23:08
Bonjour à tou(te)s,

Je viens de faire une découverte qu'il me semble utile de partager avec la communauté.

J'ai développé une application qui me permet d'obtenir assez rapidement des statistiques de vente en fonction de différents critères (exemple : par périodes, familles et types d'articles).
Pour extraire les données qui m'intéressent, j'utilise une requête paramétrée dont voici le code. Le résultat alimente un tableau croisé dynamique.
Pour info, le fichier des ventes fait plusieurs centaines de milliers d'enregistrements et, bien entendu il comporte les indexes nécessaires pour optimiser les recherches.

SELECT DISTINCT
Ventes.Période AS Période,
LEFT(Ventes.Période,4) AS Année,
RIGHT(Ventes.Période,2) AS Mois,
Ventes.Famille AS Famille,
SUM(Ventes.MontantNetHT) AS CA,
SUM(Ventes.QuantitéNette) AS Quantité,
SUM(Ventes.QuantitéNette * Ventes.Poids) AS Volume
FROM
Ventes
WHERE
Ventes.Période IN ({rprm_1})
AND Ventes.Famille IN ({rprm_2})
GROUP BY
Ventes.Période,
LEFT(Ventes.Période,4),
RIGHT(Ventes.Période,2),
Ventes.Famille
ORDER BY
Année ASC,
Mois ASC,
Famille ASC


Lorsque je renseigne au moins un des paramètres, tout va bien et j'obtiens le résultats escomptés. Si je passe la valeur Null à tous les paramètres, la requête boucle alors que, si j'ai bien lu et compris la documentation de HExecuteRequête(), un paramètre Null est ignoré (clause WHERE).
J'ai trouvé la parade en créant une autre requête qui me renvoie toutes les valeurs possibles de l'un des paramètres sous la forme "valeur1;valeur2;...;valeurn" et affecte le résultat et tout fonctionne à merveille.

Y-a-t-il quelque chose qui m'échappe ? Quelqu'un a-t-il un retour d'expérience à partager, un conseil à donner ?
Je suis preneur car ma méthode me parait pour le moins assez peu orthodoxe.

Merci d'avance pour vos commentaires, suggestions, conseils (et même plus, si affinité).
J@ck
Message modifié, 20 février 2019 - 23:09