asetabularia
Messages postés12Date d'inscriptionlundi 23 juillet 2012StatutMembreDernière intervention11 mai 2013
-
23 juil. 2012 à 14:01
asetabularia
Messages postés12Date d'inscriptionlundi 23 juillet 2012StatutMembreDernière intervention11 mai 2013
-
3 août 2012 à 11:22
bonjour tout le monde je m'appelle hicham j'habite au Maroc et j'ai besoin de votre aide :D
bon voila j'ai crée une application java avec ireport qui me permet d'imprimer des informations selon les lignes sélectionnées dans une jtable voici un apercu comme vous le constater les informations de chaque ligne sélectionner et afficher dans une vue différente et ma question est comment je peux afficher toute les information sélectionner dans la même vue sachant quand je clic sur une ligne l'identifiant de cette ligne est envoyer dans un arraylist et quand j'imprime je parcours cet arraylist voici mon code
// mon arraylist contient le Rc qui est l'identifiant avec le quel j'imprime
java.util.List<String> listrc = new ArrayList<String>();
Iterator<String> i = listrc.iterator();
//ici je parcoure le arraylist
while(i.hasNext()){
String x = (String)i.next();
System.out.println(x);
try{
// ici je récupère l’état de chaque ligne si les informations ont déjà était imprimer donc recupEtat="oui" il est impossible d'imprimer la meme ligne une seconde fois
Statement stt=connexion.getCon().createStatement();
ResultSet rss=stt.executeQuery("select imprimer from impression where rc='"+x+"'");
while (rss.next()) {
String recupEtat=rss.getString("imprimer");
System.out.println(recupEtat);
// si recupEtat="non" donc pas encore imprimer l'impression est permise
if(recupEtat.equalsIgnoreCase( "non") ){
stt.executeUpdate("update impression set imprimer='oui' where rc='"+x+"'");
String url = "jdbc:mysql://localhost:3306/packbidayati";
String login = "user";
String password = "123";
Connection connection = null;
System.out.println(x);
try {
// - Connexion à la base
Driver monDriver = new com.mysql.jdbc.Driver();
DriverManager.registerDriver(monDriver);
connection = DriverManager.getConnection(url, login, password);
// - Chargement et compilation du rapport
jasperDesign = JRXmlLoader.load("C:\\Users\\hicham\\Documents\\NetBeansProjects\\impression_carte_pack_bidayati_12\\src\\la_vue.jrxml");
JRDesignQuery query=new JRDesignQuery();
query.setText("select rs,rc,date_add(date_format(date_rc,'%y/%m/%d'),interval 3 year) as "
+ " datex from impression where rc='" +x+"'");
jasperDesign.setQuery(query);
JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);
Map parameters = new HashMap();
parameters.put("Titre", "Titre");
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, connection);
JasperExportManager.exportReportToPdfFile(jasperPrint,"C:\\Users\\hicham\\Documents\\NetBeansProjects\\impression_carte_pack_bidayati_12\\src\\la_vuei.pdf");
JasperViewer.viewReport(jasperPrint);
} catch (JRException e) {
System.err.println(e.getMessage());
} catch (SQLException e) {
System.err.println(e.getMessage());
} finally {
try {
connection.close();
} catch (SQLException e) {
System.err.println(e.getMessage());
} }
}
if(recupEtat.equalsIgnoreCase("oui")){
JOptionPane.showMessageDialog(null,"cette carte est déja imprimée");
}
}
}catch(SQLException ee){
}
}
voila donc j’espère que quelqu'un va m'aider et excuser moi si j'ai pas bien expliquer se que je cherche merci d'avance :)
Je te rassure, ton post est assez clair.
Je ne connais pas vraiment Jasper pour l'instant, mais j'imagine que, quand tu parles des "vues", tu fais références aux trois petites fenêtres dans l'image en lien. A mon avis, je pense que c'est la ligne JasperViewer.viewReport(jasperPrint); qui est à l'origine de la création d'une vue. Et comme celle-ci est dans une boucle (ton while(i.hasNext()){), tu créés trois vues car je pense que cette boucle tourne trois fois. A mon avis, il faudrait voir si tu peux sortir ta ligne JasperViewer.viewReport(jasperPrint); de ta boucle, et voir si tu ne peux pas charger ton jasperPrint de sorte à ce que tu y regroupes les données de tes trois vues.
Vois-tu où je veux en venir ?
--
Pylouq (Lire le Réglement n'a jamais tué personne, au pire ça a instruit des gens.)
asetabularia
Messages postés12Date d'inscriptionlundi 23 juillet 2012StatutMembreDernière intervention11 mai 2013 23 juil. 2012 à 18:15
bonjour
merci Pylouq pour votre réponse
j'ai tester se que vous m'aviez dis mais il m'affiche que la première ligne sélectionnée,donc je vais essayer de trouver une solution concernant le jasperprint
asetabularia
Messages postés12Date d'inscriptionlundi 23 juillet 2012StatutMembreDernière intervention11 mai 2013 24 juil. 2012 à 17:24
bonjour
après la modification ça m'affiche qu'un seul résultat le voila j'ai remarquer que quand je sélectionne plusieurs lignes il m'imprime juste la ligne qui à le plus grand index dans le Jtable et voici le code
// mon arraylist contient le Rc qui est l'identifiant avec le quel j'imprime
java.util.List<String> listrc = new ArrayList<String>();
Iterator<String> i = listrc.iterator();
//ici je parcoure le arraylist
while(i.hasNext()){
String x = (String)i.next();
System.out.println(x);
try{
// ici je récupère l’état de chaque ligne si les informations ont déjà était imprimer donc recupEtat="oui" il est impossible d'imprimer la meme ligne une seconde fois
Statement stt=connexion.getCon().createStatement();
ResultSet rss=stt.executeQuery("select imprimer from impression where rc='"+x+"'");
while (rss.next()) {
String recupEtat=rss.getString("imprimer");
System.out.println(recupEtat);
// si recupEtat="non" donc pas encore imprimer l'impression est permise
if(recupEtat.equalsIgnoreCase( "non") ){
stt.executeUpdate("update impression set imprimer='oui' where rc='"+x+"'");
String url = "jdbc:mysql://localhost:3306/packbidayati";
String login = "user";
String password = "123";
Connection connection = null;
System.out.println(x);
try {
// - Connexion à la base
Driver monDriver = new com.mysql.jdbc.Driver();
DriverManager.registerDriver(monDriver);
connection = DriverManager.getConnection(url, login, password);
// - Chargement et compilation du rapport
jasperDesign = JRXmlLoader.load("C:\\Users\\hicham\\Documents\\NetBeansProjects\\impression_carte_pack_bidayati_12\\src\\la_vue.jrxml");
JRDesignQuery query=new JRDesignQuery();
query.setText("select rs,rc,date_add(date_format(date_rc,'%y/%m/%d'),interval 3 year) as "
+ " datex from impression where rc='" +x+"'");
jasperDesign.setQuery(query);
JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);
Map parameters = new HashMap();
parameters.put("Titre", "Titre");
} catch (JRException e) {
System.err.println(e.getMessage());
} catch (SQLException e) {
System.err.println(e.getMessage());
} finally {
try {
connection.close();
} catch (SQLException e) {
System.err.println(e.getMessage());
} }
}
if(recupEtat.equalsIgnoreCase("oui")){
JOptionPane.showMessageDialog(null,"cette carte est déja imprimée");
}
}
}catch(SQLException ee){
}
}
String url = "jdbc:mysql://localhost:3306/packbidayati";
String login = "user";
String password = "123";
connection = null;
try {
//connection à la base
Driver monDriver = new com.mysql.jdbc.Driver();
DriverManager.registerDriver(monDriver);
connection = DriverManager.getConnection(url, login, password);
// la partie que j'ai fait sortir de la boucle while(i.hasNext())
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, connection);
JasperExportManager.exportReportToPdfFile(jasperPrint,"C:\\Users\\hicham\\Documents\\NetBeansProjects\\impression_carte_pack_bidayati_12\\src\\la_vuei.pdf");
JasperViewer.viewReport(jasperPrint);
} catch (JRException ex) {
}catch(SQLException z){
}
Peux-tu poster le code qui s'occuper de ta JTable avec la gestion des clics etc ? Il y a un truc qui m'échappe, je finirais par tomber dessus (manque de temps aujourd'hui).
--
Pylouq Heureux sont ceux qui lisent le Réglement, ils ne finiront peut-être pas au bûcher.
asetabularia
Messages postés12Date d'inscriptionlundi 23 juillet 2012StatutMembreDernière intervention11 mai 2013 25 juil. 2012 à 17:19
bonjour ^^
voila le code :)
private void jTable1MouseClicked(java.awt.event.MouseEvent evt) {
int r =jTable1.getSelectedRow();
if (r==-1) {
} else
{
listrc = new ArrayList<String>();
int [] ind = jTable1.getSelectedRows();
int z =ind.length;
String[] listaId = new String[z+1];
for (int i=0; i<z; i++) {
listrc.add((String) jTable1.getValueAt(ind[i], 1));
}
listaId = (String[])listrc.toArray(new String[listrc.size()]);
}
}
asetabularia
Messages postés12Date d'inscriptionlundi 23 juillet 2012StatutMembreDernière intervention11 mai 2013 26 juil. 2012 à 17:59
bonjour
j'ai mis directement le code dans le bouton "imprimer" il n'est pas dans une fonction , après avoir sélectionner les lignes souhaiter dans ma jtable je clic sur le bouton "imprimer" , si vous voulez je peux vous envoyer mon projet par e mail
En fait, si j'ai bien compris, la requête du code ci-dessous
query.setText("select rs,rc,date_add(date_format(date_rc,'%y/%m/%d'),interval 3 year) as "
+ " datex from impression where rc='" +x+"'");
te retournes les infos dont tu as besoin c'est ça ? Et je vois que tu boucles avec un itérateur, et qu'à chaque tour tu récupères la valeur rc qui sera utilisée pour la requête SQL et enfin une vue. Je tenterais bien de faire une seule requête avec toutes les valeurs rc qui ont été sélectionnées. Comme ça, plusieurs valeurs te seront renvoyées et du coup tu pourras avoir le tout en une seule vue. Je reposterais sous peu un exemple de code que tu pourras tester.
--
Pylouq Heureux sont ceux qui lisent le Réglement, ils ne finiront peut-être pas au bûcher.
Donc voilà le code à la louche. Attention, j'ai fait ça vite fait pour essayer, et forcément je n'ai pas compilé.
// mon arraylist contient le RC qui est l'identifiant avec lequel j'imprime
List<String> listrc = new ArrayList<String>(); /* /!\ Tu effectue des imports plutôt que de passer par les packages à chaque fois */
Iterator<String> i = listrc.iterator()
/* aImprimer : Il s'agit d'une liste qui prendra les RC à imprimer (on fera les choses en plusieurs temps) */
List<Long> aImprimer = new ArrayList<Long>();
/* PREMIERE ETAPE : il va te permettre de voir pour chaque RC s'il a déjà été imprimé ou non (et de faire l'update dans ce cas) */
while(i.hasNext()){
String x = (String)i.next(); /* Tu récupères un RC par ton itérateur */
System.out.println(x);
try{
// ici je récupère l'état de chaque ligne si les informations ont déjà été imprimées donc recupEtat="oui" il est impossible d'imprimer la même ligne une seconde fois
Statement stt=connexion.getCon().createStatement();
ResultSet rss=stt.executeQuery("select imprimer from impression where rc='"+x+"'");
while (rss.next()) {
String recupEtat=rss.getString("imprimer");
System.out.println(recupEtat);
// si recupEtat="non" donc pas encore imprimé l'impression est permise
if(recupEtat.equalsIgnoreCase( "non") ){
stt.executeUpdate("update impression set imprimer='oui' where rc='"+x+"'");
System.out.println(x);
/* Tu ajoutes à ta liste le RC pour pouvoir le réutiliser plus tard avec tes impressions etc */
aImprimer.add( (Long) x );
} else if(recupEtat.equalsIgnoreCase("oui")){
JOptionPane.showMessageDialog(null,"cette carte est déja imprimée");
}
}
} catch (SQLException e) {
System.err.println(e.getMessage());
} finally {
try {
connection.close();
} catch (SQLException e) {
System.err.println(e.getMessage());
}
}
}
/* DEUXIEME ETAPE : il va te permettre de faire un bout de ta requête SQL : on mettra un "where" avec plusieurs "or" afin de toucher un maximum de valeurs
Pour que ce soit plus optimisés, j'utilise un StringBuffer*/
StringBuffer sb = new StringBuffer();
for ( int i = 0; i < aImprimer.size() - 1; i++ ){
sb.append( "rc='" );
sb.append( aImprimer.get(i) );
sb.append( "' or " );
}
/* On n'ajoutera pas de "or" à la fin de la requête, donc on récupère le dernier RC ici */
sb.append( "rc='" );
sb.append( aImprimer.get(aImprimer.size()-1) );
sb.append( "'" );
/* TROISIEME ETAPE : on va voir ce que va donner une requête qui va prendre en compte d'un coup tous les RC qu'on veut */
try {
String url = "jdbc:mysql://localhost:3306/packbidayati";
String login = "user";
String password = "123";
Connection connection = null;
// - Connexion à la base
Driver monDriver = new com.mysql.jdbc.Driver();
DriverManager.registerDriver(monDriver);
connection = DriverManager.getConnection(url, login, password);
// - Chargement et compilation du rapport
jasperDesign = JRXmlLoader.load("C:\\Users\\hicham\\Documents\\NetBeansProjects\\impression_carte_pack_bidayati_12\\src\\la_vue.jrxml");
JRDesignQuery query=new JRDesignQuery();
query.setText("select rs, rc, date_add(date_format(date_rc,'%y/%m/%d'),interval 3 year) as "
+ " datex from impression where " + sb.toString() );
jasperDesign.setQuery(query);
JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);
Map parameters = new HashMap();
parameters.put("Titre", "Titre");
} catch (JRException e) {
System.err.println(e.getMessage());
} catch (SQLException e) {
System.err.println(e.getMessage());
} finally {
try {
connection.close();
} catch (SQLException e) {
System.err.println(e.getMessage());
}
}
/* DERNIERE ETAPE : on compile le tout avec les résultats qu'on a eu */
try {
//connection à la base
Driver monDriver = new com.mysql.jdbc.Driver();
DriverManager.registerDriver(monDriver);
connection = DriverManager.getConnection(url, login, password);
// la partie que j'ai fait sortir de la boucle while(i.hasNext())
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, connection);
JasperExportManager.exportReportToPdfFile(jasperPrint,"C:\\Users\\hicham\\Documents\\NetBeansProjects\\impression_carte_pack_bidayati_12\\src\\la_vuei.pdf");
JasperViewer.viewReport(jasperPrint);
} catch (JRException ex) {
}catch(SQLException z){
}
L'idée c'est que dans un premier temps je récupère tous les RC comme tu as fait, et que je mets ensuite dans une liste les RC qui n'ont pas été imprimés.
Une fois tout ça parcouru, je complète ta requête SQL pour pouvoir prendre en compte tous les RC non imprimés, à chaque fois toi tu faisais une requête par RC.
Ensuite je fais le rapport Jasper, et enfin la viewReport.
--
Pylouq Heureux sont ceux qui lisent le Réglement, ils ne finiront peut-être pas au bûcher.
C'est curieux ça. Peux-tu me dire quelle est la ligne concernée stp ? J'ai l'impression que tu essayes à un moment de manipuler le ResultSet alors qu'il a été fermé.
--
Pylouq Heureux sont ceux qui lisent le Réglement, ils ne finiront peut-être pas au bûcher.