JasperViewer nao abrir quando ResultSet nao tiver registros

3 respostas
E

Ola,

Estou usando o JasperReports 1.2.0 + Swing/JDK5.
Gostaria de saber se tem algum jeito de falar para o JasperViewer nao abrir quando o ResultSet passado pra ele for vazio.

Um plano B seria eu fazer um ResultSet bidirecional e checar:

if (rs.next())
  JasperViewer.viewReport(...);
else
  JOptionPane.showMessageDialog("Sem dados...");

mas isso aumentaria o custo do meu ResultSet…

3 Respostas

ASOBrasil

edilmar,

O ResultSet vc já está gerando ele de qualquer jeito para passar para o Jasper, não? Então na verdade vc não precisa se preocupar com o custo de fazer um IF para verificar se este está vazio ou não; mesmo que seja possível deixar isso para o Jasper, este vai ser mais lento! Concorda?

ASOBrasil

E

Nao entendi bem sua msg.
Eu gero antes o ResultSet do jeito normal, ou seja:

PreparedStatement pstmt = conn.prepareStatement(SQL);
ResultSet rs = pstmt.executeQuery();

Entao, eu precisaria fazer isso:

if (rs.next())
  // chamar Jasper
else
  // nao chamar Jasper e dar msg em portugues que nao tem nada pra imprimir

mas se eu faco o rs.next(), o Jasper vai comecar no 2o. registro. Pra fazer o if, eu teria que declarar o Statement como bidirecional, para fazer um rs.beforeFirst() antes de chamar o Jasper, entendeu?

celiomarcos

Para verificar o jasperprint antes de enviar pro viewer eu uso o .getPages().isEmpty():

net.sf.jasperreports.engine.JasperPrint jprint = servicos.relatorio(nome, param, company);
if (jprint == null) {
    JOptionPane.showMessageDialog(this, "Falha ao criar o relatório", "Erro Relatorio", JOptionPane.ERROR_MESSAGE);
    return;
}
// verifica se tem alguma página
if (jprint.getPages().isEmpty()) {
    JOptionPane.showMessageDialog(this, "Não há conteúdo no relatório. A visualização foi cancelada", "Relatório vazio", JOptionPane.INFORMATION_MESSAGE);
    return;
}
Criado 2 de junho de 2006
Ultima resposta 10 de jun. de 2006
Respostas 3
Participantes 3