Dois filtros funcionando em um relatório em JAVA

8 respostas
programaçãojava
F

Pessoal estou fazendo um trabalho para a faculdade cheguei na parte dos relatórios e criei o relatório pela paleta com o campo NOME e CPF e um botão de IMPRIMIR que chama o relatório criando no IREPORT

Bom contudo da forma que sei apenas sei trabalhar com um filtro por relatório e eu gostaria de saber como tratar para pegar dois filtros ao mesmo tempo dentro de um relatório abaixo segue os códigos que usei até o momento.

CLASSE JAVA CRIANDO O PARAMETRO

public void rela_clientes(String nome) {

try {
        conn.conexao();
        conn.executaSql("select * from clientes where nome like '%"+nome+"%'");
        JRResultSetDataSource relatResul = new JRResultSetDataSource(conn.rs);
        JasperPrint jpPrint = JasperFillManager.fillReport("src/rela_ireport/clientes.jasper", new HashMap(), relatResul);
        JasperViewer jv = new JasperViewer(jpPrint, false);
        jv.setVisible(true);
        jv.toFront();
    } catch (JRException ex) {
        Logger.getLogger(rela_clientes_nome.class.getName()).log(Level.SEVERE, null, ex);
    }
}

BOTAO IMPRIMIR CHAMANDO O PARAMETRO CRIADO

private void jButtonImprimirActionPerformed(java.awt.event.ActionEvent evt) {                                                
    rela_clientes_nome relatorio = new rela_clientes_nome();
    relatorio.rela_clientes(jTextFieldNome.getText()); 
}

Quero saber como faço para colocar o CPF e NOME para trabalhar juntos

Obrigado

8 Respostas

M

Ficou meio confuso o que você precisa, consegue ser mais claro?

F

Quero que em uma tela de filtros para um relatorio o usuario possa inserir dados em qualquer um dos campos
e fazer a busca no banco retornando os dados

Ou seja a tela vai possui os filtros
NOME
CPF
Se o usuario inserir o nome vai puchar os dados do banco ou se ele inserir pelo CPF vai sair os dados também

Ou seja os dois funcionar juntos

M

Se você colocar uns RadioButton pra selecionar se quer buscar pelo nome ou cpf não resolve? que ai vc coloca um if e faz dois selects, ou você coloca um ‘or’ na busca e pede pra ele procurar nos 2 dois campos;

conn.executaSql(“select * from clientes where nome like '%”+nome+"%’" or cpf like “puchando do mesmo campos”);

fiz um teste aqui ± e funcionou;

ele acaba tentando buscar o cpf tanto pelo nome tanto pelo cpf ou ele busca o nome tanto pelo nome quanto pelo cpf, se achar em algum dos dois ele acha o dado

F

boa vou testar dessa forma também valeu Marcelo

M

Ok, se funcionar avisa aqui ^^

F

Marcelo entendi oque você disse e funcionou mesmo minha dificuldade é a seguinte

Eu criei o seguinte metodo em uma classe java

public class rela_cliente {
conexaoBD conn = new conexaoBD();

public void rela_clientes_nome(String nome) {

    try {
        conn.conexao();
        conn.executaSql("select * from clientes where nome like '%"+nome+"%'");
        JRResultSetDataSource relatResul = new JRResultSetDataSource(conn.rs);
        JasperPrint jpPrint = JasperFillManager.fillReport("src/rela_ireport/clientes.jasper", new HashMap(), relatResul);
        JasperViewer jv = new JasperViewer(jpPrint, false);
        jv.setVisible(true);
        jv.toFront();
    } catch (JRException ex) {
        Logger.getLogger(rela_cliente.class.getName()).log(Level.SEVERE, null, ex);
    }
}


public void rela_clientes_cpf(String cpf) {

    try {
        conn.conexao();
        conn.executaSql("select * from clientes where cpf like '%"+cpf+"%'");
        JRResultSetDataSource relatResul = new JRResultSetDataSource(conn.rs);
        JasperPrint jpPrint = JasperFillManager.fillReport("src/rela_ireport/clientes.jasper", new HashMap(), relatResul);
        JasperViewer jv = new JasperViewer(jpPrint, false);
        jv.setVisible(true);
        jv.toFront();
    } catch (JRException ex) {
        Logger.getLogger(rela_cliente.class.getName()).log(Level.SEVERE, null, ex);
    }
}

}

E uma tela com dois campos um CPF e ou NOME assim sendo a pessoa pode inserir ou o nome e clicar em imprimir e funciona blz ou a pessoa insere o CPF e funciona também.

Contudo como mostra o metodo que coloquei no botão imprimir

private void jButtonImprimirActionPerformed(java.awt.event.ActionEvent evt) {                                                
    // TODO add your handling code here:
    rela_cliente relatorio = new rela_cliente();
    
    relatorio.rela_clientes_nome(jTextFieldNome.getText());
    
    relatorio.rela_clientes_cpf(jTextField1.getText());
    
}

Ao clicar no imprimir ele abre duas folhas do relatório e eu queria abrir apenas uma você sabe me falar como que faço ou alguém mais?

T

Ola,

Coloca um if para escolher qual relatorio deve ser exibido.

if(!jTextFieldNome.getText().isEmpty()){
 // Campo nome foi preenchido. Mostra o relatorio por nome.
 relatorio.rela_clientes_nome(jTextFieldNome.getText());
} else if(!jTextField1.getText().isEmpty()){
//Campo CPF preenchido.
relatorio.rela_clientes_cpf(jTextField1.getText());

} else {
// Nenhum campo foi preenchido. Aí vc ve o que fazer.

}

Ate+.

M

Tanto a solução do tiago ou você pode também colocar dois botões, ou fazer uma tabela que apareça a pesquisa, e ele imprima através do que foi selecionado na tabela, se quiser te passo como faz por uma tabela

Criado 26 de novembro de 2017
Ultima resposta 4 de jan. de 2018
Respostas 8
Participantes 3