|
Started by Daniel, Mar., 28 2017 3:27 PM - 9 replies |
| |
| | | |
|
| |
Registered member 71 messages |
|
Posted on March, 28 2017 - 3:27 PM |
Bonjour à tous,
J'essaie d'écrire une requête en SQL afin de paramétrer dynamiquement certaines conditions. Je commence simplement et étape par étape pour écrire et tester ma requête.
1 .Le code suivant qui sélectionne les clés uniques des comptes répondant aux critères provoque déjà une erreur et je ne vois pas ce qui cloche, mais je ne suis qu'un débutant en SQL.
sRequête_Recherche est une chaîne ="SELECT COMPTES.C5CLEUNIK AS C5CLEUNIK " +... "FROM COMPTES" +... "WHERE COMPTES.STCTYPE IN ('IN','IP','SC','IF','IG','SF')"
2. Je suppose qu'il y a également moyen de construire des conditions de IN en créant une chaîne de caractère mais comment l'insérer dans le code de la requête ? Avec des indirections ?
Merci d'avance.
Dan, le boulet en SQL |
| |
| |
| | | |
|
| | |
| |
Registered member 257 messages Popularité : +35 (37 votes) |
|
Posted on March, 28 2017 - 4:12 PM |
1 )
sRequête_Recherche est une chaîne = [ SELECT COMPTES.C5CLEUNIK AS C5CLEUNIK FROM COMPTES WHERE COMPTES.STCTYPE IN ('IN','IP','SC','IF','IG','SF') ]
2 )
Param est une chaîne = "'IN','IP','SC','IF','IG','SF'" sRequête_Recherche est une chaîne = [ SELECT COMPTES.C5CLEUNIK AS C5CLEUNIK FROM COMPTES WHERE COMPTES.STCTYPE IN (%2) ] sRequête_Recherche= ChaîneConstruit(sRequête_Recherche,Param)
Bonus :
Param est une chaîne = "'IN','IP','SC','IF','IG','SF'" R01 est une Source dede Données <Description=COMPTES> T01 est une chaîne = "SELECT COMPTES.C5CLEUNIK FROM COMPTES WHERE COMPTES.STCTYPE IN (%2)" T01=ChaîneConstruit(T01,Param) SI HExécuteRequêteSQL(R01,hRequêteDéfaut,T01) = Faux ALORS Erreur("erreur sur requête 'R01'",HErreurInfo(hErrComplet)) SINON HLitPremier(R01) SI HEnDehors(R01) = Vrai ALORS Erreur("aucun resultat") SINON MonResultat est une chaîne = R01.C5CLEUNIKFIN FIN FIN HAnnuleDéclaration(R01) -- Baptiste CLOART Freelance b.cloart@blv-tech.com 06.88.74.80.65 www.linkedin.com/in/cloart www.blv-tech.comMessage modified, March, 28 2017 - 4:20 PM |
| |
| |
| | | |
|
| | |
| |
Posted on March, 28 2017 - 4:22 PM |
Bonjour, C'est bien de dire que la requête provoque une erreur, mais c'est encore mieux de dire quelle erreur... Ici je dirai qu'il manque un espace après COMPTES sur la deuxième ligne. D'ailleurs je dirai que tu devrais plutôt utiliser les crochets pour mettre ta chaine sur plusieurs lignes. Tu auras mois ce genre de proiblèmes:
sRequete_Recherche est une chaîne
sRequete_Recherche=[ SELECT COMPTES.C5CLEUNIK AS C5CLEUNIK FROM COMPTES WHERE COMPTES.STCTYPE IN ('IN','IP','SC','IF','IG','SF') ]
Pour la deuxième question, ta requête n'est "qu'une chaine", donc toutes les fonctions de traitement des chaines sont utilisables ici. Si tu sais construire un message pour tes utilisateurs, tu sais construire une requête SQL
Frédéric.
"Daniel" a écrit dans le message de groupe de discussion : 20176a84c9a6eed5282119d9e4134a5449de@news.pcsoft.fr...
Bonjour à tous,
J'essaie d'écrire une requête en SQL afin de paramétrer dynamiquement certaines conditions. Je commence simplement et étape par étape pour écrire et tester ma requête.
1 .Le code suivant qui sélectionne les clés uniques des comptes répondant aux critères provoque déjà une erreur et je ne vois pas ce qui cloche, mais je ne suis qu'un débutant en SQL.
sRequête_Recherche est une chaîne ="SELECT COMPTES.C5CLEUNIK AS C5CLEUNIK " +... "FROM COMPTES" +... "WHERE COMPTES.STCTYPE IN ('IN','IP','SC','IF','IG','SF')"
2. Je suppose qu'il y a également moyen de construire des conditions de IN en créant une chaîne de caractère mais comment l'insérer dans le code de la requête ? Avec des indirections ?
Merci d'avance.
Dan, le boulet en SQL |
| |
| |
| | | |
|
| | |
| |
Registered member 71 messages |
|
Posted on March, 29 2017 - 6:48 AM |
Bonjour à vous deux, Baptiste et Frédéric.
Tout d'abord merci d'avoir pris le temps de m'aider. Pour le point 1, effectivement cela marche mieux avec les [ ], et l'écriture en est simplifiée.
Pour le point 2, j'en étais arrivé à la même conclusion. Ce qui est un peu énervant c'est que la chaîne passée en paramètre ne s'écrit pas de la même manière en fonction de l'usage qui en est fait, requête WD ou SQL, ce qui implique l'écriture d'une petite fonction pour passer d'une écriture à l'autre mais, en cela, rien de bien compliqué, juste un peu de temps passé à l'écriture de la fonction...de quoi développer 9 fois plus vite au lieu de 10 fois
Bon, je retourne à l'écriture de mes requêtes et sous-requêtes. Je risque de repasser par ici.... |
| |
| |
| | | |
|
| | |
| |
Registered member 71 messages |
|
Posted on March, 29 2017 - 10:24 AM |
Je ne m'étais pas trompé, me revoici déjà.
J'ai créé le bout de code suivant, la boucle est juste là pour visualiser le test (raison pour laquelle je n'ai pas écrit le transfert des autres rubriques). J'ai repris le code SQL issu de l'éditeur de requête et j'ai, dans un premier temps, codé en "dur" les conditions de sélection de COMPTES (ce sont des paramètres en requête WD). J'obtiens le message d'erreur m'indiquant que la requête n'a pas été exécutée. Voyez-vous ce qui cloche dans ce code ?
Procedure CalculStocks()
sRequête_Recherche est une chaîne = [ SELECT STOCKMOB.C5CLEUNIK AS C5CLEUNIK, COMPTES.STFORM1 AS STFORM1, COMPTES.LIVRMA1 AS LIVRMA1, COMPTES.STCTYPE AS STCTYPE, STOCKMOB.LIVRCOD AS LIVRCOD, STOCKMOB.LIVRORG AS LIVRORG, STOCKMOB.LIVRNPN AS LIVRNPN, STOCKMOB.LIVNWN AS LIVRNWN, SUM(STOCKMOB.LIVRQL2) AS LIVRQL2, SUM(STOCKMOB.LIVRQL3) AS LIVRQL3, SUM(STOCKMOB.LIVRQUF) AS LIVRQUF, SUM(STOCKMOB.LIVRQUS) AS LIVRQUS, SUM(STOCKMOB.LIVRUER) AS LIVRUER, SUM(STOCKMOB.LIVRUEQ) AS LIVRUEQ, SUM(STOCKMOB.LIVRUEN) AS LIVRUEN FROM COMPTES, STOCKMOB WHERE COMPTES.C5CLEUNIK = STOCKMOB.C5CLEUNIK AND ( STOCKMOB.C5CLEUNIK = ANY ( SELECT COMPTES.C5CLEUNIK AS C5CLEUNIK FROM COMPTES WHERE COMPTES.STCTYPE IN ('IN','IP','SC','IF','IG','SF') AND COMPTES.STFORM1 NOT IN ('UNH') AND COMPTES.LIVRMA1 NOT IN ('COGEMA/TNX','USDOE/EU/25') ) ) GROUP BY STOCKMOB.C5CLEUNIK, COMPTES.STFORM1, COMPTES.LIVRMA1, COMPTES.STCTYPE, STOCKMOB.LIVRCOD, STOCKMOB.LIVRORG, STOCKMOB.LIVRNPN, STOCKMOB.LIVRNWN ORDER BY STFORM1 ASC, LIVRMA1 ASC, STCTYPE ASC, LIVRCOD ASC, LIVRORG ASC ] sdMaSourceDonnée est une Source dede Données bMaSourceDonnéeOK est un booléen bMaSourceDonnéeOK = HExécuteRequêteSQL(sdMaSourceDonnée,sRequête_Recherche) SI bMaSourceDonnéeOK=Faux ALORS Erreur("Erreur d'exécution de la requête.") RETOUR FIN TableSupprimeTout(TABLE_STOCKS) POUR TOUT sdMaSourceDonnée TableAjouteLigne(TABLE_STOCKS,sdMaSourceDonnée.C5CLEUNIK) FIN |
| |
| |
| | | |
|
| | |
| |
Registered member 71 messages |
|
Posted on March, 29 2017 - 11:19 AM |
Bon, suite de l'aventure, il semble que ce sont les caractères / dans le SELECT de COMPTES qui posent problème.
J'imagine que la chaîne doit être transformée avec un caractère d'échappement pour que le / soit interprété correctement, non ? Si oui, quel est le caractère d'échappement à utiliser ? |
| |
| |
| | | |
|
| | |
| |
Posted on March, 29 2017 - 11:29 AM |
Coucou,
J'suis en nouvelle zellande, sa te branche pas un coup de sponsoring billet / allez retour dans une petit ile a coté ? Et moi tes requêtes SQL je te fait tranquillou
Charly. |
| |
| |
| | | |
|
| | |
| |
Posted on March, 29 2017 - 11:29 AM |
Coucou,
J'suis en nouvelle zellande, sa te branche pas un coup de sponsoring billet / allez retour dans une petit ile a coté ? Et moi tes requêtes SQL je te fait tranquillou
Charly. |
| |
| |
| | | |
|
| | |
| |
Registered member 71 messages |
|
Posted on March, 29 2017 - 12:39 PM |
Bonjour Charly,
Merci de cette proposition mais je pense que cela passerait mal si je réclamais un vol vers Auckland pour ça.
Trêve de plaisanterie, le / ne posait pas problème, un nom de rubrique mal orthographié (LIVNW au lieu de LIVRNWN).
Je continue à complexifier le code, étape par étape j'y arriverai, le temps investi maintenant me servira ultérieurement. |
| |
| |
| | | |
|
| | |
| |
Posted on March, 29 2017 - 10:44 PM |
Coucou,
Hesite pas j vais surveiller le forum si t as des soucis ^^ Essaye de poster un sample de data quant tu place tes requetes qui te file des soucis, j suis op en sql / poo et optimisation ^^
Charly |
| |
| |
| | | |
|
| | | | |
| | |
|