Filtra em ireport somente os dados digitados

5 respostas
marcosarantesj

sei como fazer filtros em iReport, mas o meu problema é que preciso saber como fazer um filtro que o usuário pode digitar os códigos que ele quiser e aparecer somente os códigos que o usuário digitou. EX: Em um cadastro de clientes, quero que mostre somente os clientes com os códigos 1,4,5,7
No relatório tem que aparecer somentes os códigos 1,4,5,7 ou outros códigos que foram escolhidos pelo usuário. Eu sei que se eu fizer esse SQL
SELECT * FROM clientes WHERE clientes.codigo IN(1,2,5)
Ele retorna os 3 códigos no PostgreSQL. O problema é que isso no iReport eu não consegui com nenhum parâmetro lá. Se alguém souber como faz.
Esse é o código que uso para gerar o relatório.

try {

                DB banco = new DB();
                banco.connect();
                Query query1=new Query(banco.conn);
                query1.open("SELECT *FROM clientes");
                query1.next();
                String codigo;
                HashMap parametros = new HashMap();
            

                 parametros.put("pCodigo",1);

                JasperPrint jp = JasperFillManager.fillReport("C:/Sistema/clientes.jasper", parametros, banco.conn);
                JasperViewer jrv = new JasperViewer(jp, false);
                //Maximiza o relatório
                jrv.setExtendedState(MAXIMIZED_BOTH);
                jrv.setTitle("Teste");
                jrv.setVisible(true);
                jrv.setFitPageZoomRatio();
                banco.disconnect();
               

        } catch (Exception e) {
            e.printStackTrace();

        }

Ele só aceita digitar um código queria que fossem vários códigos de acordo com os código digitados pelo usuário.

5 Respostas

mrrbigu

Penso que a melhor soluçāo é criar o filtro em sua aplicaçāo e passar a sql ja pronta como parametro para o relatorio, nāo que nāo funcione de outra forma, mas para voce poder criar um filtro padronizado para toda a sua aplicaçāo.

marcosarantesj

Correção: O código que postei tem um erro porque a consulta SQL não é feita. Tem como eu fazer a consulta sql sem precisar colocar o parâmetro no ireport?
Essa linha aqui parametros.put(“pCodigo”,1); eu coloquei o código 1 somente, mas tinha que ter vários. Fazer o sql direto eu não sei ainda. Se souber posta um exemplo. Eu acho que é com DataSet vazio
try {

DB banco = new DB();
            banco.connect();
            Query query1=new Query(banco.conn);
          
            HashMap parametros = new HashMap();
        

             parametros.put("pCodigo",1);

            JasperPrint jp = JasperFillManager.fillReport("C:/Sistema/clientes.jasper", parametros, banco.conn);
            JasperViewer jrv = new JasperViewer(jp, false);
            //Maximiza o relatório
            jrv.setExtendedState(MAXIMIZED_BOTH);
            jrv.setTitle("Teste");
            jrv.setVisible(true);
            jrv.setFitPageZoomRatio();
            banco.disconnect();
           

    } catch (Exception e) {
        e.printStackTrace();

    }
marcosarantesj

Consegui passar o sql como parâmetro. Criei o parâmetro pSQL e coloquei no Report Query assim $P!{pSQL}
A exclamação é para mostrar que é um parâmetro SQL. Aí no relatório faço

try {

                DB banco = new DB();
                banco.connect();
                Query query1=new Query(banco.conn);
              
                HashMap parametros = new HashMap();
            

                 parametros.put("pSQL","SELECT * FROM clientes WHERE codigo IN("+txtCodigo.getText()+")");

                JasperPrint jp = JasperFillManager.fillReport("C:/Sistema/clientes.jasper", parametros, banco.conn);
                JasperViewer jrv = new JasperViewer(jp, false);
                //Maximiza o relatório
                jrv.setExtendedState(MAXIMIZED_BOTH);
                jrv.setTitle("Teste");
                jrv.setVisible(true);
                jrv.setFitPageZoomRatio();
                banco.disconnect();
               

        } catch (Exception e) {
            e.printStackTrace();

        }
mrrbigu

Isso aí, agora procure um dos vários exemplos de como criar consultas dinâmicas aqui e no google e crie seus filtros, se você usa hibernate você pode exacutar a consulta e passar uma coleção de objetos com o resultado direto para o ireport.

marcosarantesj

OK. Eu não uso hibernate, criei com conexão jdbc no banco de dados PostgreSQL.

Criado 3 de dezembro de 2010
Ultima resposta 3 de dez. de 2010
Respostas 5
Participantes 2