Não consigo pegar os parâmetros no iReport

Olá pessoal,
estou com problemas para pegar os parâmetros no iReport. Eu sei que consigo chegar até eles, pois já testei a visualização… mas qndo chamo o relatório ele imprime as informações como se eu tivesse passado o String[] todo com 0 parâmetros… vou colocar o código de como estou pegando as informações:

[code]package estudo;

import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.JasperRunManager;
import net.sf.jasperreports.engine.design.JRJdtCompiler;
import net.sf.jasperreports.engine.design.JasperDesign;

public class geraRelatorio extends HttpServlet{

private static Connection getConnection( ) throws ClassNotFoundException, SQLException{
    //faço a conexão com o banco.
    }


public void doPost (HttpServletRequest request, HttpServletResponse response)
        throws IOException, ServletException {
    doGet(request, response);
}


public void doGet(HttpServletRequest request, HttpServletResponse response)  
 throws IOException, ServletException  {  
       
     String[] vlParametro = request.getParameterValues("clientes");  
     
              
   // obtém a conexão com o banco de dados  
     Connection con = null; 
     try {  
         Class.forName("oracle.jdbc.driver.OracleDriver");  
         con = getConnection(); 
     } catch (Exception e) {  
         System.out.println("Erro ao obter conexao via DriverManager: " + e.getMessage());  
     }  
       
     // gera o relatório  
     ServletContext context = getServletContext();
    
    
     
     
     byte[] bytes = null;  
     try {  
           
           
         // carrega os arquivos jasper  

// JasperReport compiledReport = (JasperReport)JRLoader.loadObject(
// context.getRealPath("\web\relatorioNomeAlunos.jasper"));

         java.io.File jrxmlFile = new java.io.File("F:\Documents and Settings\Samara\Meus documentos\CódigoNTI\TestePRPG\web\TesteOra.jrxml");
         JasperDesign design = net.sf.jasperreports.engine.xml.JRXmlLoader.load(jrxmlFile);
         JRJdtCompiler comp = new JRJdtCompiler();
	     JasperReport compiledReport = comp.compileReport(design);
         
                       
         // parâmetros, se houverem  
         Map parametros = new HashMap();  
         for(int i=0; i < vlParametro.length; i++){
            parametros.put("nr_op", vlParametro[i]); 
         }
         // direciona a saída do relatório para um stream  
         bytes = JasperRunManager.runReportToPdf(compiledReport,parametros,con);  
     } catch (JRException e) {  
         e.printStackTrace();  
     }  
     if (bytes != null && bytes.length > 0) {  
         // envia o relatório em formato PDF para o browser  
         response.setContentType("application/pdf");  
           
         response.setContentLength(bytes.length);  
         ServletOutputStream ouputStream = response.getOutputStream();  
         ouputStream.write(bytes, 0, bytes.length);  
         ouputStream.flush();  
         ouputStream.close();  
     }

}
}
[/code]

E minha query no iReport tah assim:

[code]SELECT DISTINCT
A.“ALU_MATRICULA”,
P.“PES_NOME”,
P.“PES_DT_NASCIMENTO”,
O.“OSA_DESCRICAO”
FROM
“PRPG”.“ALUNOS” A,
“PRPG”.“PESSOAS” P,
“PRPG”.“OBSERVACOES_SITUACOES_ALUNOS” O
WHERE
A.ALU_PES_COD_PESSOA = P.PES_COD_PESSOA
AND A.ALU_OBS_SITUACAO_ALUNO = O.OSA_COD_OBSERVACAO
AND A.ALU_ECU_NIV_PRG_COD_PROGRAMA = $P{programa}
AND A.ALU_OBS_SITUACAO_ALUNO = $P{situacao}

ORDER BY
P.PES_NOME ASC[/code]

Será que alguém pode me ajudar? Ah… esses parametros no banco estão declarados como number.

Se eu compreendi bem o seu codigo, os parametros que vc precisa na query são :
$P{situacao}
$P{programa}

e no seu HashMap(), vc está passando “nr_op”.

Os parametros que vc vai passar atraves do HashMap() tem que ter o mesmo nome dos parametros que vc vez no relatorio do iReport. tipo :

//Parametros do relatorio
Map parametros = new HashMap();
for(int i=0; i < vlParametro.length; i++)
{   
    parametros.put("situacao", vlParametro[i]);
    parametros.put("programa", vlParametro[i]);
}

Pelo menos é assim que eu faço e funciona…

qquer coisa faz outro post ai…

[]'s Luis Cesar

Ow Luis… tentei mudar isso e agora não apareceu mais nada… nem se quer gera o pdf em branco… :cry:

Verifique os nomes dos parametro no iReport. Veja se estão batendo e também a questão do caminho… (só uma dica, as vezes passou algo despercebido).

[]'s

Teoricamente acho que o que deve tah errado é que estou passando como parametro para a consulta uma variavel do tipo String, mas ela não deveria ser do tipo number não? Tipo… eu não deveria passar ela pra Long não? Tentei passar mas diz q eh invalido… =/

Se o campo no seu banco for number, faça o seguinte :

no seu parametro do iReport coloque no campo “Tipo de Classe do Parametro” : java.lang.Integer
e no campo “Valor Padrão da Expressão”: new Integer(1)

tenta isso ai…

[]'s

O tipo do seu parametro no relatório tem que bater com o tipo do seu parametro na sua classe java,se for necessario
faça a conversão na classe mesmo…

String idade = jTextFieldIdade.getText(); HashMap parameters = new HashMap(); parameters.put("idadep",Integer.parseInt(idade)); //idadep é o nome do parametro que criei no relatório

E como o luiscesarinfo falou no relatorio você deve configurar o tipo como inteiro e também colocar um valor padrão para expressão:
new Integerr(1) …
select *
from tabela
where idade = $P{idadep}

Valeu pessoal, deu certo sim. Agora eu forcei ele receber os dados… só pra ver se gerava o relatório, e gerou bonitinho -

Aí agora tou passando por outro probleminha… não consigo pegar os dados certos fazendo assim:

Map parametros = new HashMap();  
for(int i=0; i < vlParametro.length; i++)  
 {     
      parametros.put("programa", vlParametro[i]);
      parametros.put("situacao", vlParametro[i]);
            
  }  

Sempre exibe dados errados…será que tem problema usar esse for? =/