Bonjour,
Environnment ireport3.0.0 postgresql 8.3
Je souhaite modifier le clause conditionnelle à l'intérieur d'une requête en fonction de la saisie de l'utilisateur.
Je suis les conseils de candre (FAQ ireports) --> cf. en bas de message.
J'ai donc écrit dans la requête :
et positionner comme suit l'expression dans l'attribut valeur par défaut du paramètre $P{cr} :SELECT "F_DEPENSE".ub, "F_DEPENSE".cr_ou_regr, "F_DEPENSE".re, "F_DEPENSE".type_cred, "F_DEPENSE".budg_init, "F_DEPENSE".dbm, "F_DEPENSE".dota_supp,
"F_DEPENSE".chgt_mass, "F_DEPENSE".autr_cred_mad, "F_DEPENSE".tota_mad, "F_DEPENSE".engt, "F_DEPENSE".sold_virt_cred, "F_DEPENSE".tota_engt,
"F_DEPENSE".mont_liqu, "F_DEPENSE".tota_dpen, "F_DEPENSE".date_obsv
FROM "F_DEPENSE"
WHERE "F_DEPENSE".ekeydate=(SELECT MAX("F_DEPENSE".ekeydate) FROM "F_DEPENSE")
AND "F_DEPENSE".ub=$P{ub} $P!{re} $P!{cr}
N.B. : c'est ok pour les paramètres $P{ub} et $P{re}
Si l'utilisateur saisit % au niveau du paramètre $P{cr}, je ne filtre pas sur le champ cr_ou_regr sinon je filtre sur la valeur saisie.$P{cr}=="%" ? "GROUP BY ub, type_cred, budg_init, dbm, dota_supp, chgt_mass, autr_cred_mad, tota_mad, engt, sold_virt_cred, tota_engt, taux_exec_engt,mont_liqu, tota_dpen, taux_exec_dpen order by type_cred;"
: "and cr_ou_regr=$P{cr} GROUP BY ub, cr_ou_regr, type_cred, budg_init, dbm, dota_supp, chgt_mass, autr_cred_mad, tota_mad, engt, sold_virt_cred, tota_engt,taux_exec_engt, mont_liqu, tota_dpen, taux_exec_dpen, date_obsv order by type_cred;"
J'obtiens le message d'erreur suivant à l'exécution : erreur de syntaxe à la fin de l'entrée
N'hésitez pas à me demander des éclaircissements.Erreur*lors*du*remplissage*de*l’impression…*Error*executing*SQL*statement*for*:*classic
net.sf.jasperreports.engine.JRException:*Error*executing*SQL*statement*for*:*classic* ****at*net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.createDatasource(JRJdbcQueryExecuter.java:141)* ****at*net.sf.jasperreports.engine.fill.JRFillDataset.createQueryDatasource(JRFillDataset.java:656)* ****at*net.sf.jasperreports.engine.fill.JRFillDataset.initDatasource(JRFillDataset.java:588)* ****at*net.sf.jasperreports.engine.fill.JRBaseFiller.setParameters(JRBaseFiller.java:1196)* ****at*net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:833)* ****at*net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:782)* ****at*net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:63)* ****at*net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:402)* ****at*net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:234)* ****at*it.businesslogic.ireport.IReportCompiler.run(IReportCompiler.java:947)* ****at*java.lang.Thread.run(Unknown*Source)* Caused*by:*org.postgresql.util.PSQLException:*ERREUR:*erreur*de*syntaxe*à*la*fin*de*l'entrée* ****at*org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:1608)* ****at*org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1343)* ****at*org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:194)* ****at*org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:451)* ****at*org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:350)* ****at*org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:254)* ****at*net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.createDatasource(JRJdbcQueryExecuter.java:135)* ****...*10*more*
MERCI BEAUCOUP.
Excellente journée.
************************************
Comment modifier la clause de sa requête en fonction d'un paramètre ?
[haut]
auteur : candre
Créer un paramètre de type String et placez votre expression dans l'attribut valeur par défaut du paramètre. puis placez votre paramètre comme suit :
SELECT colonne1
FROM table1
WHERE $P{monParametre}
warning utiliser un paramètre $P! pour éviter les histoires de "quotes" rajoutés.
Partager