2015-01-09 43 views
1

我在Jasper爲我製作了一個自定義報告,用於我們使用的程序,並在更新程序時報告遇到錯誤。錯誤是:賈斯珀報告錯誤FirebirdSql錯誤#50710702

ERROR#50710702 iReport的是無法填充(0)

堆棧細節是:預先

 com.fbi.util.exception.ExceptionMainFree: net.sf.jasperreports.engine.JRException: Error preparing statement for executing the report query : 

SELECT part.num AS PartNum, part.description AS PartDescription, part.id AS partid, onhand.lgid, 
    COALESCE(sold.qtysold, 0) AS qtySold, 
DATEDIFF(day FROM timestamp ? TO timestamp ?) AS datediff, 

    COALESCE(onhand.avgqoh, 0) AS AvgQOH, COALESCE(locationgroup.name, 'No Inventory') as LocationGroupName, 
       productfortree.num AS productnum, producttree.name AS tree, 
    company.name AS company 

FROM part 
    INNER JOIN (SELECT AVG(inventorylog.qtyonhand) AS avgQOH, inventorylog.partid AS PartID, inventorylog.locationgroupid as LGID 
       FROM inventorylog 
       WHERE inventorylog.typeID IN (1,10,15,20,30,40,50,60,64,67,68,72) 
        AND inventorylog.eventdate BETWEEN ? AND ? 
       GROUP BY inventorylog.partid, inventorylog.locationgroupid) onHand ON part.id = onhand.partid 
    LEFT JOIN locationgroup ON onhand.lgid = locationgroup.id 
       LEFT JOIN (SELECT product.partid AS PartID, SUM(soitem.qtyfulfilled) AS QtySold, so.locationgroupid AS LGID 
       FROM soitem 
       LEFT JOIN product ON soitem.productid = product.id 
       LEFT JOIN so ON so.id = soitem.soid 
       WHERE soitem.typeid = 10 
        AND soitem.datelastfulfillment BETWEEN ? AND ? 
       GROUP BY product.partid, so.locationgroupid) AS sold ON part.id = sold.partid AND locationgroup.id = sold.lgid 
    LEFT JOIN product AS productfortree ON productfortree.partid = part.id 
    LEFT JOIN producttotree ON producttotree.productid = productfortree.id 
    LEFT JOIN producttree ON producttree.id = producttotree.producttreeid 
    JOIN company ON company.id = 1 

WHERE part.activeflag = 1 
    AND part.typeid = 10 
    AND locationgroup.id IN (7,8,9) 
    AND part.num LIKE ? 
    AND ((COALESCE(producttree.id,0) IN (0)) OR ((COALESCE(producttree.id,0) LIKE ?))) 

GROUP BY producttree.name, part.description, part.id, onhand.lgid, COALESCE(sold.qtysold, 0), 
DATEDIFF(day FROM timestamp ? TO timestamp ?), 
COALESCE(onhand.avgqoh, 0), COALESCE(locationgroup.name, 'No Inventory'), 
productfortree.num, part.num, company.name 

ORDER BY producttree.name, part.num 


       at com.evnt.eve.modules.logic.extra.LogicReport.getJasperPrint(LogicReport.java:300) 
       at com.evnt.eve.modules.ReportModule.getJasperPrint(ReportModule.java:168) 
       at sun.reflect.GeneratedMethodAccessor327.invoke(Unknown Source) 
       at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
       at java.lang.reflect.Method.invoke(Unknown Source) 
       at com.evnt.eve.modules.EVEModule.handleEvent(EVEModule.java:189) 
       at com.evnt.eve.MessageHandler.handleEvent(MessageHandler.java:156) 
       at com.evnt.eve.MessageHandler.run(MessageHandler.java:115) 
       at java.lang.Thread.run(Unknown Source) 
net.sf.jasperreports.engine.JRException: Error preparing statement for executing the report query : 

SELECT part.num AS PartNum, part.description AS PartDescription, part.id AS partid, onhand.lgid, 
    COALESCE(sold.qtysold, 0) AS qtySold, 
DATEDIFF(day FROM timestamp ? TO timestamp ?) AS datediff, 

    COALESCE(onhand.avgqoh, 0) AS AvgQOH, COALESCE(locationgroup.name, 'No Inventory') as LocationGroupName, 
       productfortree.num AS productnum, producttree.name AS tree, 
    company.name AS company 

FROM part 
    INNER JOIN (SELECT AVG(inventorylog.qtyonhand) AS avgQOH, inventorylog.partid AS PartID, inventorylog.locationgroupid as LGID 
       FROM inventorylog 
       WHERE inventorylog.typeID IN (1,10,15,20,30,40,50,60,64,67,68,72) 
        AND inventorylog.eventdate BETWEEN ? AND ? 
       GROUP BY inventorylog.partid, inventorylog.locationgroupid) onHand ON part.id = onhand.partid 
    LEFT JOIN locationgroup ON onhand.lgid = locationgroup.id 
       LEFT JOIN (SELECT product.partid AS PartID, SUM(soitem.qtyfulfilled) AS QtySold, so.locationgroupid AS LGID 
       FROM soitem 
       LEFT JOIN product ON soitem.productid = product.id 
       LEFT JOIN so ON so.id = soitem.soid 
       WHERE soitem.typeid = 10 
        AND soitem.datelastfulfillment BETWEEN ? AND ? 
       GROUP BY product.partid, so.locationgroupid) AS sold ON part.id = sold.partid AND locationgroup.id = sold.lgid 
    LEFT JOIN product AS productfortree ON productfortree.partid = part.id 
    LEFT JOIN producttotree ON producttotree.productid = productfortree.id 
    LEFT JOIN producttree ON producttree.id = producttotree.producttreeid 
    JOIN company ON company.id = 1 

WHERE part.activeflag = 1 
    AND part.typeid = 10 
    AND locationgroup.id IN (7,8,9) 
    AND part.num LIKE ? 
    AND ((COALESCE(producttree.id,0) IN (0)) OR ((COALESCE(producttree.id,0) LIKE ?))) 

GROUP BY producttree.name, part.description, part.id, onhand.lgid, COALESCE(sold.qtysold, 0), 
DATEDIFF(day FROM timestamp ? TO timestamp ?), 
COALESCE(onhand.avgqoh, 0), COALESCE(locationgroup.name, 'No Inventory'), 
productfortree.num, part.num, company.name 

ORDER BY producttree.name, part.num 


       at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.createStatement(JRJdbcQueryExecuter.java:377) 
       at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.createDatasource(JRJdbcQueryExecuter.java:196) 
       at net.sf.jasperreports.engine.fill.JRFillDataset.createQueryDatasource(JRFillDataset.java:1087) 
       at net.sf.jasperreports.engine.fill.JRFillDataset.initDatasource(JRFillDataset.java:668) 
       at net.sf.jasperreports.engine.fill.JRBaseFiller.setParameters(JRBaseFiller.java:1258) 
       at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:877) 
       at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:822) 
       at net.sf.jasperreports.engine.fill.JRFiller.fill(JRFiller.java:61) 
       at net.sf.jasperreports.engine.JasperFillManager.fill(JasperFillManager.java:446) 
       at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:849) 
       at com.evnt.eve.modules.logic.extra.LogicReport.getJasperPrint(LogicReport.java:296) 
       at com.evnt.eve.modules.ReportModule.getJasperPrint(ReportModule.java:168) 
       at sun.reflect.GeneratedMethodAccessor327.invoke(Unknown Source) 
       at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
       at java.lang.reflect.Method.invoke(Unknown Source) 
       at com.evnt.eve.modules.EVEModule.handleEvent(EVEModule.java:189) 
       at com.evnt.eve.MessageHandler.handleEvent(MessageHandler.java:156) 
       at com.evnt.eve.MessageHandler.run(MessageHandler.java:115) 
       at java.lang.Thread.run(Unknown Source) 
org.firebirdsql.jdbc.FBSQLException: GDS Exception. 335544569. Dynamic SQL Error 
SQL error code = -104 
Token unknown - line 3, column 29 
? 
       at org.firebirdsql.jdbc.AbstractPreparedStatement.<init>(AbstractPreparedStatement.java:138) 
       at org.firebirdsql.jdbc.FBPreparedStatement.<init>(FBPreparedStatement.java:45) 
       at sun.reflect.GeneratedConstructorAccessor57.newInstance(Unknown Source) 
       at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) 
       at java.lang.reflect.Constructor.newInstance(Unknown Source) 
       at org.firebirdsql.jdbc.FBStatementFactory.createPreparedStatement(FBStatementFactory.java:89) 
       at org.firebirdsql.jdbc.AbstractConnection.prepareStatement(AbstractConnection.java:1187) 
       at org.firebirdsql.jdbc.AbstractConnection.prepareStatement(AbstractConnection.java:942) 
       at org.firebirdsql.jdbc.AbstractConnection.prepareStatement(AbstractConnection.java:896) 
       at org.firebirdsql.jdbc.AbstractConnection.prepareStatement(AbstractConnection.java:324) 
       at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.createStatement(JRJdbcQueryExecuter.java:267) 
       at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.createDatasource(JRJdbcQueryExecuter.java:196) 
       at net.sf.jasperreports.engine.fill.JRFillDataset.createQueryDatasource(JRFillDataset.java:1087) 
       at net.sf.jasperreports.engine.fill.JRFillDataset.initDatasource(JRFillDataset.java:668) 
       at net.sf.jasperreports.engine.fill.JRBaseFiller.setParameters(JRBaseFiller.java:1258) 
       at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:877) 
       at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:822) 
       at net.sf.jasperreports.engine.fill.JRFiller.fill(JRFiller.java:61) 
       at net.sf.jasperreports.engine.JasperFillManager.fill(JasperFillManager.java:446) 
       at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:849) 
       at com.evnt.eve.modules.logic.extra.LogicReport.getJasperPrint(LogicReport.java:296) 
       at com.evnt.eve.modules.ReportModule.getJasperPrint(ReportModule.java:168) 
       at sun.reflect.GeneratedMethodAccessor327.invoke(Unknown Source) 
       at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
       at java.lang.reflect.Method.invoke(Unknown Source) 
       at com.evnt.eve.modules.EVEModule.handleEvent(EVEModule.java:189) 
       at com.evnt.eve.MessageHandler.handleEvent(MessageHandler.java:156) 
       at com.evnt.eve.MessageHandler.run(MessageHandler.java:115) 
       at java.lang.Thread.run(Unknown Source) 
org.firebirdsql.gds.GDSException: Dynamic SQL Error 
SQL error code = -104 
Token unknown - line 3, column 29 
? 
       at org.firebirdsql.gds.impl.wire.AbstractJavaGDSImpl.readStatusVector(AbstractJavaGDSImpl.java:2092) 
       at org.firebirdsql.gds.impl.wire.AbstractJavaGDSImpl.receiveResponse(AbstractJavaGDSImpl.java:2042) 
       at org.firebirdsql.gds.impl.wire.AbstractJavaGDSImpl.iscDsqlPrepare(AbstractJavaGDSImpl.java:1465) 
       at org.firebirdsql.gds.impl.GDSHelper.prepareStatement(GDSHelper.java:190) 
       at org.firebirdsql.jdbc.AbstractStatement.prepareFixedStatement(AbstractStatement.java:1441) 
       at org.firebirdsql.jdbc.AbstractPreparedStatement.prepareFixedStatement(AbstractPreparedStatement.java:1285) 
       at org.firebirdsql.jdbc.AbstractPreparedStatement.<init>(AbstractPreparedStatement.java:135) 
       at org.firebirdsql.jdbc.FBPreparedStatement.<init>(FBPreparedStatement.java:45) 
       at sun.reflect.GeneratedConstructorAccessor57.newInstance(Unknown Source) 
       at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) 
       at java.lang.reflect.Constructor.newInstance(Unknown Source) 
       at org.firebirdsql.jdbc.FBStatementFactory.createPreparedStatement(FBStatementFactory.java:89) 
       at org.firebirdsql.jdbc.AbstractConnection.prepareStatement(AbstractConnection.java:1187) 
       at org.firebirdsql.jdbc.AbstractConnection.prepareStatement(AbstractConnection.java:942) 
       at org.firebirdsql.jdbc.AbstractConnection.prepareStatement(AbstractConnection.java:896) 
       at org.firebirdsql.jdbc.AbstractConnection.prepareStatement(AbstractConnection.java:324) 
       at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.createStatement(JRJdbcQueryExecuter.java:267) 
       at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.createDatasource(JRJdbcQueryExecuter.java:196) 
       at net.sf.jasperreports.engine.fill.JRFillDataset.createQueryDatasource(JRFillDataset.java:1087) 
       at net.sf.jasperreports.engine.fill.JRFillDataset.initDatasource(JRFillDataset.java:668) 
       at net.sf.jasperreports.engine.fill.JRBaseFiller.setParameters(JRBaseFiller.java:1258) 
       at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:877) 
       at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:822) 
       at net.sf.jasperreports.engine.fill.JRFiller.fill(JRFiller.java:61) 
       at net.sf.jasperreports.engine.JasperFillManager.fill(JasperFillManager.java:446) 
       at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:849) 
       at com.evnt.eve.modules.logic.extra.LogicReport.getJasperPrint(LogicReport.java:296) 
       at com.evnt.eve.modules.ReportModule.getJasperPrint(ReportModule.java:168) 
       at sun.reflect.GeneratedMethodAccessor327.invoke(Unknown Source) 
       at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
       at java.lang.reflect.Method.invoke(Unknown Source) 
       at com.evnt.eve.modules.EVEModule.handleEvent(EVEModule.java:189) 
       at com.evnt.eve.MessageHandler.handleEvent(MessageHandler.java:156) 
       at com.evnt.eve.MessageHandler.run(MessageHandler.java:115) 
       at java.lang.Thread.run(Unknown Source) 

謝謝!

回答

0

的問題是:

DATEDIFF(day FROM timestamp ? TO timestamp ?) AS datediff 

timestamp速記投纔有效,如果緊跟一個字符串格式yyyy-mm-dd文字。當你使用一個參數,而不是你需要的參數轉換爲所需要的類型:

DATEDIFF(day FROM CAST(? AS TIMESTAMP) TO CAST(? AS TIMESTAMP)) AS datediff 

也許你甚至需要雙投:

CAST(CAST(? AS VARCHAR(20)) AS TIMESTAMP) 
+0

感謝您的快速反應。我改變了代碼,仍然有錯誤。 – JCWonder

+0

下面是源代碼的樣子:CODE:DATEDIFF(CAST日期($ P {dateRange1}作爲TIMESTAMP)到CAST($ P {dateRange2} AS TIMESTAMP))AS datediff, – JCWonder

+0

@JCWonder您是否嘗試過使用double cast我建議? –