ActionListener pra relatório do iReport

7 respostas
igorbrites

Olha eu aqui de novo!!!! :oops:

Agora meu problema é com o iReport. Preciso criar um botão que cria o relatório. Já tenho o corpo do relatório pronto dentro do iReport, só preciso imprimir ele com o meu programinha de cadastro. Ah, e como faço pra passar um parametro pro iReport pra imprimir só o relatório q eu tô querendo e não todos que estão na minha database? Tô usando o Eclipse SDK 3.2.

Tô fazendo dessa forma:

private JButton getJButton() {
	if (jButton == null) {
		jButton = new JButton();
		jButton.setBounds(new Rectangle(75, 370, 95, 30));
		jButton.setText("Imprimir");
		jButton.addActionListener(new ActionListener() {
			private Connection connection;
				
			public void actionPerformed(ActionEvent arg0) {
			try{
				String sql = "Select * from cadastro";
				Statement stmt = connection.createStatement();
				ResultSet rs = stmt.executeQuery(sql); 
				JRResultSetDataSource jrrs = new JRResultSetDataSource(rs); 
				HashMap parameters = new HashMap(); 
				rs.next(); 
				parameters.put("cadastro_OS",Integer.parseInt(txtOs.getText())); //essa linha aparece tracejada de amarelo...
				JasperPrint print = JasperFillManager.fillReport("C:/workspace/cadastro_manutencao/RelatorioOs.jasper",parameters,jrrs);  //new HashMap(),new JREmptyDataSource()); 
				JasperViewer jrviewer = new JasperViewer(print,false); 
				jrviewer.setVisible(true); 
				}catch(JRException jre){
					jre.printStackTrace();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
				
		});
	}return jButton;
}

Vlw!!!! :D

7 Respostas

igorbrites

Só pra constar, o erro que aparece qdo clico no botão é esse:

Exception in thread AWT-EventQueue-0 java.lang.NullPointerException

at cadastro.index$1.actionPerformed(index.java:353)

at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)

at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)

at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)

at javax.swing.DefaultButtonModel.setPressed(Unknown Source)

at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)

at java.awt.Component.processMouseEvent(Unknown Source)

at javax.swing.JComponent.processMouseEvent(Unknown Source)

at java.awt.Component.processEvent(Unknown Source)

at java.awt.Container.processEvent(Unknown Source)

at java.awt.Component.dispatchEventImpl(Unknown Source)

at java.awt.Container.dispatchEventImpl(Unknown Source)

at java.awt.Component.dispatchEvent(Unknown Source)

at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)

at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)

at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)

at java.awt.Container.dispatchEventImpl(Unknown Source)

at java.awt.Window.dispatchEventImpl(Unknown Source)

at java.awt.Component.dispatchEvent(Unknown Source)

at java.awt.EventQueue.dispatchEvent(Unknown Source)

at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)

at java.awt.EventDispatchThread.pumpEvents(Unknown Source)

at java.awt.EventDispatchThread.pumpEvents(Unknown Source)

at java.awt.EventDispatchThread.run(Unknown Source)
igorbrites

Agora o erro q está aparecendo é esse:

net.sf.jasperreports.engine.JRException: Unknown column name : cadastro_CLIENTE

at net.sf.jasperreports.engine.JRResultSetDataSource.getColumnIndex(JRResultSetDataSource.java:356)

at net.sf.jasperreports.engine.JRResultSetDataSource.getFieldValue(JRResultSetDataSource.java:116)

at net.sf.jasperreports.engine.fill.JRFillDataset.setOldValues(JRFillDataset.java:814)

at net.sf.jasperreports.engine.fill.JRFillDataset.next(JRFillDataset.java:778)

at net.sf.jasperreports.engine.fill.JRBaseFiller.next(JRBaseFiller.java:1417)

at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:111)

at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:891)

at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:814)

at net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:89)

at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:601)

at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:517)

at cadastro.index$1.actionPerformed(index.java:385)

at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)

at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)

at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)

at javax.swing.DefaultButtonModel.setPressed(Unknown Source)

at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)

at java.awt.Component.processMouseEvent(Unknown Source)

at javax.swing.JComponent.processMouseEvent(Unknown Source)

at java.awt.Component.processEvent(Unknown Source)

at java.awt.Container.processEvent(Unknown Source)

at java.awt.Component.dispatchEventImpl(Unknown Source)

at java.awt.Container.dispatchEventImpl(Unknown Source)

at java.awt.Component.dispatchEvent(Unknown Source)

at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)

at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)

at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)

at java.awt.Container.dispatchEventImpl(Unknown Source)

at java.awt.Window.dispatchEventImpl(Unknown Source)

at java.awt.Component.dispatchEvent(Unknown Source)

at java.awt.EventQueue.dispatchEvent(Unknown Source)

at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)

at java.awt.EventDispatchThread.pumpEvents(Unknown Source)

at java.awt.EventDispatchThread.pumpEvents(Unknown Source)

at java.awt.EventDispatchThread.run(Unknown Source)

Ele não tá achando a coluna cadastro_CLIENTE que já existe dentro do meu relatório do iReport. Já lí e relí o nome das colunas do meu relatório e está tudo certinho, então não sei porque cargas d’água (essa eu puxei não sei de onde) esse código não está funcionando.

E eis meu código que “funcionou”:

public void actionPerformed(ActionEvent arg0) { JasperPrint rel = new JasperPrint(); try { Class.forName("com.mysql.jdbc.Driver"); connection = DriverManager.getConnection("jdbc:mysql://localhost/cadastro", "root",""); } catch (Exception ex) { ex.printStackTrace(); } PreparedStatement pstmt = null; try { pstmt = connection.prepareStatement("SELECT * FROM cadastro WHERE OS = ?"); } catch (SQLException e1) { e1.printStackTrace(); } try { pstmt.setString(1, txtOs.getText()); } catch (SQLException e1) { e1.printStackTrace(); } ResultSet rs = null; try { rs = pstmt.executeQuery(); } catch (SQLException e1) { e1.printStackTrace(); } String arquivoRelatorio = "C:/workspace/cadastro_manutencao/RelatorioOs.jasper"; HashMap parametros = new HashMap(); parametros.put("cadastro_OS",txtOs.getText()); try { rel = JasperFillManager.fillReport(arquivoRelatorio,parametros, new JRResultSetDataSource(rs)); } catch (JRException e) { //JOptionPane.showMessageDialog(null,e.getMessage()); e.printStackTrace(); } JasperViewer viewer = new JasperViewer(rel,true); viewer.setTitle("Ordem de Serviço nº " + txtOs.getText()); viewer.setVisible(true); txtOs.setText(""); txtOs.requestFocus(); }

Eu vou apelar e fazer meu relatório de novo pra ver que bicho que dá. Mas se alguém puder me ajudar agradeço de coração.

Falow!!

G

de kra deu pra perceber que ele nao esta achando a coluna nome, no ireport esta funcionando perfeitamente?

thokk

Olha se não me engano vc tem que linkar o campo. Pelo menos fiz uma aplicação conversando o Reporting Services, a forma mais sensata de fazer foi:

@Uma Variavel qualquer, ele entende que vc esta linkando.

Dessa forma vc vai passar o valor de acordo com o solicitado, se é o id do relatório, então passa o id e na cosulta do ireport vc recebe o que valor que esta linkado. Se o caminho é esse “C:/workspace/cadastro_manutencao/RelatorioOs.jasper”, vc não concorda que nele tbm tem que ir o parametro. Aqui vai testando, mas acho que o caminho seria este que te avisei.
O meu como estava num servidor ficou dessa forma.
String Acao = “00000C985623”

http://baryon/Reportserver?%2FSIGERE%2FTeste1&rs:Command=Render&rc:Parameters=false&stSDOid=" & Acao

E no meu relatório estava linkado dessa forma no campo que tinha que receber este valor, para poder pegar o relatório corretamente: @stSDOid. Repare que mandei ele ler.

Veja e estude mais a respeito de passagem de parametro.

igorbrites

gzofera, realmente acho q o meu select dentro do iReport está com problema, pq eu peço pra rodar e ele só fica nessa mensagem e não me mostra o relatório:

Compilando para o arquivo ... .\RelatorioOs.jasper -> C:\Arquivos de programas\JasperSoft\iReport-2.0.4\classic.java Tempo de execução de compilação: 203

Mas vou fazer como disse meu amigo thokk e estudar mais passagem de parâmetro. Mas se vc tiver alguma outra ideia agradeço.

Obrigado a todos.

igorbrites

Que caramba!

Agora meu relatório imprime, mas aparecem todos os registros do meu banco!!!!!!

Eis o código q "funcionou":

try { 
	Class.forName("com.mysql.jdbc.Driver"); 
	connection = DriverManager.getConnection("jdbc:mysql://localhost/cadastro", "root",""); 
	} catch (Exception ex) { 
	ex.printStackTrace(); 
	} 
	PreparedStatement pstmt = null;
	
	try {
		pstmt = connection.prepareStatement("SELECT * FROM cadastro WHERE OS = ?");
		pstmt.setString(1, txtOs.getText());
	} catch (SQLException e1) {
		e1.printStackTrace();
	} 

	ResultSet rs = null;
	try {
	rs = pstmt.executeQuery();
	} catch (SQLException e1) {
		e1.printStackTrace();
	} 		
		String arquivoRelatorio = "C:/workspace/cadastro_manutencao/RelatorioOs.jasper"; 
		//String acao = "txtOs.getText()";
		Map parametros = new HashMap(); 
		try {
			while(rs.next()){
			parametros.put("Teste", rs.getString("OS"));
			rs.next();
			}
		} catch (SQLException e1) {
			e1.printStackTrace();
		}
		try { 
			rel = JasperFillManager.fillReport(arquivoRelatorio,parametros, connection); 
		} catch (JRException e) { 
		JOptionPane.showMessageDialog(null,e.getMessage());
			//e.printStackTrace();
		} 
		JasperViewer viewer = new JasperViewer(rel,true); 
		viewer.setTitle("Ordem de Serviço nº " + txtOs.getText()); 
		viewer.setVisible(true); 
		txtOs.requestFocus(); 
		
		}
	}
Onde o Teste é o meu parametro dentro da query do iReport. A query ficou assim:
select * from cadastro where OS = $P!{Teste}

Alguém tem idéia?

Vlw! :lol:

igorbrites

Fala galerinha do bem!!!

Consegui o código que fazia exatamente oque eu precisava. Depois de bater cabeça até não aguentar mais, usei uma forma BEM mais fácil:

private JButton getJButton() { if (jButton == null) { jButton = new JButton(); jButton.setBounds(new Rectangle(75, 370, 95, 30)); jButton.setText("Imprimir"); jButton.addActionListener(new ActionListener() { private Connection connection; public void actionPerformed(ActionEvent arg0) { JasperPrint rel = new JasperPrint(); try { Class.forName("com.mysql.jdbc.Driver"); connection = DriverManager.getConnection("jdbc:mysql://localhost/cadastro", "root",""); } catch (Exception ex) { ex.printStackTrace(); } PreparedStatement pstmt = null; try { pstmt = connection.prepareStatement("SELECT * FROM cadastro"); } catch (SQLException e1) { e1.printStackTrace(); } ResultSet rs = null; try { rs = pstmt.executeQuery(); } catch (SQLException e1) { e1.printStackTrace(); } String arquivoRelatorio = "C:/workspace/cadastro_manutencao/RelatorioOs.jasper"; Map<String, String> parametros = new HashMap<String, String>(); try { while(rs.next()){ parametros.put("numOs", txtOs.getText()); rs.next(); } } catch (SQLException e1) { e1.printStackTrace(); } try { rel = JasperFillManager.fillReport(arquivoRelatorio, parametros, connection); } catch (JRException e) { e.printStackTrace(); } JasperViewer viewer = new JasperViewer(rel,true); viewer.setTitle("Ordem de Serviço nº " + txtOs.getText()); viewer.setVisible(true); txtOs.requestFocus(); } } ); }return jButton; }

Espero poder ajudar alguém aí. Vlw galera!!!

Criado 3 de maio de 2008
Ultima resposta 26 de mai. de 2008
Respostas 7
Participantes 3