Relatório só funciona no preview!

7 respostas
F

Pelo amor de Deus!!! :slight_smile:

Caros amigos, tenho o seguinte problema aqui com um relatório.
Ele funciona normalmente no preview mas qdo tento executa-lo pelo sistema ele nao encontra os
campos que deve buscar apresentando a seguinte mensagem: "Unknown column name: acao ".

A titulo de informação caso isso altere alguma coisa, estou trabalhando neste relatorio com 5 tabelas
todas ligadas normalmente por chaves estrangeiras.

Repetindo, no preview tudo rola normalmente.

7 Respostas

D

a query do preview é a mesma da aplicação?
se for uma query feita no sistema, testa ela para ver se está realmente retornando este campo

ou você só está passando a conexão, e usando a query que está no report mesmo?

F

Esta é a query do iReport.

SELECT
     processo.`numProcesso` AS numProcesso,
     acao.`acao` AS acao,
     objeto.`descricao` AS descricao,
     orgao.`descricao` AS descricao,
     vara.`vara` AS vara,
     requerente.`nome` AS nome,
     requerido.`razaoSocial` AS razaoSocial,
     andamento.`dataAndamento` AS dataAndamento,
     andamento.`andamento` AS andamento,
     processo.`situacao` AS situacao,
     acao.`codAcao` AS acao_codAcao,
     orgao.`codOrgao` AS orgao_codOrgao,
     vara.`codVara` AS vara_codVara,
     objeto.`codObjeto` AS objeto_codObjeto,
     processo.`codVara` AS processo_codVara,
     processo.`codObjeto` AS processo_codObjeto,
     processo.`codOrgao` AS processo_codOrgao,
     processo.`codAcao` AS processo_codAcao,
     processo.`observacao` AS processo_observacao,
     processo.`dt_cadastro` AS processo_dt_cadastro,
     ligacao_processo_requerido.`numProcesso` AS ligacao_processo_requerido_numProcesso,
     ligacao_processo_requerido.`cnpjRequerido` AS ligacao_processo_requerido_cnpjRequerido,
     ligacao_processo_requerente.`numProcesso` AS ligacao_processo_requerente_numProcesso,
     ligacao_processo_requerente.`cpfRequerente` AS ligacao_processo_requerente_cpfRequerente,
     andamento.`numProcesso` AS andamento_numProcesso
FROM
     `acao` acao INNER JOIN `processo` processo ON acao.`codAcao` = processo.`codAcao`
     INNER JOIN `objeto` objeto ON processo.`codObjeto` = objeto.`codObjeto`
     INNER JOIN `orgao` orgao ON processo.`codOrgao` = orgao.`codOrgao`
     INNER JOIN `vara` vara ON processo.`codVara` = vara.`codVara`
     INNER JOIN `ligacao_processo_requerente` ligacao_processo_requerente ON processo.`numProcesso` = ligacao_processo_requerente.`numProcesso`
     INNER JOIN `ligacao_processo_requerido` ligacao_processo_requerido ON processo.`numProcesso` = ligacao_processo_requerido.`numProcesso`
     INNER JOIN `andamento` andamento ON processo.`numProcesso` = andamento.`numProcesso`
     INNER JOIN `requerido` requerido ON ligacao_processo_requerido.`cnpjRequerido` = requerido.`cnpj`
     INNER JOIN `requerente` requerente ON ligacao_processo_requerente.`cpfRequerente` = requerente.`cpf`

E esta é a Classe que executa o Relatório.

import java.util.HashMap;
import javax.swing.JOptionPane;
import net.sf.jasperreports.engine.JRResultSetDataSource;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.view.JasperViewer;



public class RelatorioProcesso {

String codigo, situacao;
Conexao conecta = new Conexao();
    
    
public RelatorioProcesso(String codigo)
   {
     try
        {
          conecta.conecta();
          conecta.executeSQL("select * from processo where numProcesso ="+codigo);
          JRResultSetDataSource jrRs= new JRResultSetDataSource(conecta.resultset) ;
          JasperPrint relatorio = JasperFillManager.fillReport(
          "C:/Sistema Dorival/relatorios/relatorioProcesso.jasper",
          new HashMap(),jrRs);
          JasperViewer.viewReport(relatorio,false);
         }
     catch(Exception erro)
       {
        JOptionPane.showMessageDialog(null,"Erro ao Exibir Relatório"+ erro);
        erro.printStackTrace();
       }
   }

    void setVisible(boolean b) {
        throw new UnsupportedOperationException("Not yet implemented");
    }
    
    
    
    
    
}
D

Se você for no sei gerenciador do banco e testar este comando

select * from processo limit 30

ele retorna o campo acao, para você?

acho que não aparece por que pelo que percebi do select do report você tem uma tabela acao, e no select que você faz na aplicação você só faz referencia a esta tabela processo

F

Sim, retorna normalmente.

Me diz uma coisa, é necessario ter estas linhas na classe que executa o relatorio?

conecta.conecta();
conecta.executeSQL("select * from Processo where numProcesso ="+codigo);

A coisa mais curiosa é que no iReport ta perfeito.

D

Faz o seguinte ao inves de passar o JRResultSet, passa a conexão e verifica se funciona

import java.util.HashMap;  
import javax.swing.JOptionPane;  
import net.sf.jasperreports.engine.JRResultSetDataSource;  
import net.sf.jasperreports.engine.JasperFillManager;  
import net.sf.jasperreports.engine.JasperPrint;  
import net.sf.jasperreports.view.JasperViewer;  
  
  
  
public class RelatorioProcesso {  
  
String codigo, situacao;  
Conexao conecta = new Conexao();  
      
      
public RelatorioProcesso(String codigo)  
   {  
     try  
        {  
          conecta.conecta();  
          conecta.executeSQL("select * from processo where numProcesso ="+codigo);  
          JRResultSetDataSource jrRs= new JRResultSetDataSource(conecta) ;  //<<<<<<<<<<<<<<<<<<<<<<<<<<<<aqui é só deixar a conexão
          JasperPrint relatorio = JasperFillManager.fillReport(  
          "C:/Sistema Dorival/relatorios/relatorioProcesso.jasper",  
          new HashMap(),jrRs);  
          JasperViewer.viewReport(relatorio,false);  
         }  
     catch(Exception erro)  
       {  
        JOptionPane.showMessageDialog(null,"Erro ao Exibir Relatório"+ erro);  
        erro.printStackTrace();  
       }  
   }  
  
    void setVisible(boolean b) {  
        throw new UnsupportedOperationException("Not yet implemented");  
    }  
      
      
      
      
      
}
D

foi mal é aqui

import java.util.HashMap;    
import javax.swing.JOptionPane;    
import net.sf.jasperreports.engine.JRResultSetDataSource;    
import net.sf.jasperreports.engine.JasperFillManager;    
import net.sf.jasperreports.engine.JasperPrint;    
import net.sf.jasperreports.view.JasperViewer;    
    
    
    
public class RelatorioProcesso {    
    
String codigo, situacao;    
Conexao conecta = new Conexao();    
        
        
public RelatorioProcesso(String codigo)    
   {    
     try    
        {    
          conecta.conecta();    
          conecta.executeSQL("select * from processo where numProcesso ="+codigo);    
          JRResultSetDataSource jrRs= new JRResultSetDataSource(conecta.resultset) ;  
          JasperPrint relatorio = JasperFillManager.fillReport(    
          "C:/Sistema Dorival/relatorios/relatorioProcesso.jasper",    
          new HashMap(),conecta); //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<é aqui   
          JasperViewer.viewReport(relatorio,false);    
         }    
     catch(Exception erro)    
       {    
        JOptionPane.showMessageDialog(null,"Erro ao Exibir Relatório"+ erro);    
        erro.printStackTrace();    
       }    
   }    
    
    void setVisible(boolean b) {    
        throw new UnsupportedOperationException("Not yet implemented");    
    }    
        
        
        
        
        
}
D

no primeiro tinha colocado no lugar errado, é só colocar a conexão nos parametros do fillReport, ao inves do JRResultSet

Se ainda sim não der certo, posta a msg de erro inteira por favor

Criado 30 de julho de 2011
Ultima resposta 30 de jul. de 2011
Respostas 7
Participantes 2