"John Dunn" <jd...@sefas.com> writes:

> Thanks, but my problem relates to a date used in the SQL in my report
> query

Ah, other direction - sorry.

> I have tried using a value that is a java.util.date in my SQL query.
> Here is the relevant bit of my SL query :
>
> AND submitted_date >= $P!{PARAM_TO_DATE}
>
> parameter PARAM_TO_DATE is defined as a java.util.Date with the default
> Value Expression set to 
> new java.util.Date("01/01/2050")
>
> But when the the Report query reads the SQL is gives the error
>
> Error : SQL problems: Missing IN or OUT parameter at index ::1

Ah - it may be your use of $P!{}.

It's my understanding that by using $P!{} you're overriding normal
parameter replacement behavior and forcing iReport/jasperreport to
insert the parameter as a raw string value into the SQL without being
able to parameterize the query to leave data conversions to the
driver.  In such cases I believe it's best to ensure that the
parameter being used is a string formatted exactly as you wish for the
SQL, and also to include any necessary quoting, either as part of the
parameter or in the query.

Is there a specific reason that you need to use $P!{} at this point in
your query?  It seems like a normal $P{} would be fine, and in that
case the date should transit across the JDBC connection just fine.  That
should also have the advantage of being database server agnostic as
the date isn't being converted into a string by your code, but inside
the driver.

If you have to stick with $P!{}, I'm guessing your current parameter
definition is causing the query to likely be built using the result of
.toString() on your parameter, which given what I think is the default
representation for a java.util.Date probably means that internally you
end up with a query like:

    and submitted_date >= Sat Jan 01 00:00:00 XXX 2050

(where XXX is the local timezone of the machine the report is run on)

In order to use $P!{}, I'd suggest:

* Make your parameter a type of java.Util.String and then construct the
  value so it is exactly the string representation you want of the date.
  So perhaps something like:

      String.format("%tY-%<tm-%<td", new Date("01/01/2050"))

* Include any necessary quoting in your SQL, which I think would be:
      and submitted_date >= '$P!{PARAM_TO_DATE}'

The combination of these two should, I believe, result in a SQL
command sent to the server of:

    and submitted_date >= '2005-01-01'

If Oracle doesn't like that format by default, just adjust the format
string as desired.

Beyond that, if you still have problems, I would try to obtain a trace
of the actual SQL that is making it to your server.  I'm not familiar
with Oracle but presume there is statement logging of some sort that
can be enabled.  Alternatively, I think you can use the JDBC driver
manager to add local logging to your JDBC connection.

-- David


------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
trial. Simplify your report design, integration and deployment - and focus on 
what you do best, core application coding. Discover what's new with
Crystal Reports now.  http://p.sf.net/sfu/bobj-july
_______________________________________________
jasperreports-questions mailing list
jasperreports-questions@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jasperreports-questions

Reply via email to