IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

iReport Discussion :

Bloc conditionnel dans requête - comment écrire l'expression dans l'attribut valeur par défaut du paramètre


Sujet :

iReport

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 14
    Points : 9
    Points
    9
    Par défaut Bloc conditionnel dans requête - comment écrire l'expression dans l'attribut valeur par défaut du paramètre
    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 :
    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}
    et positionner comme suit l'expression dans l'attribut valeur par défaut du paramètre $P{cr} :
    N.B. : c'est ok pour les paramètres $P{ub} et $P{re}

    $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;"
    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.

    J'obtiens le message d'erreur suivant à l'exécution : erreur de syntaxe à la fin de l'entrée
    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*
    N'hésitez pas à me demander des éclaircissements.
    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.

  2. #2
    Membre averti

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2007
    Messages
    293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Août 2007
    Messages : 293
    Points : 440
    Points
    440
    Par défaut
    Bonjour,
    Est-ce que tu es sûr de ce que tu récupères dans ton paramètre $P{cr}? Pour savoir ce que tu récupères exactement tu le fais afficher dans la bande Title ou Summary et tu fais en sortes de mettre une requête qui marche à tous les coups (par exemple tu enlèves le $P{cr} de la fin.
    Comme çà tu verras exactement ce que ton paramètre vaut et tu sauras si c'est une erreur dans le passage de paramètre ou dans la syntaxe de ta requête (tu la testes avec la valeur récupérée de ton $P{cr} dans un environnement de test de requêtes autre que jasper).
    Au passage, il semble me souvenir que la comparaison avec == ne marche pas pour les strings en Java : il faut utiliser ".equal". Mais je ne suis pas un crack en java et je peux me planter.

Discussions similaires

  1. Réponses: 2
    Dernier message: 02/09/2011, 10h29
  2. Réponses: 3
    Dernier message: 18/07/2008, 16h03
  3. [Requete] Comment donner une valeur par défaut à un paramètre
    Par soforever dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 14/05/2007, 09h21
  4. Réponses: 2
    Dernier message: 26/10/2006, 17h52
  5. [VBA Excel] Comment écrire un code dans le ThisWorkBook ?
    Par WebPac dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 03/05/2005, 15h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo