Bonjour très chers amis, je travaille sous windev 24, et je viens de créer une requête SQL à l'initialisation de la Table, et la requête est paramétré avec la fonction "LIKE" pour la recherche partout dans le fichier ou si vous voulez la Fonction "Contient". Ce que j'aimerai faire à partir de ces paramètre pointé mon champ Sai_Recherche la dessus, comme le cas de TableActiveFiltre. Depuis un bon moment cette histoire me fait souffrir. Merci donc pour votre aide que j'ai tant espéré. Voici mon code : MaRequeteSQL est une chaîne=[ SELECT PRODUITS.IDPRODUITS AS IDPRODUITS, PRODUITS.Refernce AS Refernce, PRODUITS.NomProduit AS NomProduit, PRODUITS.QteEnStock AS QteEnStock, PRODUITS.QteMin AS QteMin, PRODUITS.PrixVente AS PrixVente, PRODUITS.PrixAchat AS PrixAchat FROM PRODUITS WHERE PRODUITS.Refernce LIKE %{ProduitSearch}% OR PRODUITS.NomProduit LIKE %{ProduitSearch}% OR PRODUITS.QteEnStock LIKE %{ProduitSearch}% OR PRODUITS.QteMin LIKE %{ProduitSearch}% OR PRODUITS.PrixVente LIKE %{ProduitSearch}% OR PRODUITS.PrixAchat LIKE %{ProduitSearch}% ] DonneesAffiches est une Source de Données HExécuteRequêteSQL(DonneesAffiches,hRequêteDéfaut,MaRequeteSQL) POUR TOUT DonneesAffiches TableAjouteLigne(TABLE_LISTE_PRODUITS,DonneesAffiches.IDPRODUITS, DonneesAffiches.NomProduit, DonneesAffiches.Refernce, DonneesAffiches.QteEnStock, DonneesAffiches.QteMin, DonneesAffiches.PrixVente, DonneesAffiches.PrixAchat) FIN
Bonjour, Il est logique que ta requête ne renvoie pas le résultat souhaité 1-Tu appelles HExécuteRequêteSQL avec une syntaxe de HExécuteRequête 2-Jamais tu ne précises le paramètre Solution 1 (avec HExécuteRequêteSQL) Code (Windev): sCodeRequête est chaine //Code de la requête sParam est chaine //Paramètre sdRechercheProduit est source de donnée //Requête sCodeRequête=[ SELECT PRODUITS.IDPRODUITS AS IDPRODUITS, PRODUITS.Refernce AS Refernce, PRODUITS.NomProduit AS NomProduit, PRODUITS.QteEnStock AS QteEnStock, PRODUITS.QteMin AS QteMin, PRODUITS.PrixVente AS PrixVente, PRODUITS.PrixAchat AS PrixAchat FROM PRODUITS WHERE PRODUITS.Refernce LIKE %1 OR PRODUITS.NomProduit LIKE %1 OR PRODUITS.QteEnStock LIKE %1 OR PRODUITS.QteMin LIKE %1 OR PRODUITS.PrixVente LIKE %1 OR PRODUITS.PrixAchat LIKE %1 ] //On construit le paramètre sParam=Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!("%%1%",SAI_Recherche) //On construit la requête sCodeRequête = Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!(sCodeRequête,sParam) HExecuteRequêteSQL(sdRechecheProduit,hReqêteDéfaut,sCodeRequête) ... CAS ERREUR //Traitement des erreurs Solution 2 (avec HExécuteRequête) depuis la V 23 Code (Windev): REQ_RechercheProduit est Requête SQL=[ SELECT PRODUITS.IDPRODUITS AS IDPRODUITS, PRODUITS.Refernce AS Refernce, PRODUITS.NomProduit AS NomProduit, PRODUITS.QteEnStock AS QteEnStock, PRODUITS.QteMin AS QteMin, PRODUITS.PrixVente AS PrixVente, PRODUITS.PrixAchat AS PrixAchat FROM PRODUITS WHERE PRODUITS.Refernce LIKE %{ProduitSearch}% OR PRODUITS.NomProduit LIKE %{ProduitSearch}% OR PRODUITS.QteEnStock LIKE %{ProduitSearch}% OR PRODUITS.QteMin LIKE %{ProduitSearch}% OR PRODUITS.PrixVente LIKE %{ProduitSearch}% OR PRODUITS.PrixAchat LIKE %{ProduitSearch}% ] REQ_RechercheProduit.ProduitSearch=SAI_Recherche Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!(REQ_RechercheProduit) ... CAS ERREUR //Traitement des erreurs Solution 3 Créer une requête (e.g. REQ_RechercheProduit) dans le requêteur. Baser le champ table (TABLE_Résultat) sur cette requête. Le code de la fonction de recherche devient Code (Windev): REQ_RechercheProduit.ProduitSearch=SAI_RechercheProduit Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!(TABLE_Résultat,taReExécuteRequête) CAS ERREUR //Traitement des erreurs
Une petite remarque concernant la différence entre HExécuteRequête et HExécuteRequêteSQL. HExécuteRequête est destinée à exécuter une requête (youpi on n'avait pas deviné) issue du requêteur ou d'une variable de type requête. Lorsque cette requête nécessite un paramètre, il suffit d'affecter la valeur de ce paramètre à la requête. HexécuteRequêteSQL nécessite que la code de la requête soit déjà construit avec la valeur que prend le paramètre. Si tu passe en mode pas à pas tu peux voir dans le mouchard que, avant l'exécution de HExécuteRequêteSQL (après aussi d'ailleurs, mais cela ne nous intéresse pas,) la valeur de sCodeRequête vaut (si SAI_Recherche="toto") : Code (Windev): SELECT PRODUITS.IDPRODUITS AS IDPRODUITS, PRODUITS.Refernce AS Refernce, PRODUITS.NomProduit AS NomProduit, PRODUITS.QteEnStock AS QteEnStock, PRODUITS.QteMin AS QteMin, PRODUITS.PrixVente AS PrixVente, PRODUITS.PrixAchat AS PrixAchat FROM PRODUITS WHERE PRODUITS.Refernce LIKE %toto% OR PRODUITS.NomProduit LIKE %toto% OR PRODUITS.QteEnStock LIKE %toto% OR PRODUITS.QteMin LIKE %toto% OR PRODUITS.PrixVente LIKE %toto% OR PRODUITS.PrixAchat LIKE %toto% Remarques 1-Avec HExécuteRequêteSQL, Il est fort possible que tu doives mettre ton paramètre entre 2 simples quote (') cf Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens! 2-% et ' risquent d'être mal interprétés par windev il vaut mieux les remplacer par leur valeur ASCII 37 et 39 l'affectation de sParam devient alors : Code (Windev): sParam=Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!("%1%2%3%2%1",Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!(39),Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!(37),SAI_Recherche) 3-J'ai de gros doutes quant à l'utilité de Code (Windev): OR PRODUITS.QteEnStock LIKE %toto% OR PRODUITS.QteMin LIKE %toto% OR PRODUITS.PrixVente LIKE %toto% OR PRODUITS.PrixAchat LIKE %toto% en effet les quantité et les prix sont des numériques (entiers et monétaires) que tu vas comparer à une chaine 3-1 il y a 99.9% de chance que cela soit converti en 0 (il faut alors supprimer les ' et inclure un autre paramètre) 3-2 quand bien même cela fonctionnerait, RODUITS.QteEnStock LIKE %10% te renverrait 210, 10, 103
Merci beaucoup à vous tous pour vos réponse, elles m'ont permis d'apprendre plus Mais jusqu'à présent j'ai des erreurs, l'interprétation des requêtes SQL avec windev semble vraiment difficile, sinon le but est de trouver les résultats provenant de n'importe quelle colonne de la table. J'ai essayer avec l'accès directe au Fichier, cela marche bien, mais avec un volume important de données, je doute que ça puisse ralentir l'application en question. C'est d'ailleurs pourquoi, j'ai donc opter pour le code SQL, et je sais toujours pas si c'est celle-ci le plus rapide, c'était juste une supposition. Encore Merci à vous, et j'ai toujours besoin de vous...
Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens! j'ai donc opter pour le code SQLCliquez pour agrandir...