你的想法过于复杂:一、将你的默认sql语句作为参数,可以实现你的第一个问题
                 二、同样的道理你将sql语句作为参数可以直接传给ireport

解决方案 »

  1.   

    问题1 
    date参数为空的话,怎么样才能使得它使用默认参数值
    select * from SALARY_DAILYSCORE where SALEDATE= ($P{DATE} == null ? "默认值":$P{DATE})问题 2 
    date参数为空的话,就使其查询所有的记录
    select * from SALARY_DAILYSCORE where($P{DATE} == null ? 1=1:SALEDATE =$P{DATE})ireport的问题到jr论坛去问,多的是人
      

  2.   

    douko() ;你好,
    按照你说的方法我试了一下,在java调用时间还是报错了,错误信息如下:
    HTMLActionException:net.sf.jasperreports.engine.JRException: Error loading scriptlet class : mgrsalaryscoreScriptlet实现方法如下:
    在ireport中定义变量DATE,value="select * from DS.SALARY_DAILYSCORE where SALEDATE=20050901 order by ORDER2"
    然后在定义sql语句中只单独写了$P{DATE},ireport编译能通过,但是不能进行Run report using a conncetion另外在java中写报表的代码如下:
    Map parameters = new HashMap();parameters.put("DATE","select * from DS.SALARY_DAILYSCORE where SALEDATE='20050901' order by ORDER2");conn=JPool.getConnection(WebKeys.JPOOL_SOURCE);JasperPrint jasperPrint =JasperFillManager.fillReport((reportFile.getPath),parameters,conn);conn.close();
    请教这是为什么?谢谢
      

  3.   

    libin53(红尘摆渡)
    你好,用了你说方法,也是出现的同上的问题,
    另外请给出jr论坛的地址
    谢谢!
      

  4.   

    我的意思
    第一是设置报表参数,我定义参数为daySql,设置default value expression,如,"select * from gk_gprs.t_TaskData_dianliang where fieldagentaddr= '013D09C7' and trim(measuredpointnum)= '1' and trim(datadate) = TO_DATE('2005-09-15','yyyy/mm/dd') order by datadate";
    第二步:引用参数,在reportsqlquery中引用参数,方法是$P!{daySql}
    ******上面的方法可以实现你要求的默认值
    第三步:在你的程序需要添加你需要传入的参数,这时你传入的参数就是你的特定条件下的sql语句,他将取代你设定的默认值,如下:
                String gprs_status_sql =
                        "select a.TOTAL_MINUTE as tm,a.MINUTE_HIGH_TOTAL as mht," +
                        "a.MINUTE_LOW_TOTAL as mlt, b.ydh as ydh,b.dyjcname as name," +
                        "b.dyjcl as dyjcl,"+
                        "from  DMSDATA.T_VOLTAGE_DAY a,dyhgl.dyjcinfo b  where a.terminal_id=b.ydh and a.MINUTE_HIGH_TOTAL>0 and" +
                        " to_char(a.voltage_max_time,'yyyy-mm-dd')='" +
                        gprs_dateTime + "'";
                //传入参数
                parameters.put("gprs_status_sql", gprs_status_sql);按照上面的操作就可以了
      

  5.   

    我已经按照你的方法去做了,在ireport中已经完全没有问题,
    现在在java中调用生成jasper,出现如下错误:
    net.sf.jasperreports.engine.JRException: Error loading scriptlet class : mgrsalaryscoreScriptlet不知为何?
      

  6.   

    问题1 
    date参数为空的话,怎么样才能使得它使用默认参数值
    select * from SALARY_DAILYSCORE where SALEDATE= ($P{DATE} == null ? "默认值":$P{DATE})问题 2 
    date参数为空的话,就使其查询所有的记录
    select * from SALARY_DAILYSCORE where($P{DATE} == null ? 1=1:SALEDATE =$P{DATE})--------------------------你应该先看看你的程序中的参数sql语法,你把那条语句放到数据库测试一下;
      

  7.   

    sql语句没问题啊,试过了,
    是不是和ireport 生成的类文件有关??
      

  8.   

    类型呢,有没有一样呢/ 
    传进去的参数要跟在ireport中定义的类型是一样的
    jr的地址我给忘记了,baidu上找一下,是一个专题java的论坛