2011-10-10 5 views
1

Est-il possible d'exécuter "insérer une requête" dans les rapports IReports/jasper lors de la génération du rapport?Insérer une requête dans les rapports jasper

+0

Quel résultat souhaitez-vous obtenir? Vous pouvez essayer de créer un déclencheur dans votre application d'appel sur l'événement de rapport de pré-construction. –

Répondre

0

Oui, l'idée dont vous avez besoin est de paramètres utilisant cette syntaxe: $P!{PARAM_NAME}.

Ainsi, votre requête SQL entière (ou tout autre type de requête) pourrait être simplement $P!{SQL}. Ensuite, vous passez exactement le SQL dynamique dont vous avez besoin. Après avoir lu le commentaire de Sharad, j'ai réalisé que ma réponse ci-dessus n'est pas bonne. Ce que j'ai écrit est vrai ... mais il ne répond pas à la question fondamentale. Non, votre rapport ne peut pas vraiment exécuter une instruction d'insertion. Strictement parlant, je suis sûr que ce n'est pas impossible. Vous pouvez ajouter un scriptlet ou une fonction personnalisée dans un fichier .jar qui établit une connexion et effectue une insertion. Mais de façon réaliste ... un rapport va exécuter une ou plusieurs requêtes. Le framework JR n'est pas destiné à exécuter des insertions ou des mises à jour.

+0

dans notre expérience, nous avons vu que IReport donne une erreur si nous utilisons insert ou update ... S'il vous plaît nous donner un aperçu sur ce ... –

+0

@mdahlman: Ce que j'ai fait, a créé un contrôle d'entrée "$ P! {P_insert_sql } "et définir la valeur par défaut" "INSERT INTO t_error_log (LogID) VALUES (2)" mais son erreur d'affichage: impossible d'émettre des instructions de manipulation de données avec executeQuery() – Sharad

+0

Ne pensez-vous pas que nous avions cette facilité d'insertion ou de mise à jour? base de données par JasperReport Server, nous pouvons faire de meilleurs rapports à tout niveau, puis nous pouvons utiliser le JasperReport Server comme point d'entrée aussi comme Excel, juste créer une table dans la base de données puis insérer les rapports par Jasper réellement utiliser la base de données encore et encore pour simplement insérer ou mettre à jour un enregistrement. – Sharad

0

Oui, vous pouvez. Vous pouvez exécuter la requête lorsque vous souhaitez afficher le rapport. Voici un exemple qui fonctionne pour moi.

try { 
     Map parameters = new HashMap(); 
     connectionString ="jdbc:mysql://localhost/myDb", "myUsername", "myPassword" 
     Class.forName("com.mysql.jdbc.Driver"); 
     Connection conn = DriverManager.getConnection(connectionString); 
     PreparedStatement stmt = conn.prepareStatement(query); 
     ResultSet rs = stmt.executeQuery(); 
     JRResultSetDataSource rsdt = new JRResultSetDataSource(rs); 

     JasperPrint jp; 
     jp = JasperFillManager.fillReport("sourceFileName.jasper", parameters, rsdt); 
     JasperViewer jv = new JasperViewer(jp, false); 
     jv.setVisible(true); 

    } catch (ClassNotFoundException | SQLException | JRException ex) { 
     ex.printStackTrace(); 
    } 
Questions connexes