Relatorio em Java Netbeans Desktop - jasperireports - passagem de parametros

7 respostas
wpellegrini

Pessoal, estou desenvolvendo uma aplicação no NetBeans 6.9.1 e os relatorios estou criando no ireports 3.7.5 ate ai tudo bem. consegui criar um botao e carregar o relatorio. Mas o que desejo ajuda é , coloquei o jtextfield no meu form e um button. Isso para passar parametros e gerar um relatorio de acordo com o que eu digitar no meu jtextfield, a consulta ta funcionando so que ele não da erro nem gera o relatorio alguem poderia me ajudar. abaixo estou colocando o codigo que fiz:

o que desejo é quando eu colocar o codigo ele faça um select no banco e so carregue o item solicitado. Dei um system.out.println para ve se a consulta ta correta e esta. Então quem puder me ajudar agradeceria muito.

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
try{

int codeve = Integer.parseInt(jTextField2.getText());


    Connection con = (Connection) new ConexaoMySQL().getConnection();
    String qr = "select * from recebimento where cod_recebimento="+codeve;
    //System.out.println(qr);
    Statement s = (Statement) con.createStatement();
    ResultSet rs=s.executeQuery(qr);
    JRResultSetDataSource tst= new JRResultSetDataSource(rs);
    HashMap map = new HashMap();
    map.put(qr, con);
    JasperPrint jp = JasperFillManager.fillReport("./jasper/relteste.jasper", map, tst);
    JasperViewer jrv = new JasperViewer(jp);
    jrv.setVisible(true);
}
catch(Exception e){
}
}

7 Respostas

DeGuedes

Opa, não sei se estou certo, mas acho q o seu erro esta no HashMap pois os vc esta dizendo q QR vai receber o CONN, eu uso o

Hashtable ht = new Hashtable();

O primeiro parametro é aquele q eh criado dentro do JasperReports e o segundo é o valor q esse parametro irá assumir!

Obs:nao sei se expliquei bem, qlqr duvida posta ai!
:smiley:

tinorberto

eu uso esse metodo

JasperPrint relatorio = null, relatorio2 = null;
    String descricaoParametro = null;
    try {
        HashMap parametros = new HashMap();
     //colocar o parametro no map 
    parametros.put("ID_PROFESSOR",professor);
        // carregando o arquivo .jasper
        JasperReport jasperReport = (JasperReport) JRLoader.loadObject(rel1);

         relatorio = JasperFillManager.fillReport( rel1, parametros, FabricaConexao.getConection() );

        JasperViewer visualizador = new JasperViewer( relatorio, false );
        visualizador.setVisible( true );

    }
    catch ( JRException e ){
        JOptionPane.showMessageDialog(null, "Ocorreu um erro na geração do relatorio");
        e.printStackTrace();
    }

flw

tinorberto

outra coisa aqui

map.put(qr, con);

vc deve passar o nome do parametro no report e o valor, tipo

map.put(ID, 10);

No seu report vc deve criar o parametro para receber esse valor. flw

L

bom vo post um codigo ve se entende é bem simples ,funcionormalmente...normal

package controller.relatorio;


import java.net.URL;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import model.to.RelatorioSeguradoTO;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.engine.util.JRLoader;
import net.sf.jasperreports.view.JasperViewer;



/* Primeira parte */  

public class Relatorio {   

	static Connection connection;
	ResultSet rs = null;   



	public Relatorio(Integer codigo) {    
		/* Efetua a conexao a base de dados e coleta os valores da base de dados armazenando-os  
       em um array para ser futuramente utilizado */  

		RelatorioSeguradoTO relatorioSeguradoTO = new RelatorioSeguradoTO();

		try {   
			Class.forName("org.apache.derby.jdbc.ClientDriver"); // O sun.jdbc.odbc.JdbcOdbcDriver significa que seria usado um banco access
			String url = "jdbc:derby://localhost:1527/Cadastro;create=false";// esta string carrega o nome da fonte de dados
			connection = DriverManager.getConnection(url,"vitor"," ");// aqui  efetuada conex�o passando -se a fonte de dados e o login e senha do banco, que neste caso n�sso existem.
			//System.out.println("Conexão estabelecida"); // exibida uma mensagem informando que a conex�o foi efetuada

			PreparedStatement pstm = connection.prepareStatement( "select * from tb_Cadastro where codigo = ?");

			pstm.setInt(1,codigo);

			rs = pstm.executeQuery();

			if(rs.next()) {   
				
                relatorioSeguradoTO.setCodigo(rs.getInt( "codigo"));
				relatorioSeguradoTO.setNomeSegurado(rs.getString( "nomeSegurado"));
				relatorioSeguradoTO.setNascimento(rs.getString( "Nascimento"));
				relatorioSeguradoTO.setSexo(rs.getString( "Sexo"));
				relatorioSeguradoTO.setCpf(rs.getString( "CPF"));
				relatorioSeguradoTO.setEnde(rs.getString( "Ende"));
				relatorioSeguradoTO.setBairro(rs.getString( "Bairro"));
				relatorioSeguradoTO.setNumeroRes(rs.getInt( "NumeroRes"));
				relatorioSeguradoTO.setComplemento(rs.getString( "codigo"));
				relatorioSeguradoTO.setProduto(rs.getString( "Produto"));
				relatorioSeguradoTO.setPremio(rs.getString( "Premio"));			
				relatorioSeguradoTO.setCep(rs.getString( "CEP"));	
				relatorioSeguradoTO.setUf(rs.getString( "UF"));	
				relatorioSeguradoTO.setNomeEmpresa(rs.getString( "nomeEmpresa"));	
				relatorioSeguradoTO.setEndrecoEmpresa(rs.getString( "endrecoEmpresa"));	
				relatorioSeguradoTO.setBairroEmpresa(rs.getString( "bairroEmpresa"));	
				relatorioSeguradoTO.setCidadeEmpresa(rs.getString( "cidadeEmpresa"));	
				relatorioSeguradoTO.setCnpj(rs.getString( "cnpj"));	
				relatorioSeguradoTO.setBanco(rs.getString( "banco"));	
				relatorioSeguradoTO.setAgencia(rs.getString( "agencia"));	
				relatorioSeguradoTO.setAgenciaDV(rs.getString( "agenciaDV"));	
				relatorioSeguradoTO.setConta(rs.getString( "conta"));	
				relatorioSeguradoTO.setContaDV (rs.getString( "contaDV"));	
				relatorioSeguradoTO.setTipoDeConta(rs.getString( "tipoDeConta"));	

				


			}   

		}   
		catch (Exception e) {   
			System.err.println("Problemas apresentados na operacao de conexao");   
			e.printStackTrace();   
		}   

		/* Inicio do bloco que ira gerar nossos relatorios e 3ª parte */  
		try {

			JRBeanCollectionDataSource ds = null;
			JasperPrint print = null;

			//Verifica se existe no minimo uma proposta a ser impressar 
			List<RelatorioSeguradoTO > listaRelatorio = new ArrayList<RelatorioSeguradoTO>();

			listaRelatorio.add(relatorioSeguradoTO);

			ds = new JRBeanCollectionDataSource(listaRelatorio);

			URL  url = getClass().getResource("/relatorio/Relatorio_Cadastro.jasper");

			JasperReport relatorioJasper = (JasperReport) JRLoader.loadObject(url);

			print = JasperFillManager.fillReport(relatorioJasper, null , ds);


			JasperViewer.viewReport(print,null,"Relatorio de Clientes", null);
		} catch (JRException e) {
			e.printStackTrace();
		}        

	}

	/* Aqui chamamos o construtor de nossa classe para exibirmos o relatorio e 4ª parte*/  

	//public static void main (String args[]) {   

	//	new Relatorio(1);   
		//System.out.println("ok");   
	//}   
}

qualquer coisa post mais duviddas!

abrxx

DeGuedes

Isso ai, no primeiro parametro vc passa uma String q foi criada dentro do JasperReports e no segundo o valor q esse parametro irá receber!!!

wpellegrini, arrume seu HashTable e seu relatorio ira funcionar! :wink:

wpellegrini

Valeu Galera, Estarei verificando e ja ja dou um retorno a voce.

wpellegrini

Pessoal ainda nada, mas ja ta adiantado. Ele ta lendo Jtextfield , mas quando clico no Button ele não esta carregando o relatorio de acordo com os parametros passados e sim esta buscando todos os registro.

So uma duvida no relatorio que eu criei no ireports3.7.5 eu preciso configurar o textfild que adicionei la para receber esse parametro ou não? pois percebi que o textfield tem uma propriedade chamada Editexpression no ireport mas não sei bem como funciona. Então eu criei o formulario com as tabelas normalmente de forma basica definindo os textField sincronizados com os campos da tabela e dou um preview e ele me mostra o formulario funcionando perfeitamente.

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {

try{
    int codeve = Integer.parseInt(jTextField2.getText());

    Connection con = (Connection) new ConexaoMySQL().getConnection();

    HashMap parametros = new HashMap();
         parametros.put("cod_recebimento", codeve);

    JasperPrint jp = JasperFillManager.fillReport("./jasper/relteste.jasper", parametros, con);

    JasperViewer jrv = new JasperViewer(jp);
    jrv.setVisible(true);

}

catch(Exception e){
}

}

Mas uma vez espero a ajuda se voces

Criado 4 de novembro de 2010
Ultima resposta 5 de nov. de 2010
Respostas 7
Participantes 4