|
HExecuteRequêteSQL passage de paramètre IN |
Started by Loïs, Nov., 21 2019 10:10 AM - 2 replies |
| |
| | | |
|
| |
Registered member 9 messages |
|
Posted on November, 21 2019 - 10:10 AM |
Bonjour,
Je suis en version Webdev 21 avec un AN Oracle.
J'ai un problème avec une requête HExecuteRequêteSQL, en effet, je veux faire une requête "tiroir" avec la possibilité pour l'utilisateur d'ajouter ou non des clauses WHERE ...
Voici un exemple de code :
SD est une Source dede Données nNumLigneAjoutée est un entier Code_Nature, Code_Direction, Code_Agent, Code_Train, SQL est une chaîne tabParam est un tableau de 8 chaîne
SQL = [ SELECT H_AGE_TAB.AE_AGEETA AS AE_AGEETA, H_AGE_TAB.AE_ES_CODETA AS AE_ES_CODETA, H_AGE_TAB.AE_TR_CODTRA AS AE_TR_CODTRA, H_FM_FRM.FR_FL_ID AS FR_FL_ID, H_FM_FRM.FR_NUMENG, H_AGE.AG_MATRI AS AG_MATRI, H_AGE.AG_TITRE AS AG_TITRE, H_AGE.AG_NOMUSA AS AG_NOMUSA, H_AGE.AG_PRENOM AS AG_PRENOM, ... ... WHERE H_AGE.AG_MATRI = H_AGE_TAB.AE_AG_MATRI AND H_AGE_TAB.AE_AGEETA = H_FM_MIS.MI_AE_AGEETA ... ... %1 %2 %3 %4 %5 %6 %7 %8
TableSupprimeTout(TABLE_REQ_FRAIS_DEPLACEMENT_GLOBALE)
SI LIBF_User DANS ("nom.p","nom2.p2") ALORS tabParam[1] = "AND H_AGE_TAB.AE_ES_CODETA IN (011,012,013)" SINON tabParam[1] = "" FIN
SI INT_choix[1] = Vrai ALORS POUR TOUTE LIGNE SELECTIONNEE de TABLE_NATURE_FRAIS Code_Nature += "'" + TABLE_NATURE_FRAIS.COL_ST_COD + "'" FIN tabParam[2] = "AND H_FM_SST.ST_COD IN (" + Code_Nature + ")" SINON tabParam[2] = "" FIN ... ... ...
SQL = ChaîneConstruit(SQL, tabParam[1], tabParam[2], tabParam[3], tabParam[4], tabParam[5], tabParam[6], tabParam[7], tabParam[8])
SI INT_choix[1] = Vrai OU INT_choix[2] = Vrai OU INT_choix[3] = Vrai OU INT_choix[4] = Vrai OU INT_choix[5] = Vrai OU INT_choix[6] = Vrai ALORS HExécuteRequêteSQL(SD, Connexion_GRH, hRequêteSansCorrection, SQL) POUR TOUT SD nNumLigneAjoutée = TableAjouteLigne(TABLE_REQ_FRAIS_DEPLACEMENT_GLOBALE) TABLE_REQ_FRAIS_DEPLACEMENT_GLOBALE.COL_AE_AGEETA[nNumLigneAjoutée] = SD.AE_AGEETA TABLE_REQ_FRAIS_DEPLACEMENT_GLOBALE.COL_AE_ES_CODETA[nNumLigneAjoutée] = SD.AE_ES_CODETA TABLE_REQ_FRAIS_DEPLACEMENT_GLOBALE.COL_AE_TR_CODTRA[nNumLigneAjoutée] = SD.AE_TR_CODTRA TABLE_REQ_FRAIS_DEPLACEMENT_GLOBALE.COL_FR_FM_ID[nNumLigneAjoutée] = SD.FR_FL_ID TABLE_REQ_FRAIS_DEPLACEMENT_GLOBALE.COL_FR_NUMENG[nNumLigneAjoutée] = SD.FR_NUMENG ... ... FIN LIB_Nb_Lignes = "Il y a " + HNbRec(SD) + " frais retourné(s) par la requête multi-critères." HLibèreRequête(SD) SINON Info("Merci de cocher au moins un filtre") FIN
Dans mon exemple, le code qui nous intéresse est :
SI INT_choix[1] = Vrai ALORS POUR TOUTE LIGNE SELECTIONNEE de TABLE_NATURE_FRAIS Code_Nature += "'" + TABLE_NATURE_FRAIS.COL_ST_COD + "'" FIN tabParam[2] = "AND H_FM_SST.ST_COD IN (" + Code_Nature + ")" SINON tabParam[2] = "" FIN
mon tabParam[2] ne peut prendre qu'une seule valeur.
Dans une autre page, je fais ceci :
POUR TOUTE LIGNE SELECTIONNEE de TABLE_NATURE_FRAIS sCode += TABLE_NATURE_FRAIS.COL_ST_COD + ";" sLibelle += TABLE_NATURE_FRAIS.COL_ST_LIB + ", " FIN
REQ_FRAIS_DEPLACEMENT_NATURE.Param_NATURE = sCode
HExécuteRequête(REQ_FRAIS_DEPLACEMENT_NATURE)
Et je peux bien sélectionner plusieurs valeurs dans mon IN.
J'ai essayé la même chose dans mon code pour tabParam[2], la requête ne s'exécute même pas !
J’espère avoir été clair ...
Je reste à disposition pour toute(s) information(s) complémentaire(s)
Cordialement.
Loïs |
| |
| |
| | | |
|
| | |
| |
Posted on November, 21 2019 - 11:22 AM |
Bonjour
Il te manque le séparateur entre les différentes valeurs du IN.
Essaie :
Code_Nature += [","] + "'" + TABLE_NATURE_FRAIS.COL_ST_COD + "'"
Bon dev.
Laurent M. |
| |
| |
| | | |
|
| | |
| |
Registered member 9 messages |
|
Posted on November, 21 2019 - 11:47 AM |
Merci Laurent !!!
Tu es un génie !
J'avais essayé sous cette forme :
Code_Nature += "'" + TABLE_NATURE_FRAIS.COL_ST_COD + "',"
J'avais pas pensé en mettant la virgule au début ! (Enfin surtout entre crochets)
Merci pour ton aide !Message modified, November, 21 2019 - 11:49 AM |
| |
| |
| | | |
|
| | | | |
| | |
|