Problemas com datas e parametros ireporte

12 respostas
N
Bem;

Sou estagiario numa empresa e estou na função de gerar relatorio;

e agora to com dificuldade nesse caso : gerar paâmetro relacionado á DATA no ireport-3.7.2

o codigo é esse:
SELECT
cliente_fisica.“clfi_cpf” AS cliente_fisica_clfi_cpf,
cliente_fisica.“clfi_nome” AS cliente_fisica_clfi_nome,
cliente_fisica.“clfi_pk_id” AS cliente_fisica_clfi_pk_id,
cliente_fisica.“clfi_data_cadastro” AS cliente_fisica_clfi_data_cadastro
FROM
"sigi".“cliente_fisica” cliente_fisica

WHERE clfi_data_cadastro
BETWEEN date ‘$P{DATA_INICIO}’ AND date ‘$P{DATA_FIM}’

o erro é esse:

Error filling print… Error preparing statement for executing the report query : SELECT cliente_fisica.“clfi_cpf” AS cliente_fisica_clfi_cpf, cliente_fisica.“clfi_nome” AS cliente_fisica_clfi_nome, cliente_fisica.“clfi_pk_id” AS cliente_fisica_clfi_pk_id, cliente_fisica.“clfi_data_cadastro” AS cliente_fisica_clfi_data_cadastro FROM “sigi”.“cliente_fisica” cliente_fisica WHERE clfi_data_cadastro BETWEEN date ‘?’ AND date '?'
net.sf.jasperreports.engine.JRException: Error preparing statement for executing the report query : SELECT cliente_fisica.“clfi_cpf” AS cliente_fisica_clfi_cpf, cliente_fisica.“clfi_nome” AS cliente_fisica_clfi_nome, cliente_fisica.“clfi_pk_id” AS cliente_fisica_clfi_pk_id, cliente_fisica.“clfi_data_cadastro” AS cliente_fisica_clfi_data_cadastro FROM “sigi”.“cliente_fisica” cliente_fisica WHERE clfi_data_cadastro BETWEEN date ‘?’ AND date ‘?’ at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.createStatement(JRJdbcQueryExecuter.java:240) at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.createDatasource(JRJdbcQueryExecuter.java:131) at net.sf.jasperreports.engine.fill.JRFillDataset.createQueryDatasource(JRFillDataset.java:686) at net.sf.jasperreports.engine.fill.JRFillDataset.initDatasource(JRFillDataset.java:606) at net.sf.jasperreports.engine.fill.JRBaseFiller.setParameters(JRBaseFiller.java:1273) at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:892) at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:841) at net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:5 at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:417) at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:247) at com.jaspersoft.ireport.designer.compiler.IReportCompiler.run(IReportCompiler.java:85 at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:572) at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:997) Caused by: org.postgresql.util.PSQLException: O índice da coluna está fora do intervalo: 1, número de colunas: 0. at org.postgresql.core.v3.SimpleParameterList.bind(SimpleParameterList.java:52) at org.postgresql.core.v3.SimpleParameterList.setStringParameter(SimpleParameterList.java:117) at org.postgresql.jdbc2.AbstractJdbc2Statement.bindString(AbstractJdbc2Statement.java:2123) at org.postgresql.jdbc2.AbstractJdbc2Statement.setString(AbstractJdbc2Statement.java:1244) at org.postgresql.jdbc2.AbstractJdbc2Statement.setString(AbstractJdbc2Statement.java:1230) at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.setStatementParameter(JRJdbcQueryExecuter.java:411) at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.setStatementParameter(JRJdbcQueryExecuter.java:257) at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.createStatement(JRJdbcQueryExecuter.java:232) … 12 more
Print not filled. Try to use an EmptyDataSource…

espero que vocês me ajudem

12 Respostas

blackout

Então…

Olhando de primeira, no seu BETWEEN, dentro da clausula WHERE, você colocou a palavra “date”. Porque? Também não é necessário colocar a variável dentro de aspas simples.
Tipo, não sei o que ela faz ali, mas acho que o certo seria:

...
WHERE clfi_data_cadastro
BETWEEN $P{DATA_INICIO} AND $P{DATA_FIM}

Também sugiro, antes de você executar a query junto com a geração do relatório, testar ela antes.
Tipo, não sei se você usa algum software para montar querys, tipo squirrel, toad e etc;
Mas execute a query antes pra ter certeza que ela, por si propria, funciona. Assim você pode ter certeza que se houver algum problema, provavelmente não é na query.

Abraços

N

Ei cara waleu pela resposta mas agora deu esse 2° erro:

at net.sf.jasperreports.engine.fill.JRBaseFiller.setParameters(JRBaseFiller.java:1273) at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:892) at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:841) at net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:58) at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:417) at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:247) at com.jaspersoft.ireport.designer.compiler.IReportCompiler.run(IReportCompiler.java:858) at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:572) at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:997) Caused by: org.postgresql.util.PSQLException: ERRO: operador não existe: timestamp with time zone >= character varying at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:1592) at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1327) at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:192) at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:451) at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:350) at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:254) at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.createDatasource(JRJdbcQueryExecuter.java:137) … 11 more
Print not filled. Try to use an EmptyDataSource…

"só lembrando que o valor do clfi_data_cadastro é: timestamp with time zone "

espero que possa me ajudar,

abraços.

blackout

Como ficou sua query? Você testou ela antes de roda-la com o iReport?

N
juniorsatanas
Melhorando algumas coisa :

Clausula where :

AND (to_char(tabela.campo,'dd/mm/yyyy') = $P{pstrDataInicio})
AND (to_char(tabela.campo,'dd/mm/yyyy') = $P{pstrDataFim})
rdsilio

Boa Tarde,

O código inicial estava correto:
SELECT
cliente_fisica.“clfi_cpf” AS cliente_fisica_clfi_cpf,
cliente_fisica.“clfi_nome” AS cliente_fisica_clfi_nome,
cliente_fisica.“clfi_pk_id” AS cliente_fisica_clfi_pk_id,
cliente_fisica.“clfi_data_cadastro” AS cliente_fisica_clfi_data_cadastro
FROM
"sigi".“cliente_fisica” cliente_fisica
WHERE clfi_data_cadastro
BETWEEN date ‘$P{DATA_INICIO}’ AND date ‘$P{DATA_FIM}’

O PostgreSQL está interpretando o parâmetro como uma string, faz um casting em usa query, assim: BETWEEN date ‘$P{DATA_INICIO}’ AND date ‘$P{DATA_FIM}’ com a palavra reservada date no caso.

O erro aparentemente está no seu código java, posta ele.

juniorsatanas

rdsilio, Ele falou que ta dando o erro no Ireport ! e a Query dele pega no Postgresql normalmente !

Estranho esse erro !
blackout

Mas a query foi testada fora do iReport?

juniorsatanas

Sim pelo que ele me falou !

acho que resolve !

N

N

N

Criado 14 de outubro de 2010
Ultima resposta 15 de out. de 2010
Respostas 12
Participantes 4