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);
}
}
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
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
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?
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.
}
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