Ireport Passando parametro duvida ?{Resolvido}

36 respostas
magalli

Estou tendo problema com passagem de parametro para o Ireport,
este é meu código SQL,

SELECT
     cliente.`codigo` AS cliente_codigo,
     cliente.`nome` AS cliente_nome,
     cliente.`cpf` AS cliente_cpf,
     cliente.`rg` AS cliente_rg,
     cliente.`nomecid` AS cliente_nomecid,
     cliente.`telres` AS cliente_telres
FROM
     `cliente` cliente
ORDER BY
     cliente.`codigo` ASC

esse é o meu SQL do meu arquivo .jasper, eu queria passar um parametro para ele para ele ordenar por codigo ou por nome,
ou seja no meu software vai ter dois radio button um com nome de codigo e outro com nome de nome, como que faço
o parametro para pegar por nome ou por código e passar isso para meu software ??

36 Respostas

magalli

Pessoal por favoor alguém me ajuda to com muito dificuldade pra resolver isto e tenho pouco tempo, tenho que atingir metas…

robinsonbsilva

Bom dia Magali,

Você poderia especificar um pouquinho melhor??
Por acaso vc tem uma query no Ireport e quer passar esses parametros para ela??

magalli

Bom dia Robinson,
Eu montei essa query

SELECT
     cliente.`codigo` AS cliente_codigo,
     cliente.`nome` AS cliente_nome,
     cliente.`cpf` AS cliente_cpf,
     cliente.`rg` AS cliente_rg,
     cliente.`nomecid` AS cliente_nomecid,
     cliente.`telres` AS cliente_telres
FROM
     `cliente` cliente
ORDER BY
[b]     $P{ordenar_nome}[/b]
 que nela  $P{ordenar_nome} não coloquei código nenhum no ireport não sei que parametro devo passar,

exemplo se fosse para data eu sei que teria que fazer assim

$P{data_inicio}

e depois colocaria o valor da expressão sendo new Date(30/01/2013)

mas para ordenar por nome ou código não sei to peridida, obrigada por ter respondido =)
R

se for por nome, passa o campo nome na variavel $P{ordenar_nome} e se for pra ordenar por codigo, passa o nome da coluna código que ta buscando no sql

nao tem segredo

magalli

redr4gon:

se for por nome, passa o campo nome na variavel $P{ordenar_nome} e se for pra ordenar por codigo, passa o nome da coluna código que ta buscando no sql

nao tem segredo

Então no ireport eu deixo $P{ordenar_nome} e não atribuo valor a expressão ?
e depois no codigo java eu faço assim ??

hash.put("ordenar_nome", nome);
hash.put("ordenar_nome", codigo);

uma para código e outra para nome ???

robinsonbsilva

Faz assim:

SELECT
     cliente.`codigo` AS cliente_codigo,
     cliente.`nome` AS cliente_nome,
     cliente.`cpf` AS cliente_cpf,
     cliente.`rg` AS cliente_rg,
     cliente.`nomecid` AS cliente_nomecid,
     cliente.`telres` AS cliente_telres
FROM
     `cliente` cliente
ORDER BY
$P{ordenar_nome}

Onde:

$P{ordenar_nome}

Receberá a coluna que servirá como padrão de ordenação.

hash.put("ordenar_nome", nome);  //exemplo hash.put("ordenar_nome", "cliente.nomecid"); não use o alias.

No caso, vc só pode passar um tipo de ordenação, caso passe mais de um, o ultimo sobrescreverá o anterior.

magalli

robinsonbsilva:
Faz assim:

SELECT
     cliente.`codigo` AS cliente_codigo,
     cliente.`nome` AS cliente_nome,
     cliente.`cpf` AS cliente_cpf,
     cliente.`rg` AS cliente_rg,
     cliente.`nomecid` AS cliente_nomecid,
     cliente.`telres` AS cliente_telres
FROM
     `cliente` cliente
ORDER BY
$P{ordenar_nome}

Onde:

$P{ordenar_nome}

Receberá a coluna que servirá como padrão de ordenação.

hash.put("ordenar_nome", nome);  //exemplo hash.put("ordenar_nome", "cliente.nomecid"); não use o alias.

No caso, vc só pode passar um tipo de ordenação, caso passe mais de um, o ultimo sobrescreverá o anterior.

Eu fiz assim

private void btVisualizarActionPerformed(java.awt.event.ActionEvent evt) { try{ Connection con = new Conexao().conectar(); HashMap hash = new HashMap(); if(this.verificaRelatorio() == 1){ JasperPrint jpt = JasperFillManager.fillReport("./Relatorio/RelacaoCliente.jasper", hash, con); hash.put("ordernar_nome", "nome"); JasperViewer jv = new JasperViewer( jpt ); jv.setVisible( true ); }else if(this.verificaRelatorio() == 2){ JasperPrint jpt = JasperFillManager.fillReport("./Relatorio/RelacaoCliente.jasper", hash, con); hash.put("ordernar_nome", "codigo"); JasperViewer jv = new JasperViewer( jpt ); jv.setVisible( true ); if(this.verificaRelatorio() != 3){ hash.put("ordernar_codigo", null); } }else{ JOptionPane.showMessageDialog(null, "Selecione uma opção de ordenação!", "Aviso!", JOptionPane.WARNING_MESSAGE); } } catch(Exception e){ e.printStackTrace(); } }

Quando escolho a opção ordenar por código ele ordena por código e quando escolho ordenar por nome ele ordena por codigo…vo fica louca com ireport…

robinsonbsilva

Magali,

Uma sugestão legal, se der, usa uma collection como datasource no ireport, veja:
método que “gera um PDF”

public String impressaoContrato(Contrato contrato) throws FacadeException {
    	
		try{
			
			FactoryDAO factory = BaseDAOFactory.getFactory();
			AlunoDAO daoAluno = factory.getAlunoDAO();
			AlunoResponsavelDAO daoReponsavel = factory.getAlunoResponsavelDAO();
			MatriculaDAO daoMatricula = factory.getMatriculaDAO();
	
			List<Aluno>  alunos = daoAluno.findByCpf(contrato.getCpf());
			ContratoHelper c = new ContratoHelper();
		
			c.setNome(alunos.get(0).getNome());
			c.setCpf(alunos.get(0).getCpf());
			c.setRg(alunos.get(0).getRg());
			c.setLogradouro(alunos.get(0).getEndereco().getLogradouro());
			c.setNumero(alunos.get(0).getEndereco().getNumero());
			c.setBairro(alunos.get(0).getEndereco().getBairro());
			c.setCidade(alunos.get(0).getEndereco().getCidade());
			c.setEstado(alunos.get(0).getEndereco().getEstado());
			c.setComplemento(alunos.get(0).getEndereco().getComplemento());
			c.setCep(alunos.get(0).getEndereco().getCep());  	
			c.setNumeroContrato(contrato.getId().toString());
	    	c.setCursoContratado(contrato.getCurso().getNome());
	    	c.setQtdeVagasContratadas(contrato.getQtdeVaga());
	    	c.setValorNegociado(contrato.getValorNegociado());
	    	c.setQtdeParcela(contrato.getQtdeParcela());
	    	c.setValorParcela(contrato.getValorParcela());
	    	c.setDataPrimeiroVencimento(contrato.getDataVencimento());
	    	c.setDataInicioContrato(contrato.getDataInicioContrato());
	    	c.setDataFimContrato(contrato.getDataFimContrato());


	    	List<Matriculado> matriculados = new ArrayList<Matriculado>();
	    	Matriculado m = null;

	    	List<Matricula> matriculas = daoMatricula.findByContrato(contrato.getId());
	    	for(Matricula matricula: matriculas){
	    		m = c.new Matriculado();
	    		m.setMatriculaId(matricula.getId().toString());
	    		m.setAlunoNome(matricula.getAluno().getNome());
	    		m.setAlunoCPF(matricula.getAluno().getCpf());
	    		m.setTurmaId(matricula.getTurma().getId().toString());
	    		m.setTurmaNome(matricula.getTurma().getNome());
	    		m.setCursoNome(matricula.getTurma().getCurso().getNome());
	    		matriculados.add(m);

	    		matricula = null;
	    		m = null;
	    	}
	    	
	    	c.setMatriculados(matriculados);
	
	    	List<ContratoHelper> dados = new ArrayList<ContratoHelper>();
	    	dados.add(c);

			HashMap<String, String> parameters = new HashMap<String, String>();
			parameters.put("SUBREPORT_DIR", "D:/Pessoal/renaissance/src/br/com/renaissance/reports/");

	    	ReportCreator report = new ReportCreator();
			try {
				report.create(dados, parameters, "contrato");
			} catch (ReportException e) {
				throw new FacadeException(e);
			}
		} catch (DAOException e) {
			throw new FacadeException(e);
		}

		return null;
    }

Essa classe é utilizada para todos relatórios, no meu caso, uso JSF, mas dá para adapta-la para “swing”

public class ReportCreator {
	
	@SuppressWarnings({ "rawtypes", "unchecked" })
	public void create(List dados, HashMap parameters, String reportName) throws ReportException {

		FacesContext facesContext = FacesContext.getCurrentInstance();
		HttpServletResponse response = (HttpServletResponse) facesContext.getExternalContext().getResponse();
		InputStream reportStream = facesContext.getExternalContext().getResourceAsStream("/WEB-INF/classes/br/com/renaissance/reports/" + reportName + ".jasper");

		JRDataSource jrds = new JRBeanCollectionDataSource(dados);

		try {
			ServletOutputStream servletOutputStream = response.getOutputStream();
			response.setContentType("application/pdf");
			facesContext.responseComplete();

			try {
				JasperRunManager.runReportToPdfStream(reportStream, servletOutputStream, parameters, jrds);
			} catch (JRException e) {
				throw new ReportException(e.getMessage());
			}
			servletOutputStream.flush();
			servletOutputStream.close();
		} catch (IOException e) {
			throw new ReportException(e.getMessage());
		} catch (Exception e) {
			throw new ReportException(e.getMessage());
		}
	}

}
magalli
robinsonbsilva:
Magali, Uma sugestão legal, se der, usa uma collection como datasource no ireport, veja: método que "gera um PDF"
public String impressaoContrato(Contrato contrato) throws FacadeException {
    	
		try{
			
			FactoryDAO factory = BaseDAOFactory.getFactory();
			AlunoDAO daoAluno = factory.getAlunoDAO();
			AlunoResponsavelDAO daoReponsavel = factory.getAlunoResponsavelDAO();
			MatriculaDAO daoMatricula = factory.getMatriculaDAO();
	
			List<Aluno>  alunos = daoAluno.findByCpf(contrato.getCpf());
			ContratoHelper c = new ContratoHelper();
		
			c.setNome(alunos.get(0).getNome());
			c.setCpf(alunos.get(0).getCpf());
			c.setRg(alunos.get(0).getRg());
			c.setLogradouro(alunos.get(0).getEndereco().getLogradouro());
			c.setNumero(alunos.get(0).getEndereco().getNumero());
			c.setBairro(alunos.get(0).getEndereco().getBairro());
			c.setCidade(alunos.get(0).getEndereco().getCidade());
			c.setEstado(alunos.get(0).getEndereco().getEstado());
			c.setComplemento(alunos.get(0).getEndereco().getComplemento());
			c.setCep(alunos.get(0).getEndereco().getCep());  	
			c.setNumeroContrato(contrato.getId().toString());
	    	c.setCursoContratado(contrato.getCurso().getNome());
	    	c.setQtdeVagasContratadas(contrato.getQtdeVaga());
	    	c.setValorNegociado(contrato.getValorNegociado());
	    	c.setQtdeParcela(contrato.getQtdeParcela());
	    	c.setValorParcela(contrato.getValorParcela());
	    	c.setDataPrimeiroVencimento(contrato.getDataVencimento());
	    	c.setDataInicioContrato(contrato.getDataInicioContrato());
	    	c.setDataFimContrato(contrato.getDataFimContrato());


	    	List<Matriculado> matriculados = new ArrayList<Matriculado>();
	    	Matriculado m = null;

	    	List<Matricula> matriculas = daoMatricula.findByContrato(contrato.getId());
	    	for(Matricula matricula: matriculas){
	    		m = c.new Matriculado();
	    		m.setMatriculaId(matricula.getId().toString());
	    		m.setAlunoNome(matricula.getAluno().getNome());
	    		m.setAlunoCPF(matricula.getAluno().getCpf());
	    		m.setTurmaId(matricula.getTurma().getId().toString());
	    		m.setTurmaNome(matricula.getTurma().getNome());
	    		m.setCursoNome(matricula.getTurma().getCurso().getNome());
	    		matriculados.add(m);

	    		matricula = null;
	    		m = null;
	    	}
	    	
	    	c.setMatriculados(matriculados);
	
	    	List<ContratoHelper> dados = new ArrayList<ContratoHelper>();
	    	dados.add(c);

			HashMap<String, String> parameters = new HashMap<String, String>();
			parameters.put("SUBREPORT_DIR", "D:/Pessoal/renaissance/src/br/com/renaissance/reports/");

	    	ReportCreator report = new ReportCreator();
			try {
				report.create(dados, parameters, "contrato");
			} catch (ReportException e) {
				throw new FacadeException(e);
			}
		} catch (DAOException e) {
			throw new FacadeException(e);
		}

		return null;
    }
Essa classe é utilizada para todos relatórios, no meu caso, uso JSF, mas dá para adapta-la para "swing"
public class ReportCreator {
	
	@SuppressWarnings({ "rawtypes", "unchecked" })
	public void create(List dados, HashMap parameters, String reportName) throws ReportException {

		FacesContext facesContext = FacesContext.getCurrentInstance();
		HttpServletResponse response = (HttpServletResponse) facesContext.getExternalContext().getResponse();
		InputStream reportStream = facesContext.getExternalContext().getResourceAsStream("/WEB-INF/classes/br/com/renaissance/reports/" + reportName + ".jasper");

		JRDataSource jrds = new JRBeanCollectionDataSource(dados);

		try {
			ServletOutputStream servletOutputStream = response.getOutputStream();
			response.setContentType("application/pdf");
			facesContext.responseComplete();

			try {
				JasperRunManager.runReportToPdfStream(reportStream, servletOutputStream, parameters, jrds);
			} catch (JRException e) {
				throw new ReportException(e.getMessage());
			}
			servletOutputStream.flush();
			servletOutputStream.close();
		} catch (IOException e) {
			throw new ReportException(e.getMessage());
		} catch (Exception e) {
			throw new ReportException(e.getMessage());
		}
	}

}

Eu vo tenta fazer mais o meu código que eu postei tem algo errado ? o parametro meu $P{ordenar_nome} dentro do ireport o valor da expressão esta sem nada, será que tenho que coloca alguma coisa ?? obrigada pelos codigos, eles estaõ me ajudando de forma magnifica...=)

R

magalli:
robinsonbsilva:
Faz assim:

SELECT
     cliente.`codigo` AS cliente_codigo,
     cliente.`nome` AS cliente_nome,
     cliente.`cpf` AS cliente_cpf,
     cliente.`rg` AS cliente_rg,
     cliente.`nomecid` AS cliente_nomecid,
     cliente.`telres` AS cliente_telres
FROM
     `cliente` cliente
ORDER BY
$P{ordenar_nome}

Onde:

$P{ordenar_nome}

Receberá a coluna que servirá como padrão de ordenação.

hash.put("ordenar_nome", nome);  //exemplo hash.put("ordenar_nome", "cliente.nomecid"); não use o alias.

No caso, vc só pode passar um tipo de ordenação, caso passe mais de um, o ultimo sobrescreverá o anterior.

Eu fiz assim

private void btVisualizarActionPerformed(java.awt.event.ActionEvent evt) { try{ Connection con = new Conexao().conectar(); HashMap hash = new HashMap(); if(this.verificaRelatorio() == 1){ JasperPrint jpt = JasperFillManager.fillReport("./Relatorio/RelacaoCliente.jasper", hash, con); hash.put("ordernar_nome", "nome"); JasperViewer jv = new JasperViewer( jpt ); jv.setVisible( true ); }else if(this.verificaRelatorio() == 2){ JasperPrint jpt = JasperFillManager.fillReport("./Relatorio/RelacaoCliente.jasper", hash, con); hash.put("ordernar_nome", "codigo"); JasperViewer jv = new JasperViewer( jpt ); jv.setVisible( true ); if(this.verificaRelatorio() != 3){ hash.put("ordernar_codigo", null); } }else{ JOptionPane.showMessageDialog(null, "Selecione uma opção de ordenação!", "Aviso!", JOptionPane.WARNING_MESSAGE); } } catch(Exception e){ e.printStackTrace(); } }

Quando escolho a opção ordenar por código ele ordena por código e quando escolho ordenar por nome ele ordena por codigo…vo fica louca com ireport…

magalli… vc colocou o parametro como “ordernar” o java e dentro do jasper colocou “ordenar” =)

magalli

redr4gon:
magalli:
robinsonbsilva:
Faz assim:

SELECT
     cliente.`codigo` AS cliente_codigo,
     cliente.`nome` AS cliente_nome,
     cliente.`cpf` AS cliente_cpf,
     cliente.`rg` AS cliente_rg,
     cliente.`nomecid` AS cliente_nomecid,
     cliente.`telres` AS cliente_telres
FROM
     `cliente` cliente
ORDER BY
$P{ordenar_nome}

Onde:

$P{ordenar_nome}

Receberá a coluna que servirá como padrão de ordenação.

hash.put("ordenar_nome", nome);  //exemplo hash.put("ordenar_nome", "cliente.nomecid"); não use o alias.

No caso, vc só pode passar um tipo de ordenação, caso passe mais de um, o ultimo sobrescreverá o anterior.

Eu fiz assim

private void btVisualizarActionPerformed(java.awt.event.ActionEvent evt) { try{ Connection con = new Conexao().conectar(); HashMap hash = new HashMap(); if(this.verificaRelatorio() == 1){ JasperPrint jpt = JasperFillManager.fillReport("./Relatorio/RelacaoCliente.jasper", hash, con); hash.put("ordernar_nome", "nome"); JasperViewer jv = new JasperViewer( jpt ); jv.setVisible( true ); }else if(this.verificaRelatorio() == 2){ JasperPrint jpt = JasperFillManager.fillReport("./Relatorio/RelacaoCliente.jasper", hash, con); hash.put("ordernar_nome", "codigo"); JasperViewer jv = new JasperViewer( jpt ); jv.setVisible( true ); if(this.verificaRelatorio() != 3){ hash.put("ordernar_codigo", null); } }else{ JOptionPane.showMessageDialog(null, "Selecione uma opção de ordenação!", "Aviso!", JOptionPane.WARNING_MESSAGE); } } catch(Exception e){ e.printStackTrace(); } }

Quando escolho a opção ordenar por código ele ordena por código e quando escolho ordenar por nome ele ordena por codigo…vo fica louca com ireport…

magalli… vc colocou o parametro como “ordernar” o java e dentro do jasper colocou “ordenar” =)

rsrrsrs…burrice minha…, mudei aqui mais mesmo assim ele continua ordenando somente por código e por nome não…
será que falta expressão nessa query $P{ordernar_nome} ??

robinsonbsilva

Magali,

Tenta criar apenas um parametro para ordenação, ai de acordo com a opção selecionada, vc passar o criterio certo
ex:

$P{ordenar_por}

Na tela:

if(this.verificaRelatorio() == 1){  
           JasperPrint jpt = JasperFillManager.fillReport("./Relatorio/RelacaoCliente.jasper", hash, con);  
            hash.put("ordernar_por", "nome");  
           JasperViewer jv = new JasperViewer( jpt );      
           jv.setVisible( true );   
        }else if(this.verificaRelatorio() == 2){  
           JasperPrint jpt = JasperFillManager.fillReport("./Relatorio/RelacaoCliente.jasper", hash, con);  
            hash.put("ordernar_por", "codigo");  
           JasperViewer jv = new JasperViewer( jpt );      
           jv.setVisible( true );   
        if(this.verificaRelatorio() != 3){  
           hash.put("ordernar_por", null);  //nesse caso é legal fazer um tratamento no ireport para que ele não tente executar o select * from table order by null
        }  
        }else{  
            JOptionPane.showMessageDialog(null, "Selecione uma opção de ordenação!", "Aviso!", JOptionPane.WARNING_MESSAGE);  
        }
R

ta igual os parametros java/jasper agora?
posta o código ai

pra ver se o jasper ta recebendo e tratando o parametro, pega tenta ordenar por algo nada a ver… faz algo do tipo:

Connection con = new Conexao().conectar();  
        HashMap hash = new HashMap();  
        if(this.verificaRelatorio() == 1){  
           JasperPrint jpt = JasperFillManager.fillReport("./Relatorio/RelacaoCliente.jasper", hash, con);  
            hash.put("ordernar_nome", "rg");  
           JasperViewer jv = new JasperViewer( jpt );      
           jv.setVisible( true );   
        }else if(this.verificaRelatorio() == 2){  
           JasperPrint jpt = JasperFillManager.fillReport("./Relatorio/RelacaoCliente.jasper", hash, con);  
            hash.put("ordernar_nome", "rg");  
           JasperViewer jv = new JasperViewer( jpt );      
           jv.setVisible( true );   
        if(this.verificaRelatorio() != 3){  
           hash.put("ordernar_codigo", "rg");  
        }  
        }else{  
            JOptionPane.showMessageDialog(null, "Selecione uma opção de ordenação!", "Aviso!", JOptionPane.WARNING_MESSAGE);  
        }
magalli

Voltei tava no telefone com cliente…

magalli
redr4gon:
ta igual os parametros java/jasper agora? posta o código ai

pra ver se o jasper ta recebendo e tratando o parametro, pega tenta ordenar por algo nada a ver... faz algo do tipo:

Connection con = new Conexao().conectar();  
        HashMap hash = new HashMap();  
        if(this.verificaRelatorio() == 1){  
           JasperPrint jpt = JasperFillManager.fillReport("./Relatorio/RelacaoCliente.jasper", hash, con);  
            hash.put("ordernar_nome", "rg");  
           JasperViewer jv = new JasperViewer( jpt );      
           jv.setVisible( true );   
        }else if(this.verificaRelatorio() == 2){  
           JasperPrint jpt = JasperFillManager.fillReport("./Relatorio/RelacaoCliente.jasper", hash, con);  
            hash.put("ordernar_nome", "rg");  
           JasperViewer jv = new JasperViewer( jpt );      
           jv.setVisible( true );   
        if(this.verificaRelatorio() != 3){  
           hash.put("ordernar_codigo", "rg");  
        }  
        }else{  
            JOptionPane.showMessageDialog(null, "Selecione uma opção de ordenação!", "Aviso!", JOptionPane.WARNING_MESSAGE);  
        }

Os dois estão iguais, tentei ele continua ordenando por código, o problema esta no parametro ordenar_nome, será que falta expressão no parametro ??
pq não passei nenhuma expressão...

o código do Sql continua o mesmo...

SELECT
     cliente.`codigo` AS cliente_codigo,
     cliente.`nome` AS cliente_nome,
     cliente.`cpf` AS cliente_cpf,
     cliente.`rg` AS cliente_rg,
     cliente.`nomecid` AS cliente_nomecid,
     cliente.`telres` AS cliente_telres
FROM
     `cliente` cliente
ORDER BY
     $P{ordernar_nome}
magalli

robinsonbsilva:
Magali,

Tenta criar apenas um parametro para ordenação, ai de acordo com a opção selecionada, vc passar o criterio certo
ex:

$P{ordenar_por}

Na tela:

if(this.verificaRelatorio() == 1){  
           JasperPrint jpt = JasperFillManager.fillReport("./Relatorio/RelacaoCliente.jasper", hash, con);  
            hash.put("ordernar_por", "nome");  
           JasperViewer jv = new JasperViewer( jpt );      
           jv.setVisible( true );   
        }else if(this.verificaRelatorio() == 2){  
           JasperPrint jpt = JasperFillManager.fillReport("./Relatorio/RelacaoCliente.jasper", hash, con);  
            hash.put("ordernar_por", "codigo");  
           JasperViewer jv = new JasperViewer( jpt );      
           jv.setVisible( true );   
        if(this.verificaRelatorio() != 3){  
           hash.put("ordernar_por", null);  //nesse caso é legal fazer um tratamento no ireport para que ele não tente executar o select * from table order by null
        }  
        }else{  
            JOptionPane.showMessageDialog(null, "Selecione uma opção de ordenação!", "Aviso!", JOptionPane.WARNING_MESSAGE);  
        }

Nesse parametro devo passar alguma expressão por que no ireport não passei nenhuma talvez seje isso, o problema é que não sei qual expressão devo passar…

hash.put("ordernar_por", null);  //nesse caso é legal fazer um tratamento no ireport para que ele não tente executar o select * from table order by null

Eu devo montar um parametro no ireport ? assim $P{ordenar_null} ??

R

no sql ta ordenar_nome e no java ordernar_nome… vc corrigiu todos os parametros java/jasper? coloca algo mais generico tipo “orderby” como nome do parametro no java, como nome do parametro do ireport e como nome do parametro no sql

pra nao passar null, coloca um padrão… tipo “código”… assim toda vez q nao for especificado a ordenação, ela será por padrão, por código, entende?

magalli

redr4gon:
no sql ta ordenar_nome e no java ordernar_nome… vc corrigiu todos os parametros java/jasper? coloca algo mais generico tipo “orderby” como nome do parametro no java, como nome do parametro do ireport e como nome do parametro no sql

pra nao passar null, coloca um padrão… tipo “código”… assim toda vez q nao for especificado a ordenação, ela será por padrão, por código, entende?

o Sql ficou assim

SELECT
     cliente.`codigo` AS cliente_codigo,
     cliente.`nome` AS cliente_nome,
     cliente.`cpf` AS cliente_cpf,
     cliente.`rg` AS cliente_rg,
     cliente.`nomecid` AS cliente_nomecid,
     cliente.`telres` AS cliente_telres
FROM
     `cliente` cliente
ORDER BY
     $P{orderby}

o Java ficou assim

private void btVisualizarActionPerformed(java.awt.event.ActionEvent evt) { try{ Connection con = new Conexao().conectar(); HashMap hash = new HashMap(); if(this.verificaRelatorio() == 1){ JasperPrint jpt = JasperFillManager.fillReport("./Relatorio/RelacaoCliente.jasper", hash, con); hash.put("orderby", "nome"); JasperViewer jv = new JasperViewer( jpt ); jv.setVisible( true ); }else if(this.verificaRelatorio() == 2){ JasperPrint jpt = JasperFillManager.fillReport("./Relatorio/RelacaoCliente.jasper", hash, con); hash.put("orderby", "codigo"); JasperViewer jv = new JasperViewer( jpt ); jv.setVisible( true ); if(this.verificaRelatorio() != 3){ hash.put("orderby", "codigonull"); } }else{ JOptionPane.showMessageDialog(null, "Selecione uma opção de ordenação!", "Aviso!", JOptionPane.WARNING_MESSAGE); } } catch(Exception e){ e.printStackTrace(); } }

Nome do parâmetro
orderby

Tipo de classe de Parâmetro
java.lang.String

Usar como sugestão(Não esta habilitado)

Valor padrão da Expressão(Não coloquei nada)

e ele continua a ordenar somente por código e não por nome…

R

vc compilou o relatório depois de alterar o parametro? :stuck_out_tongue:

deu pra perceber q ele nao ta recebendo o parametro mesmo…

faça mais um teste: cria uma variavel no relatorio com nome “teste” e em qualquer lugar do relatorio, num lugar bem visivel, manda imprimir essa variavel na tela sem valor default.

no seu código java, logo abaixo de onde vc cria o hash, adiciona um parametro teste:

HashMap hash = new HashMap(); 
hash.put("teste","TESTE DE PARAMETRO");

veja se aparece na tela… se aparecer, entao o problema está na forma que o java está mandando o parametro pro jasper… tem outros meios de gerar o relatorio dai podemos tentar outros meios… se NAO aparecer na tela, então seu relatorio nao ta recebendo parametros… dai são outros quinhentos e vc sabe que é la que vc vai tratar

magalli

redr4gon:
vc compilou o relatório depois de alterar o parametro? :stuck_out_tongue:

deu pra perceber q ele nao ta recebendo o parametro mesmo…

faça mais um teste: cria uma variavel no relatorio com nome “teste” e em qualquer lugar do relatorio, num lugar bem visivel, manda imprimir essa variavel na tela sem valor default.

no seu código java, logo abaixo de onde vc cria o hash, adiciona um parametro teste:

HashMap hash = new HashMap(); 
hash.put("teste","TESTE DE PARAMETRO");

veja se aparece na tela… se aparecer, entao o problema está na forma que o java está mandando o parametro pro jasper… tem outros meios de gerar o relatorio dai podemos tentar outros meios… se NAO aparecer na tela, então seu relatorio nao ta recebendo parametros… dai são outros quinhentos e vc sabe que é la que vc vai tratar

rsrsrs…compilei. Eu passei o parametro dentro do java hash.put("teste","TESTE DE PARAMETRO"); e no ireport fui em Campo de texto e setei no relatorio apareceu normal este campo no relatorio…

R

era pra funcionar… não estou entendendo o q pode ser… só analisando mesmo

mas pra quebrar seu galho, só pra funcionar seu relatório, voce pode fazer da seguinte forma:

if ( blablabla = 1) {
                String ordenarPorNome = "SELECT  cliente.`codigo` AS cliente_codigo,  cliente.`nome` AS cliente_nome,  cliente.`cpf` AS cliente_cpf,  cliente.`rg` AS cliente_rg,  cliente.`nomecid` AS cliente_nomecid,  cliente.`telres` AS cliente_telres  FROM  `cliente` cliente  ORDER BY  nome"
} else if... 
// faz seus IF e pra cada um deles coloca um SQL diferente dependendo da ordenação... voce pode criar um string SQL unico tambem e nos IFs, somente alterar o orderby deles

                Connection con = new Conexao().conectar();
                con.executeSQL( sql );  
                JRResultSetDataSource jr = new JRResultSetDataSource(con.rs);   // o resultset da sua conexão
                JasperPrint jp = JasperFillManager.fillReport("./Relatorio/RelacaoCliente.jasper", new HashMap(), jr);  
                JasperViewer.viewReport(jp, false);
magalli
redr4gon:
era pra funcionar... não estou entendendo o q pode ser... só analisando mesmo

mas pra quebrar seu galho, só pra funcionar seu relatório, voce pode fazer da seguinte forma:

if ( blablabla = 1) {
                String ordenarPorNome = "SELECT  cliente.`codigo` AS cliente_codigo,  cliente.`nome` AS cliente_nome,  cliente.`cpf` AS cliente_cpf,  cliente.`rg` AS cliente_rg,  cliente.`nomecid` AS cliente_nomecid,  cliente.`telres` AS cliente_telres  FROM  `cliente` cliente  ORDER BY  nome"
} else if... 
// faz seus IF e pra cada um deles coloca um SQL diferente dependendo da ordenação... voce pode criar um string SQL unico tambem e nos IFs, somente alterar o orderby deles

                Connection con = new Conexao().conectar();
                con.executeSQL( sql );  
                JRResultSetDataSource jr = new JRResultSetDataSource(con.rs);   // o resultset da sua conexão
                JasperPrint jp = JasperFillManager.fillReport("./Relatorio/RelacaoCliente.jasper", new HashMap(), jr);  
                JasperViewer.viewReport(jp, false);

Eu vo tentar faze dessa forma se funcionar tá otimo ai não preciso montar um relatorio para cada coisa...
eu peguei a forma que eu montei o parametro e tirei um print dá uma olhada..
[img]http://imageshack.us/scaled/landing/198/parametroireport.png[/img]

R

entao… era pra funcionar… sei la… só fuçando mesmo

mas faz desse jeito que falei q seu código vai ficar até menor viu… :slight_smile:

magalli

redr4gon:
entao… era pra funcionar… sei la… só fuçando mesmo

mas faz desse jeito que falei q seu código vai ficar até menor viu… :)

Então eu vo monta agora para ver se compila certinho, sem palavras vc salvo minha semana rsrs…=)

R

magalli:
redr4gon:
entao… era pra funcionar… sei la… só fuçando mesmo

mas faz desse jeito que falei q seu código vai ficar até menor viu… :)

Então eu vo monta agora para ver se compila certinho, sem palavras vc salvo minha semana rsrs…=)

ainda nao… vamos ver se funfa ai primeiro auhauhauha ;p

magalli

redr4gon:
magalli:
redr4gon:
entao… era pra funcionar… sei la… só fuçando mesmo

mas faz desse jeito que falei q seu código vai ficar até menor viu… :)

Então eu vo monta agora para ver se compila certinho, sem palavras vc salvo minha semana rsrs…=)

ainda nao… vamos ver se funfa ai primeiro auhauhauha ;p

rsrs…tá dificil faze isso funciona, eu montei o código e deu esse resultado

if(this.verificaRelatorio() == 1){
            String ordenarPorNome = "SELECT cliente.`codigo` AS cliente_codigo, cliente.`nome` AS cliente_nome,"
                    + "cliente.`cpf` AS cliente_cpf,  cliente.`rg` AS cliente_rg,  cliente.`nomecid` AS cliente_nomecid,"
                    + "cliente.`telres` AS cliente_telres FROM `cliente` cliente ORDER BY nome";
            Connection con = new Conexao().conectar();
            con.executeSQL(sql); [b](cannot find simbol)[/b]
            JRResultSetDataSource jr = new JRResultSetDataSource(con.rs);  (cannot find simbol)  // o resultset da sua conexão
            JasperPrint jp = JasperFillManager.fillReport("./Relatorio/RelacaoCliente.jasper", new HashMap(), jr);  
            JasperViewer.viewReport(jp, false);
con.executeSQL(sql); [b](cannot find simbol)[/b]
        JRResultSetDataSource jr = new JRResultSetDataSource(con.rs);  [b](cannot find simbol)[/b]
R

é que o nome do sql é ordenarPorNome entao voce tem q colocar ali tb assim: con.executeSQL(ordenarPorNome);

magalli

redr4gon:
é que o nome do sql é ordenarPorNome entao voce tem q colocar ali tb assim: con.executeSQL(ordenarPorNome);

tá com mesmo problema de cannot find simbol, eu vo revisar o codigo td certinho ai vo posta aqui, agora vo precisa sai pra visita cliente mais tarde eu volto…

R

isso… da uma olhada… pode ser uma classe/variavel que nao ta encontrando, um import, uma biblioteca algo assim…

veja ai e se o erro persistir coloca a pilha de erro aqui =p

magalli

redr4gon:
isso… da uma olhada… pode ser uma classe/variavel que nao ta encontrando, um import, uma biblioteca algo assim…

veja ai e se o erro persistir coloca a pilha de erro aqui =p

Consegui nem te conto aonde tava o problema rsrs…uma unica linha de codigo tava causando td aquela confusão…

robinsonbsilva

depois fala que linha era essa!!

Abs.

magalli

robinsonbsilva:
depois fala que linha era essa!!

Abs.

Essa linha que tava causando todo aquele problema

ORDER BY
     $P!{orderby}

faltava somente o !

Consegui encontrar o erro por que vocês me apoariam o tempo inteiro obrigado de coração salvaram minha semana rsrs… =)

robinsonbsilva

:slight_smile:

R

que bom que deu certo… precisar estamos ai… =)

R

.

magalli

Brigada mesmo vc acompanho o tópico do começo ao fim, nem sei como agradecer salvo minha semana rsrs…=)

Criado 30 de janeiro de 2013
Ultima resposta 31 de jan. de 2013
Respostas 36
Participantes 3