Parâmetros no iReport

Olá, pessoal!!

Estou fazendo um relatório e quero passar mais de um parâmetro para a consulta e está ocorrendo erro.

Veja o código abaixo:

public JasperReportControllerListaVendaDiariaVendedor() {
 		super();
 	}
 	
 	public static void geraRelatorioVendaDiariaVendedor(Connection c, Map params) {
 		
 		try {
 			
 			jp = JasperFillManager.fillReport("D:/sistema/relatorios/vendaDiaria.jasper", params, c);
 			JasperExportManager.exportReportToPdfFile(jp, "D:/sistema/relatorios/vendaDiaria.pdf");
 			Process p = Runtime.getRuntime().exec("cmd.exe /C D:/sistema/relatorios/vendaDiaria.pdf");

Para chamar o relatório:

btGerarRelatorio.addActionListener(new java.awt.event.ActionListener() {
 				public void actionPerformed(java.awt.event.ActionEvent e) {
 					reg = (cbVendedor.getSelectedItem().toString());
 					Date dt = (converteData(tfData.getText()));
 					
 					Map params = new HashMap();
 					params.put("dataVenda", dt);
 					params.put("vendedor", reg);
 					
 					System.out.println(params);
 					JasperReportControllerListaVendaDiariaVendedor.geraRelatorioVendaDiariaVendedor(GerenciadorBD.getConexao(), params);
 				}
 			});
 		}
 		return btGerarRelatorio;
 	}

No código acima quando mando imprimir o params o resultado é o seguinte:

{vendedor=Vendedor, dataVenda=2007-07-13}

Consulta feita no iReport:

select indice_desconto, quantidade, valor_unit, valor_total, preco_custo, descricao_produto, venda.nome_vendedor from venda, item_venda, produtos where venda.id_venda = item_venda.venda_id_venda and item_venda.produtos_id_produtos = produtos.id_produtos and data_pedido like '$P{dataVenda}' and operacao like 'V' and nome_vendedor like '$P!{vendedor}' order by descricao_produto

O erro:

 org.postgresql.util.PSQLException: O índice da coluna está fora do intervalo: 1, número de colunas: 0.
 ...
 NESTED BY :
 net.sf.jasperreports.engine.JRException: Error preparing statement for executing the report query : 
 
 select indice_desconto, quantidade, valor_unit, valor_total, preco_custo, descricao_produto, venda.nome_vendedor from venda, item_venda, produtos
 where venda.id_venda = item_venda.venda_id_venda and
 item_venda.produtos_id_produtos = produtos.id_produtos and 
 data_pedido like '?' and 
 operacao like 'V' and
 nome_vendedor like 'Vendedor'
 order by descricao_produto
 
 

Analisando o código de erro, percebi que o problema é a passagem de parâmetro da data.

Se alguém puder me ajudar, agradeço!!

Olá.

Eu fiquei cismado com o operador like que você está usando no seu select. Primeiro que ele precisa do símbolo %, então ficaria algo do tipo

nome_vendedor like '%$P{vendedor}%' para que o pedaço “vendedor” seja localizado em qualquer parte do nome. Depois, achei estranho você usar like numa comparação com uma data. Se você quer registros de uma data específica, o correto seria:

data_pedido = funcao_para_converter_em_data($P{dataVenda})

Perceba que não há haspas simples envolvendo o parâmetro e coloquei aí funcao_para_converter_em_data porque não estou bem certo que função converte um valor para tipo data no Postgre. Acho que é Cast…

Olá Ademilton!
Eu fiz as alterações que vc sugeriu, mas agora o relatório abre em branco. quando coloco dados no iReport ele faz a consulta normalmente. Mas quando tento passar os parâmetros o relatório abre em branco.

Para converter a data no postgre eu uso a função converte data antes de passar a data para o relatório.

A consulta ficou assim agora:

select indice_desconto, quantidade, data_pedido, valor_unit, valor_total, preco_custo, descricao_produto, venda.nome_vendedor from venda, item_venda, produtos
where venda.id_venda = item_venda.venda_id_venda and
item_venda.produtos_id_produtos = produtos.id_produtos and 
data_pedido = ($P{dataVenda}) and 
operacao like 'V' and
nome_vendedor like '%$P!{vendedor}%'
order by descricao_produto

Se tiver mais alguma sugestão, agradeço!

Posso te sugerir executar diretamente o select no banco, substituindo os parâmetros pelos valores que está passando… Suspeito de duas coisas:
1 - ou o select ainda não está entendendo a data da forma como está sendo passada - tipo, pelo que você imprimiu a data está indo como 2007-07-13, será que é neste formato que está gravado no banco?
2 - Veja se o nome do vendedor no banco está em maiuscula/minúscula. E ainda não saquei aquele “!” no parâmetro vendedor. Pra que serve isso?

Ah, e veja também o campo operação. Ainda está usando um like ali… Se o valor nesse campo é exatamente V, use o operador “=”.

Opa,

complementado, $P! não existe! E para datas use passe parâmetros do tipo data. Outra coisa não coloque aspas simples, você está setando um parâmetro e se ele for do tipo String o JDBC já fará isto.

:okok:

Valeu pessoal!!

A consulta dessa forma funcionou de forma correta!

select indice_desconto, quantidade, data_pedido, valor_unit, valor_total, preco_custo, descricao_produto, venda.nome_vendedor from venda, item_venda, produtos where venda.id_venda = item_venda.venda_id_venda and item_venda.produtos_id_produtos = produtos.id_produtos and data_pedido = ($P{dataVenda}) and operacao = 'V' and nome_vendedor like $P{vendedor} order by descricao_produto

Obrigada!!!