Bom dia Galera.
Estou desenvolvendo um trabalho acadêmico e que só faltam os relatórios para serem gerados. Estou usando o iReport 4.6.0 da Jaspersoft.
O problema é o seguinte, eu monto a query no iReport e quando faço o teste no programa, ele traz os dados corretamente, mas quando vou fazer a compilação no NetBeans para gerar o relatório, ele retorna um erro dizendo que não existem dados para o relatório!!! Como assim NetBeans??
Já gerei um subpacote no Netbeans para guardar os relatórios e também já coloquei o caminho do relatório do projeto nas configurações de compilação do iReport.
Desconfio que estou errando na passagem de parâmetos ou na query do relatório, mas só uma pessoa mais experiente pode me dizer ao certo.
O projeto é um sistema de controle de portaria, onde são registrados nome do visitante, cpf, data de entrada, data de saída, enfim… essas coisas triviais.
Preciso gerar 2 relatórios, o primeiro é um relatório de visitas por período e o segundo é um relatório de visitantes por nome. Vou mostrar minha query e o código no netbeans de cada um deles.
Relatório de visitas por período:
SELECT * FROM PORTARIA
WHERE DATA_ENTRADA
BETWEEN $P{data_entrada} AND $P{dataSaida}
ORDER BY DATA_ENTRADA
Obs: Ambas as variáveis são do tipo Date.
Código do relatório:
private void geraRelatorio() throws PortariaException, SQLException
{
GregorianCalendar dataInicio = new GregorianCalendar();
GregorianCalendar dataFim = new GregorianCalendar();
if(!LtpUtil.validarData(campoTextoHoraInicial.getText(), dataInicio))
{
JOptionPane.showMessageDialog(this, "Data inicial não informada ou inválida", "Erro", JOptionPane.ERROR_MESSAGE);
campoTextoHoraInicial.requestFocus();
return;
}
if(!LtpUtil.validarData(campoTextoHoraFinal.getText(), dataFim))
{
JOptionPane.showMessageDialog(this, "Data final não informada ou inválida", "Erro", JOptionPane.ERROR_MESSAGE);
campoTextoHoraFinal.requestFocus();
return;
}
if(dataInicio.compareTo(dataFim) > 0)
{
JOptionPane.showMessageDialog(this, "Data de início maior que data final", "Erro", JOptionPane.ERROR_MESSAGE);
campoTextoHoraInicial.requestFocus();
return;
}
HashMap<String, Object> parametros = new HashMap<>();
parametros.put("Data inicial", dataInicio.getTime());
parametros.put("Data final", dataFim.getTime());
try {
LtpUtil.gerarRelatorio(LtpUtil.RELATORIO_VISUALIZADOR_JASPER, banco.BancoPortaria.objConexao, parametros, getClass().getResource("Relatorios/VisitasPeriodo.jasper").openStream(), "Relação de visitas por período");
} catch (Exception e) {
JOptionPane.showMessageDialog(this, e.getMessage(), "Erro", JOptionPane.ERROR_MESSAGE);
}
}
Relatório de visitas por nome
SELECT * FROM PORTARIA
WHERE NOME LIKE $P{nome}
ORDER BY NOME
Código do relatório:
private void geraRelatorio() throws PortariaException, SQLException
{
String nome;
nome = campoTextoNome.getText();
while(true)
{
if(nome.isEmpty() || nome.length() <= 2)
{
JOptionPane.showMessageDialog(this, "Nome não informado ou inválido", "Erro", JOptionPane.ERROR_MESSAGE);
campoTextoNome.requestFocus();
break;
}
else
{
break;
}
}
HashMap<String, Object> parametros = new HashMap<>();
parametros.put("Nome: ", nome);
try {
LtpUtil.gerarRelatorio(LtpUtil.RELATORIO_VISUALIZADOR_JASPER, banco.BancoPortaria.objConexao, parametros, getClass().getResource("Relatorios/VisitasNome.jasper").openStream(), "Relação de visitas por nome");
} catch (Exception ex) {
JOptionPane.showMessageDialog(this, ex.getMessage(), "Erro", JOptionPane.ERROR_MESSAGE);
}
}
Obs: LtpUtil é o nome da biblioteca que o professor disponibiliza para ser usada no trabalho, nela existem funções de validação de datas e geração de relarótios, acho isso muito alienante, mas como ele quer que usem a biblioteca dele fazer o que!!!
Desculpem o testamento que escrevi, mas é pra explicar tudo da melhor maneira possível. Quem puder ajudar, agradecerei muito.
Valeu!!!