Relatorio Ireport

3 respostas
P

Olá Pessoal, to quebrando a cabeça aqui com uma duvida bem besta :(

tenho um relatorio no ireport, e passo como parametro um cpf, porém quando a pessoa nao digitar o parametro, gostaria que trouxesse todos os registros, isto é, um select sem where.

Como posso fazer isso?

private void imprimeRelatorio(String cpf) throws JRException  {  
   
            try{  
            Connection con = new Conexao().getConnection();  
  
            String jasperFile = "src/Relatorios/Paciente.Jasper";      
            HashMap parametro = new HashMap();          
  
            parametro.put("cpf", cpf);            
        
            JasperPrint print = JasperFillManager.fillReport(jasperFile, parametro,con);    
            JasperViewer viewer = new JasperViewer(print , false);    
            viewer.setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);  
  
             if (print .getPages().size() != 0) {  
                         viewer.setExtendedState(JasperViewer.MAXIMIZED_VERT);  
                         viewer.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);  
                         viewer.setVisible(true);  
             }  
            }catch(bin.Exception erro){  
                erro.printStackTrace();  
            }  
  
    }

Botão gerar relatorio:

imprimeRelatorio(cpf);

Query no ireport

SELECT
     paciente.`cpf` AS cpf,
     paciente.`nome` AS nome,
     paciente.`sobrenome` AS sobrenome,
     paciente.`sexo` AS sexo,
     paciente.`rg` AS rg,
     paciente.`nascimento` AS nascimento,
     paciente.`convenio` AS convenio,
     paciente.`carteirinha` AS carteirinha,
     paciente.`logradouro` AS logradouro,
     paciente.`n` AS n,
     paciente.`complemento` AS complemento,
     paciente.`bairro` AS bairro,
     paciente.`cidade` AS cidade,
     paciente.`uf` AS uf,
     paciente.`cep` AS cep,
     paciente.`telefone` AS telefone,
     paciente.`celular` AS celular,
     paciente.`comercial` AS comercial,
     paciente.`email` AS email
FROM
     `paciente` paciente
WHERE CPF = $P{cpf}

3 Respostas

marcospaulo.suporte

use o ‘like’ no Sql

FROM  
     `paciente` paciente  
WHERE CPF like $P{cpf}

like pode ser usado de várias maneiras

‘A_Z’: Todas as cadeias que começam por ‘A’, outro caráter, e terminam em ‘Z’. Por exemplo, ‘ABZ’ e ‘A2Z’ iriam ambas satisfazer a condição, enquanto ‘AKKZ’ não iria (porque existem dois caracteres entre A e Z em vez de um).
‘ABC%’: Todas as cadeias que começam por ‘ABC’. Por exemplo, ‘ABCD’ e ‘ABCABC’ iriam satisfazer a condição.
‘%XYZ’: Todas as cadeias que terminam em ‘XYZ’. Por exemplo, ‘WXYZ’ e ‘ZZXYZ’ iriam satisfazer a condição.
‘%AN%’: Todas as cadeias que contêm o padrão ‘AN’ em qualquer local. Por exemplo, ‘LOS ANGELES’ e ‘SAN FRANCISCO’ iriam satisfazer a condição.
‘[AX]%’: Todas as cadeias que começam com ‘A’ OU ‘X’

QUANDO não digitar o cpf vai ficar com o simbolo ’ % ’ no inicio, ou seja, vai trazer tudo.

P

Olá Marcos, obrigada pela ajuda, mas não deu certo. Quando nao preencho o parametro, ocorre a mensagem que não há paginas para exibir.

drsmachado

Bom, eu não gosto de colocar a consulta no relatório. Lembra do MVC? Então, relatório pertence à camada view e, portanto, não pode acessar diretamente a model.
Eu sugeriria mudar para um JRBeanCollectionDataSource. Por que não dá uma olhada?
Basicamente, você transfere a responsabilidade (e o controle) das consultas ao java e só envia uma coleção com os dados para que o relatório seja montado (como é o correto).

Criado 22 de novembro de 2013
Ultima resposta 22 de nov. de 2013
Respostas 3
Participantes 3