Prezados,
Montei um relatório tudo certo, criei dois parâmetros, inseri a consulta SQL: Select DATA,QUANTIDADE,VALOR_TOTAL,DESCONTO,ACRESCIMO,DESCRICAO, VALOR_UNITARIO
from venda, itemvenda, venda_itensvendidos
where VENDA_ID = VENDA_ID_OID AND VENDA_ID = ITEMVENDA_ID;
Ele me retorna os valores, coloquei os fields tudo certo. Quando eu executo o relatório sem usar a conexão, está tudo ok, aparece os campos texto e os campos null. Quando executo com a coneção, ele me retorna um relatório em branco, não sei porque? Alguém sabe me dizer por onde começar a verificar, pois está tudo certo.
Quanto aos campos está tudo correto. Não sei porque está acontecendo isso. Quando executo sem a conecção com a banco, ele gera o relatório sem problemas, mais quando usa o banco dá pau, sai em branco.
Sim, está tudo ok com a conecção. Já fiz o teste e tudo. Não sei se o Ireport supurta uma consulta SQL fazendo relacionamento entre três tabelas, acho que sim, pois ele ta me retornando os campos dos fields.
Isso não é o problema nao… pq tenho relatórios com consultas em varias tabelas numa boa… relatorios q chega a demorar bastante tempo :oops:… e ele apresenta numa boa…
Faz o seguinte… TEM CERTEZA Q ESSE SQL ESTA RETORNANDO ALGO ?
Tenho sim cara pois quando eu coloco essa query ele me fornece embaixo os campos que ele buscou. O que acho estranho é que nem os campos estáticos estão saindo, que era pra sair independente do banco, e também não gera nenhuima exceção.
Estou invocando diretamente no ireport para depois chamá-lo na servlet. Faço primeiro no Ireport para testar, e depois monto a servlet. Quanto aos tamanhos dos fields está tudo ok.
Segue o Relatório montado e a Servlet que fiz. Montei um relatório só com campos estáticos e Parâmetros. Mais quando executo a Servlet o relatório vem em branco. Montei um com conexão, campos estáticos e fields mais continuava vindo em branco, mesmo eu executando do próprio Ireport.
Há outra coisa no Ireport em Opções e no ClassPath precisa setar alguma coisa? As variáveis de ambientes já configurei.
Vejam se isso é possível fazer isso, pois estou querendo trabalhar com Table model, nesse código que está abaixo:
@version
*/
public class Teste1 extends HttpServlet {
/** Processes requests for both HTTP GET and POST methods.
@param request servlet request
@param response servlet response /
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//obtém a conexão com o banco de dados
System.out.println(“1”);
/ Connection conn = null;
// Date data = new Date();
try{
Class.forName("com.mysql.jdbc.Driver");
conn = (Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/Dincash1", "root", "647226");
System.out.println("2");
}
catch (Exception e){
System.out.println(e.getMessage());
}
*/
// gera o relatório
//String path = getServletContext().getRealPath ("/relatorio") + "WEB-INF/src/jasper/ItemComDesconto.jasper";
ServletContext context = getServletContext();
byte [] bytes = null;
System.out.println("3");
try{
// TableModel model = new DefaultTableModel();
//JRTableModelDataSource ds = new JRTableModelDataSource(model);
//carrega os arquivos Jasper
String T = context.getRealPath("/WEB-INF/classes/report/Teste.jasper");
JasperReport relatorioJasper = (JasperReport)JRLoader.loadObject((T));
System.out.println("4");
// Quando tem parametros no relatório
Map parametros = new HashMap();
//parametros.put("pDataIni",data);
//parametros.put("pDataFim", data);
parametros.put("DATA", new Date());
parametros.put("QUANTIDADE", new Integer(10));
parametros.put("DESCRICAO", "Sapato");
parametros.put("VALOR_TOTAL", new Double (50));
parametros.put("DESCONTO", new Float (20));
parametros.put("ACRESCIMO", new Float (10));
parametros.put("VALOR_UNITARIO", new Double(2.3));
System.out.println("5");
// direciona a saída do relatório para um stream
// JasperPrint impressao = new JasperPrint();
//impressao = JasperFillManager.fillReport(relatorioJasper,parametros);
bytes = JasperRunManager.runReportToPdf (relatorioJasper, parametros);
System.out.println("6");
}catch (JRException e){
System.out.println(e.getMessage());
e.printStackTrace();
}
System.out.println("7");
if (bytes!= null && bytes.length>0){
// envia o relatorio em formato PDF para o browser
System.out.println("8");
response.setContentType("application/pdf");
response.setContentLength(bytes.length);
ServletOutputStream ouputStream = response.getOutputStream();
ouputStream.write(bytes, 0, bytes.length);
ouputStream.flush();
ouputStream.close();
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/** Returns a short description of the servlet.
*/
public String getServletInfo() {
return "Short description";
}
// </editor-fold>
Como disse anteriormente eu peguei seu relatorio, coloquei meus sem mexer em nada usei minha conexão e montei um sql a minha nescessidade e rodou PERFEITAMENTE.
O problema deve ser Seu SQL q não está retornando dados pq se vc roda inclusive no IReports e nao apresenta nada… o problema tem q ser no seu design do relatorio ou no sql retornando null…
vc tem certeza q o seu sql retorna dados ??? ja rodou esse sql em um um phpmyadmin ou mesmo dbtools etc… e teve realmente dados retornados?
Cara, uma vez eu tive esse problema quando a conexão ao banco estava configurada de maneira errada. Eu acho que tem a ver com a maneira como você está fazendo as conexões.
Rpz quando configuro o Banco e faço o teste de conexão ele informa que está tudo blz. E testo primeiro o relatório no Ireport usando a conexão do banco, para verificar se está tudo ok, mais nada sai uma página em branco e nem os campos estáticos não aparece. Estou querendo usar um Table Model, sem conecção do Banco e sim um DATASOURCE. Queria ver se eu achava um tutorial ensinando a usar o Table Model e o Ireport.
Eu insisto em dizer que é problema no driver, ou na fonte ODBC/JDBC, ou na string de conexão, ou qualquer coisa parecida…
Ja aconteceu comigo, eu conseguia até mesmo receber os campos do banco na hora de fazer a query(pelo IREPORT mesmo), e não lembro porque, acontecia isso de tudo ficar em branco na hora de gerar usando a conexao.