Ir para conteúdo
Fórum Script Brasil
  • 0

Problema Com O Jasper


Guest - Rodolfo -

Pergunta

Guest - Rodolfo -

alguém sabe como passar como criar um sql dinamico em jasperreport pois meu relatorio esta pronto e funcionando, agora eu quero fazer um relatorio onde envolve data, não sei como posso passar do java para o jasper para que ele execute no Query a data que o usuario definiu... quem souber por favor ajudem... obrigado

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

Olá Rodolfo!

Pelo que entendi é o mesmo relatório que as vezes pode ter a data como filtro e as vezes não. Certo?

Eu visualizo duas formas de você fazer isso, veja só:

1) Eu tenho um relatório em que além de determinados parâmetros que SEMPRE são passados, tenho a data de vencimento inicial e final que PODE OU NÃO ser informada. Para contornar esse problema fiz da seguinte forma (estou colocando parte do meu select para que entenda):

select ....
 FROM tabela
 where loja = $P{parLoja}
    and data >= $P{parDataInicial}
    and data <= $P{parDataFinal}
    and ..... 
    /* filtro pelos vencimentos quando eles tiverem sido informados */
    and (case $P{parVInicial} when "N" then true else (vencto >= $P{parVenctoInicial}) end)
    and (case $P{parVFinal} when "N" then true else (vencto <= $P{parVenctoFinal}) end)
    and ...
order by ...
Não sei se entendeu, mas para cada data (parVenctoInicial e parVenctoFinal) eu criei um parâmetro extra (parVInicial e parVFinal) que é na verdade um flag para saber se deve ser feito o filtro pela data. Então se meu parâmetro parVInicial estiver como "N" ("Não") eu coloco TRUE e ele passa qualquer. filtro, caso contrário eu faço o filtro com o campo vencto e o parVenctoInicial. Bem, foi uma forma que encontrei de contornar o problema. 2) Outra forma seria realmente passar um SQL dinâmico (que no seu caso, como no meu, se for só o filtro de uma data que muda eu acho que nem vale a pena, mas ai você que decide). Eu nunca fiz isso, mas descobri algo que pode te ajudar. Estamos acostumados a passar os parâmetros assim: $P{parParametro} Isso faz com que o conteúdo de parParametro substitua a tag $P{parParametro}. Porém existe outra forma de passar esse parâmetro que é menos usada. A forma seria: $P!{parParametro} Para você perceber a diferença imagine que parParametro seja do tipo String e que parParametro = "10"; No relatório eu coloco:
select * from tabela where campo = $P{parParametro}
Isso montaria algo como:
select * from tabela where campo  = "10"
Mas se eu fizer:
select * from tabela where campo = $P!{parParametro}
Isso montaria algo como:
select * from tabela where campo = 10
Digamos que usando $P!{parametro} você estará "macrosubstituindo" o conteúdo no SQL. Tudo isso para te dizer que eu não testei ainda, mas eu tenho quase absoluta certeza de que se você declarar um parâmetro do tipo String e passar para ele algo assim:
if (suaCondicao)
   parameters.put("parSQL", "select * from tabela");
else
   parameters.put("parSQL","select * from tabela where campo = 1");
No relatório você pode simplesmente colocar assim no campo destinado a query:
$P!{parSQL}

E tudo deve funcionar exatamente como você deseja, com um SQL "dinâmico".

Espero ter ajudado! Boa sorte! :lol:

Renata

Link para o comentário
Compartilhar em outros sites

  • 0

Obrigada iSoron! :D

Agora estou com um problema parecido, mas não consigo solucionar! :blink:

E quando o SQL que preciso passar dinâmicamente contém outros parâmetros que eu não posso substituir antes e passar já com os valores corretos?

Por ex, e se o SQL que eu tenho que passar é uma string assim "select * from tabela where codigo = $P{parCodigo}" ?

Como faço para que na hora de executar o relatório o iReports compreenda que ainda existe um parâmetro para ser substituído e faça isso antes de executar o SQL?!

Veja mais detalhes no meu post: http://www.guj.com.br/posts/list/50444.java#265035

Ngn. consegue me dar alguma idéia! SOCORRO!!! :huh:

Grata,

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...