PC SOFT

PROFESSIONAL NEWSGROUPS
WINDEVWEBDEV and WINDEV Mobile

Home → WINDEV 2024 → Développement requête SQL
Développement requête SQL
Started by alex kap, May, 21 2018 4:00 PM - 27 replies
Posted on May, 21 2018 - 4:00 PM
Bonjour, je suis novice sur le logiciel WINDEV et l'on m'a demander de développer une application. Celle-ci à une base de donnée client que la personne saisie. Ensuite la personne peut rechercher à l'aide d'un outil que j'ai développé. Cet outils fonctionne avec des requêtes SQL. J'essaie pas mal de choses depuis un petit moment mais je n'y arrive pas. Si quelqu'un pouvait m'aider ce serait vraiment simpa.

Je vous joint les captures d'écran de la requête.







Merci d'avance pour votre aide.
Registered member
165 messages
Popularité : +12 (12 votes)
Posted on May, 21 2018 - 10:58 PM
Bonjour;
je n'ai pas des notions SQL, mais cette partie n'a pas fonctionné dans ma tête :D





essaye la requête sans cette partie et analyse le résultat.
et en 2ième lieu essaye de la remplacer avec ce qui suit :
AND {parampays}<>""
AND ((contacts.PAYS = {parampays}) OR (contacts.PAYS = {parampays2}))



// Remarque : je ne sais pas les doubles cotes [ " " ] ou bien les simples cotes [ ' ' ], dans {parampays}<>""

Bon Dev.
Message modified, May, 21 2018 - 11:00 PM
Registered member
2,568 messages
Popularité : +222 (260 votes)
Posted on May, 22 2018 - 7:17 AM
Bonjour,

Les OR peuvent être remplacés par des IN ce sera beaucoup plus simple.

Les IF dans les requêtes ne sont, à ma connaissance, pas possible. Par contre si tu utilises HFSQL, il suffit de passer Null comme valeur au paramètre pour qu'il soit omis.

--
Cordialement,

Philippe SAINT-BERTIN
Géode Informatique
Posted on May, 22 2018 - 10:14 AM
Bonjour,

Merci pour ta réponse Fouedusa, ma requête fonctionne plutôt bien mais cependant quand le champ est vide il ne trouve pas ce que je lui demande. Il y a peut-être quelque chose à modifier dans cette dernière partie pour que cela fonctionne. Ce sont bien de simple cotes [''].

Merci également Philippe, mais remplacer les OR par des IN ne fonctionne pas et me renvoi une erreur. Si j'utilise HFSQL je devrais modifier tout mon code ?

Cordialement.
Registered member
2,568 messages
Popularité : +222 (260 votes)
Posted on May, 22 2018 - 11:15 AM
Quel est le message d'erreur ?

--
Cordialement,

Philippe SAINT-BERTIN
Géode Informatique
Registered member
13 messages
Posted on May, 22 2018 - 11:35 AM




Voici l'erreur lorsque je souhaite rentré dans ma fenêtre.
Message modified, May, 22 2018 - 11:36 AM
Registered member
2,568 messages
Popularité : +222 (260 votes)
Posted on May, 22 2018 - 11:54 AM
Quel est le sgbd utilise ? Peux tu poster le code qui lance la requête ?

--
Cordialement,

Philippe SAINT-BERTIN
Géode Informatique
Registered member
13 messages
Posted on May, 22 2018 - 12:03 PM
Je n'en ai aucune idée, je peux le savoir où ?

En fait je voudrais que lorsque mon champs "combo" ou se trouve tous mes pays que je peux sélectionner est vide il me sorte tous les client qui sont dans la "restauration" venant de tous les pays. Je peux vous fournir une capture d'écran de la dite fenêtre si vous le voulez pour mieux comprendre.
Message modified, May, 22 2018 - 12:20 PM
Registered member
3,876 messages
Popularité : +227 (347 votes)
Posted on May, 22 2018 - 1:20 PM
Bonjour,
alexk a écrit :
Je n'en ai aucune idée, je peux le savoir où ?

Si tu ne sais pas avec quel SGBD tu travailles, c'est grave.
Je peux vous fournir une capture d'écran de la dite fenêtre si vous le voulez pour mieux comprendre.

C'est peut être par cela que tu aurais du commencer.
Nous ne sommes pas derrière ton PC, cela évitera de passer en mode



Par la même occasion, poste une copie écran de ton analyse

--
Il y a peut être plus simple, mais, ça tourne
Message modified, May, 22 2018 - 1:21 PM
Registered member
13 messages
Posted on May, 22 2018 - 2:50 PM
Voroltinquo a écrit :

Si tu ne sais pas avec quel SGBD tu travailles, c'est grave.
Je peux vous fournir une capture d'écran de la dite fenêtre si vous le voulez pour mieux comprendre.

C'est peut être par cela que tu aurais du commencer.
Nous ne sommes pas derrière ton PC, cela évitera de passer en mode



Par la même occasion, poste une copie écran de ton analyse

--
Il y a peut être plus simple, mais, ça tourne


Je me suis mal exprimé alors je vais tout réexpliquer avec du détail.
Tout d'abord je ne n'ai pas créer le projet on m'a demandé de le continuer, c'est à dire de m'occuper de la partie requêtes SQL. Sachant que toute la partie "SELECT" , "FROM" et "WHERE" (tout les "OR") ce n'est pas moi qui les ai écrit. Cela ne fait que quelques jours que j'ai découvert Windev et je ne sais faire que des choses basiques dessus. C'est pour ça que je suis venu demandé votre aide. je vais poster une capture d'écran de la fenêtre.












https://www.cjoint.com/c/HEwmUnRFRs5

Dans la dernière capture d'écran vous pouvez y voir tous les combos qui sont présent dans la requête sql plus haut, ceux-ci fonctionnent plus ou moins bien. Je voudrais que lorsque je lui dit que je souhaite que la profession des clients affiché soit "restaurateur" je voudrais que lorsque je lui donne comme pays France il m'affiche que ceux provenant de France, sachant que tous les pays du monde sont renseignés dans la table.

J'éspère que cela est maintenant plus clair pour vous.
Posted on May, 22 2018 - 3:52 PM
Sinon

Case
when ... Then ...
Else ... End :)

Fonctionne bien aussi

Les OR multiples vont ralentir considérablement le traitement mieux vaut un
Contacts.catégorie in ({param1},{param2},...)
Registered member
13 messages
Posted on May, 22 2018 - 4:33 PM
Merci pour ta réponse SamSam,

J'ai remplacer les OR par ce que tu m'as conseillé, mais les "when".. "then.." et tout je les écrit où ?
Registered member
3,876 messages
Popularité : +227 (347 votes)
Posted on May, 22 2018 - 9:04 PM
Windev et CASE ne sont pas trop copains.
WHERE
(
Contact.Catégorie IN ({pListeCatégorie})
OR
Contact.Profession IN ({pListeProfession})
)
AND
Contact.Pays IN ({pListePays})

devrait faire l'affaire.

--
Il y a peut être plus simple, mais, ça tourne
Message modified, May, 22 2018 - 9:06 PM
Registered member
13 messages
Posted on May, 23 2018 - 9:11 AM
C'est hyper simple mais cependant il faut initialiser le paramètre pListePays, je dois le faire dans cette partie là ?


Registered member
13 messages
Posted on May, 23 2018 - 11:25 AM
Voroltinquo, j'ai réussi à faire fonctionner tous ça, merci.
Maintenant dans la fenêtre de recherche il m'est demandé que le contact soit rechercher dès que je spécifie la catégorie dans le champs dans le combo, c'est à dire que des que je spécifie un nouveau paramètre tous soit mis à jour automatiquement. Il y a pleins de manière mais je ne vois pas comment mettre ça en forme si tu veux bien m'aider. Dit moi tout ce dont tu as besoins pour m'aider.
Registered member
3,876 messages
Popularité : +227 (347 votes)
Posted on May, 23 2018 - 11:35 AM
Globalement oui, cela dépend de la valeur mémorisée par tes combos.

En supposant que la valeur mémorisée soit bien le nom de la profession et non l'indice de la combo.
D'autre par, nous travaillons avec des chaines listes et non des valeurs, il faut donc créer ces chaines, et ce sont elles que nous passons en paramètre.

--
Il y a peut être plus simple, mais, ça tourne
Registered member
13 messages
Posted on May, 23 2018 - 12:09 PM
J'ai reussi cette partie tout seul, lorsque je sélectionne une catégorie par exemple "un prestataire" il me l'affiche automatiquement, pareil pour les professions. Cependant lorsque je sélectionne le pays il faudrait que ma table afficher soit actualiser pour qu'il garde que les clients originaire de ce pays.
Registered member
3,876 messages
Popularité : +227 (347 votes)
Posted on May, 23 2018 - 3:06 PM
Il doit manquer un TableAffiche quelque part

--
Il y a peut être plus simple, mais, ça tourne
Registered member
13 messages
Posted on May, 24 2018 - 9:18 AM
C'était bien ça, j'ai pris le TableAffiche de mon bouton valider que j'ai supprimé pour le mettre dans le champs "Sélection d'une ligne de COMBO_Catégorie ..."

Comment je fais pour filtrer ma recherche avec des cases à cocher ?
Dans le code de ma fenêtre il y a "Initialisation de TABLE_REQ_contacts" j'ai rentré "MaSource.paramrallye = INT_RALLYE" et dans ma requête" AND contacts.RALLYE IN ({paramrallye)}" mais il me retourne la même erreur que plus haut.

Peut-être qu'il faudrait que je m'y prenne autrement pour mes requêtes avec hfsql ?
Registered member
3,876 messages
Popularité : +227 (347 votes)
Posted on May, 24 2018 - 1:08 PM
Globalement, tu recherches quelque chose comme ça :



Note: Les noms ont été remplis automatiquement d'où l'affichage "bizarre"
En ce qui concerne ta requête,
Contact.Rallye = {pEstRallye}

conviendrait mieux

--
Il y a peut être plus simple, mais, ça tourne
Message modified, May, 24 2018 - 1:10 PM
Registered member
13 messages
Posted on May, 24 2018 - 2:06 PM
C'est exactement ce dont j'ai besoins, du coup la syntaxe de ma requête serait :

(
AND
contacts.Rallye = {paramrallye}
)

Je peux mettre tous mes "AND" à la suite sachant que j'ai 14 paramètre cochable ?
Registered member
3,876 messages
Popularité : +227 (347 votes)
Posted on May, 24 2018 - 3:10 PM
C'est cela, mais vérifie si un "OR" ne serait pas plus approprié.
Une recherche trop affinée risque bien souvent de renvoyer un résultat vide, ou ajoute une option "Indifférent"

--
Il y a peut être plus simple, mais, ça tourne
Registered member
13 messages
Posted on May, 24 2018 - 4:46 PM
Dans ce qui m'est demandé il faut obligatoirement que ce soit des "AND".
Maintenant le "debogeur" me dit "Mot From inattendu", la je comprends pas parce que j'ai juste rajouté des options dans la partie "SELECT" de ma requête...}:(
Registered member
3,876 messages
Popularité : +227 (347 votes)
Posted on May, 24 2018 - 5:02 PM
Une copie du code serait la bienvenue

--
Il y a peut être plus simple, mais, ça tourne
Registered member
13 messages
Posted on May, 24 2018 - 5:14 PM
Oui bien sur.

L'initialisation de la requête:





Le code






Registered member
190 messages
Popularité : +21 (23 votes)
Posted on May, 24 2018 - 5:43 PM
Bonjour

Enlevez la virgule dans votre requête avant FROM
Registered member
13 messages
Posted on May, 24 2018 - 5:46 PM
Bonjour Nicolas,

Quand je pense que c'était juste ça.. merci pour votre aide.
Registered member
13 messages
Posted on May, 25 2018 - 3:00 PM
Pour la sélection du paramètre rallye il n'y aurais pas une initialisation à effectuer pour renseigner les paramètre booléen "Oui = VRAI" et "Non = FAUX" ? Si Oui ce serait où ?
Message modified, May, 25 2018 - 3:01 PM