PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WEBDEV (précédentes versions) → HExecuteRequêteSQL passage de paramètre IN
HExecuteRequêteSQL passage de paramètre IN
Débuté par Loïs, 21 nov. 2019 10:10 - 2 réponses
Membre enregistré
9 messages
Posté le 21 novembre 2019 - 10:10
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 de 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)
// Parcours du résultat
POUR TOUT SD
// Ajout d'une ligne vide
nNumLigneAjoutée = TableAjouteLigne(TABLE_REQ_FRAIS_DEPLACEMENT_GLOBALE)

// Ajout des colonnes séparement
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
Posté le 21 novembre 2019 - 11:22
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.
Membre enregistré
9 messages
Posté le 21 novembre 2019 - 11:47
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 modifié, 21 novembre 2019 - 11:49