2015-09-24 37 views
0

我是iReport的新手,迄今爲止我所做的只是運行一個已經編譯好的報告。事實上,這是我們目前使用的報告,所以不應該有任何問題。雖然,當過我運行報告中,我拋出此錯誤消息爲什麼iReport向我拋出這些子報表異常?

 Compiling to file... C:\Program Files\Fishbowl\reports\Custom\PackingListTacticalMedical2015.jasper 
 Compiling subreports.... 
 Subreport C:\Program Files\Fishbowl\reports\Custom\SOPackingListTacticalMedical2015.jrxml already compiled. 
 **Unable to locate the subreport with expression: "$P{cbLayoutFormat}.equals("standard") ? $P{path} + "POPackingList.jasper" : $P{cbLayoutFormat}.equals("carton") ? $P{path} + "cartonPOPackingList.jasper" : $P{path} + "POPackingListLoc.jasper"".** 
    Compilation running time: 13,619 

報告並仍在運行和編譯,但是當過我提示「輸入shipID」 - 我做 - 結果是空白。我知道信息的意思,我只是不明白它的意思。

感謝任何人都可以幫助指示或解釋此。

+0

[如何將主報表數據源傳遞給子報表(JasperReports)?](http://stackoverflow.com/questions/8490563/how-to-pass-main-report-data-source-to- subreport-jasperreports) –

回答

0

嘗試將您的子報表的表達式數據類型更改爲InputStream而不是String(路徑),然後將您的子報表作爲輸入流傳遞爲參數。 將您的子報表放入資源目錄中。並編譯它。

InputStream subReportStream=getClass().getResourceAsStream("subReportName.jasper"); 

params.put("SUBREPORT_STREAM", subReportStream); 

this work fine for me. 
+0

我相信我通過選擇一個不同的目錄解決了這個問題。儘管現在我的代碼給了我這個錯誤信息: 錯誤填充打印錯誤準備執行報告查詢語句:SELECT ship.id AS ShipID,ship.orderid AS OrderID,ship.ordertypeid AS OrderType FROM ship WHERE ship.id =? – colt

+0

看來你的sql字符串包含語法錯誤。試試這個WHERE ship.id =:? – kamel2005

+0

我在主報告和所有子報告中都有WHERE ship.id = $ p {shipID}:/ – colt

0

隨着魚缸插入它的運行路徑爲您編譯並在更改報表時需要關閉編譯子報表選項$ P {}路徑參數的方式。同樣,在Fishbowl在運行時覆蓋參數的方式下,如果您想從iReport內部而不是Fishbowl內部運行它,您必須知道您正在查找的所有數據庫標識。 最簡單的解決方法是將報告編譯到其工作目錄,並且可以在編輯對報告的更改時在Fishbowl內部進行刷新。

相關問題