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