|
Débuté par Daniel, 28 mar. 2017 15:27 - 9 réponses |
| |
| | | |
|
| |
Membre enregistré 71 messages |
|
Posté le 28 mars 2017 - 15:27 |
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 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 257 messages Popularité : +35 (37 votes) |
|
Posté le 28 mars 2017 - 16:12 |
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 modifié, 28 mars 2017 - 16:20 |
| |
| |
| | | |
|
| | |
| |
Posté le 28 mars 2017 - 16:22 |
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 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 71 messages |
|
Posté le 29 mars 2017 - 06:48 |
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.... |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 71 messages |
|
Posté le 29 mars 2017 - 10:24 |
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 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 71 messages |
|
Posté le 29 mars 2017 - 11:19 |
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 ? |
| |
| |
| | | |
|
| | |
| |
Posté le 29 mars 2017 - 11:29 |
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. |
| |
| |
| | | |
|
| | |
| |
Posté le 29 mars 2017 - 11:29 |
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. |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 71 messages |
|
Posté le 29 mars 2017 - 12:39 |
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. |
| |
| |
| | | |
|
| | |
| |
Posté le 29 mars 2017 - 22:44 |
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 |
| |
| |
| | | |
|
| | | | |
| | |
|