Pessoal, estou com uma dificuldade que é a seguinte:
Quero que, quando o usuário não informar determinado campo no filtro, não coloca esse campo na clausula where no SQL que está dentro do iReport.
Mas não quero controlar isso na classe Java, quero tratar no iReport, justamente pra conseguir implementar uma classe padrão não precisando mexer mais nela.
Entenderam minha dúvida?
Resumindo: quero tratar quais campos irão na minha clausula where dentro do iReport, tenho sempre todos os filtros, mas alguns vazios e outros não, na clausula where deve ter somente os não vazios.
Tem como?
WHERE
(MINHA_VARIAVEL is not null AND valor_campo = MINHA_VARIAVEL.intValue())
OR ou AND
(MINHA_OUTRA_VARIAVEL is not null AND valor_campo2 = MINHA_OUTRA_VARIAVEL.intValue())
OR ou AND
…
[quote=fabiocsilva]WHERE
(MINHA_VARIAVEL is not null AND valor_campo = MINHA_VARIAVEL.intValue())
OR ou AND
(MINHA_OUTRA_VARIAVEL is not null AND valor_campo2 = MINHA_OUTRA_VARIAVEL.intValue())
OR ou AND
…[/quote]
Acontece que dessa forma, a variável sempre será levada em consideração, ou com valor em branco ou preenchido.
Eu queria que, caso ela estivesse em branco, não fosse considerada na clausula where, entendeu?
Desde já agradeço.
Bom dia a todos.
O que acontece que voce escreve uma cláusula SQL desta forma:
Select * From Tabela Where 1 = 1;
Esta condição sempre será verdadeira, pois um sempre será igual a um, mas qual é o propósito disto, senão vejamos:
String sqltext = "Select * From Tabela Where 1 = 1 ";
if (campo_nome.getText() != null) sqltext += " And Nome ilike '" + campo_nome.getText() + "%'";
if (campo_rg.getText() != null) sqltext += " And Rg = '" + campo_rg.getText() + "'";
if (campo_cpf.getText() != null) sqltext += " And Rg = '" + campo_cpf.getText() + "'";
........
Repare que o próposito aqui já fez diferença, ou seja, se ao menos um dos campos for diferente de nulo, a expressão seguinte “And …” será acrescida a variável sqltext, do qual voce irá passar ao seu IReport, caso todos os campos seja nulo, somente a variável sqltext terá a condição “where 1 = 1” que será satisfeita e toda a tabela ser carregada.
Cappichi
Entendi. Se sua variável for do tipo String e você colocar null como valor padrão aquela lógica funcionaria:
MINHA_VARIAVEL is not null AND valor_campo = MINHA_VARIAVEL
Outra solução é usar um CollectionDataSource, que permitiria que você fizesse toda lógica fora do iReport.
[quote=fabiocsilva]Entendi. Se sua variável for do tipo String e você colocar null como valor padrão aquela lógica funcionaria:
MINHA_VARIAVEL is not null AND valor_campo = MINHA_VARIAVEL
Outra solução é usar um CollectionDataSource, que permitiria que você fizesse toda lógica fora do iReport.[/quote]
É, seria outra forma de se fazer.
Mas decidimos aqui obrigar o usuário a preencher todos os campos do formulário, dessa forma não teriamos esse problema.
Mas obrigado pela ajuda.