[Resolvido]Passar parametros para o JasperReport

11 respostas
S

Galera…tenho uma aplicação q precisa gerar um relatorio…eh o seguinte…o relatorio vai ser sobre uma tarefa(que o usuario escolher) e suas subtarefas…soh q eu preciso passar para o jasper qual irá ser o id da tarefa…alguem sabe como eu passo uma sql pra ele? do java para o jasper…e nao dentro do proprio jasper…
desde já agradeço!

11 Respostas

F

Olá, o código para o que vc quer é o seguinte:

public void geraRelatorioPedDetalhado(String idPedido, String unidRequisitane, String dataPedido) throws JRException, Exception {

        banco.abrirConexao(objDados.driver, objDados.url, objDados.usuario, objDados.senha);//Aqui vc deve fazer conexão da forma que vc quiser
        Statement stm = banco.conexao.createStatement();
        String query = "SELECT \"ITEPED_IDPRODUTO\", \"PRO_DESCRICAO\", \"ITEPED_QUANTIDADE\", \"UNIMED_SIGLA\" FROM \"ITENSPEDIDO\", \"PRODUTO\", \"UNIDADEMEDIDA\" WHERE \"ITEPED_IDPEDIDO\" = " + idPedido + " AND \"ITEPED_IDPRODUTO\" = \"PRO_IDDOOBJETO\" AND \"PRO_IDUNIDADEMEDIDA\" = \"UNIMED_IDDOOBJETO\";";//Código SQL que ira retornar a consulta e que vc vai passar para o relatório
        ResultSet rs = stm.executeQuery(query);
        /* implementação da interface JRDataSource para DataSource ResultSet */
        JRResultSetDataSource jrRS = new JRResultSetDataSource(rs);
        /* HashMap de parametros utilizados no relatório. Sempre instanciados */
        Map parameters = new HashMap();
        //Passa as datas como parâmetro para aparecer no relatório
        parameters.put("idPedido", idPedido);//Aqui vc passa os parâmetros para um hashmap, que será enviado para o relatório
        parameters.put("unidRequisitante", unidRequisitane);
        parameters.put("dataPedido", dataPedido);
        /* Preenche o relatório com os dados. */
        String jasperPrint = JasperFillManager.fillReportToFile("Relatórios/PedidoDetalhado.jasper", parameters, jrRS);//Aqui vc chama o relatório
        JasperViewer viewer = new JasperViewer(jasperPrint, false, false);
        viewer.setExtendedState(JasperViewer.MAXIMIZED_BOTH);//Coloca em maximizado
        viewer.setTitle("Pedido Detalhado");//Coloca um título no relatório
        viewer.setVisible(true);
    }

Seguinte, vc tem q criar parametros com o mesmo nome e tipo destes q estão no código e vc precisa ter um .jasper no diretório q vc informar, ou seja, um relatório compilado.
Espero ter ajudado!
T+ 8)

S

vlww
mas ele deu um erro rsrs

esse > Exception in thread “AWT-EventQueue-0” java.lang.NoClassDefFoundError: Lorg/apache/commons/logging/Log;

eh na hora q eu seto o local do arquivo do jasper…eu jah conferi e esta certo o local…
o q devo fazer???

flw

S

?

T

commons-logging

S

agora deu esse erro:

java.lang.NoClassDefFoundError: org/apache/commons/digester/Rule

T

amigo coloque os jars necessarios do iReport…

commons-digester

S

jah puis esse dois commons agora ele deu o seguinte erro:

org.codehaus.groovy.control.CompilationFailedException

:S
ta complicado rs

T

no relatorio mude de groovy para java.

mas sem querer abusar … vc da uma pesquisada antes de postar? =x
esses erros saem na primeira pagina do google :wink:

não é por nada… mas nao custa dar uma pesquisadinha ^^

S

aew…agora ele apareceu…mas ele nao ta pegando o meu parametro…segue o codigo:

String sql = "";
		try{
			Statement stm = BD.connection.createStatement();  
			sql = "SELECT * FROM pendencia WHERE id_tarefa = \"IDTAREFA\"";//Código SQL que ira retornar a consulta e que vc vai passar para o relatório
			ResultSet rs = stm.executeQuery(sql);
			/* implementação da interface JRDataSource para DataSource ResultSet */
			JRResultSetDataSource jrRS = new JRResultSetDataSource(rs);
			/* HashMap de parametros utilizados no relatório. Sempre instanciados */
			Map parameters = new HashMap();
			//Passa as datas como parâmetro para aparecer no relatório
			parameters.put("IDTAREFA", idTarefa);//Aqui vc passa os parâmetros para um hashmap, que será enviado para o relatório
	       
			/* Preenche o relatório com os dados. */
			String jasperPrint = JasperFillManager.fillReportToFile("C:/Documents and Settings/Administrador/Meus documentos/Reports.jasper", parameters, jrRS);//Aqui vc chama o relatório
			JasperViewer viewer = new JasperViewer(jasperPrint, false, false);
			viewer.setExtendedState(JasperViewer.MAXIMIZED_BOTH);//Coloca em maximizado
			viewer.setTitle("Pedido Detalhado");//Coloca um título no relatório
			viewer.setVisible(true);
		}
		catch(Exception erro){
			erro.printStackTrace();
		}

o que ha de errado?

T

vc criou no seu relatorio um $Parameter

chamado:

$P{IDTAREFA}

??

Da forma que esta fazendo esta errado. uma informação de SQL nao é informação de parameter… parameters.put é parametro para o relatorio.
desde que ele exista no relatorio

S

sim...mas ja consegui resolver...segue abaixo o codigo:

String sql = "";
		try{
			Statement stm = BD.connection.createStatement();  
			sql = "SELECT * FROM pendencia WHERE id_tarefa = "+idTarefa+"";//Código SQL que ira retornar a consulta e que vc vai passar para o relatório
			ResultSet rs = stm.executeQuery(sql);
			/* implementação da interface JRDataSource para DataSource ResultSet */
			JRResultSetDataSource jrRS = new JRResultSetDataSource(rs);
	       
			/* Preenche o relatório com os dados. */
			String jasperPrint = JasperFillManager.fillReportToFile("C:/Documents and Settings/Administrador/Meus documentos/Reports.jasper", null, jrRS);//Aqui vc chama o relatório
			JasperViewer viewer = new JasperViewer(jasperPrint, false, false);
			viewer.setExtendedState(JasperViewer.MAXIMIZED_BOTH);//Coloca em maximizado
			viewer.setTitle("Histórico - Tarefa nº " + idTarefa);//Coloca um título no relatório
			viewer.setVisible(true);
		}
		catch(Exception erro){
			erro.printStackTrace();
		}

Muito obrigado pela ajuda!

Criado 24 de maio de 2010
Ultima resposta 24 de mai. de 2010
Respostas 11
Participantes 3