水晶報表(Crystal Report)- 水晶報表常見問題總結

自定義水晶報表查看器的外觀
    目錄
    1、隱藏/顯示查看器的各組成部分,如:樹視圖、工具欄.
    2、隱藏/顯示工具欄按鈕.
    3、控制查看器在 Web 頁面裏的佈局.
    4、去除水晶報表的公司LOGO.
    5、替換工具欄按鈕的圖片.
    1、隱藏/顯示查看器的各組成部分,如:樹視圖、工具欄.
    設置 Crystal Report Viewer 的屬性:
    BestFitPage 布爾值.獲取或設置頁面視圖是大小合適還是用滾動條進行裁剪.配合設置 Width、Height 來實現無空白和無滾動條的顯示!

    DisplayGroupTree 布爾值.獲取或設置樹視圖是可見還是隱藏.
    DisplayPage 布爾值.獲取或設置工具欄是可見還是隱藏.
    DisplayToolbar 布爾值.獲取或設置工具欄上的轉到頁按鈕是可見還是隱藏.
    PageZoomFactor Int32.獲取或設置報表的縮放因數.
    SeparatePages 布爾值.獲取或設置報表頁是分開還是連接.
    PageToTreeRatio Float64.設置組樹與報表視圖之間的大小比例.

    2、隱藏/顯示工具欄按鈕.
    設置 Crystal Report Viewer 的屬性:
    HasGotoPageButton 布爾值.獲取或設置轉到頁按鈕的可見性.
    HasLevelUpButton 布爾值.獲取或設置工具欄上的轉到上一頁按鈕是可見還是隱藏.
    HasPageNavigationButtons 布爾值.獲取或設置工具欄上的頁面導航按鈕是可見還是隱藏.
    HasRefreshButton 布爾值.獲取或設置工具欄上的刷新按鈕是可見還是隱藏.

    HasSearchButton 布爾值.獲取或設置工具欄上的搜索按鈕是可見還是隱藏.
    HasZoomFactorList 布爾值.獲取或設置工具欄上的縮放因數列表是可見還是隱藏.
    3、控制查看器在 Web 頁面裏的佈局.
    在"設計視圖”,修改 CrystalReportViewer 的 Width、Height 屬性.
    切換到窗體的"HTML 視圖”,修改 style 屬性.

    4、去除水晶報表的公司LOGO.
    將 Crystal 公司的Logo 文件替換或刪除.
    (1)如果是用 VS.NET 裏自帶的水晶報表
    C:\Program Files\Microsoft Visual Studio .NET\Crystal Reports\Viewers\images\ToolBar\logo.gif
    (2)如果是用水晶報表 9.2
    C:\Program Files\Common Files\Crystal Decisions\2.0\crystalreportviewers\images\toolbar\crlogo.gif

    5、替換工具欄按鈕的圖片.
    (1)如果是用 VS.NET 裏自帶的水晶報表
    C:\Program Files\Microsoft Visual Studio .NET\Crystal Reports\Viewers\images
    (2)如果是用水晶報表 9.2
    C:\Program Files\Common Files\Crystal Decisions\2.0\crystalreportviewers\images

    登錄失敗
    目錄
    1、文件夾 NTFS 權限的問題
    2、PULL 模式下,數據庫登錄問題 (Windows 集成身份驗證)
    3、PULL 模式下,數據庫登錄問題 (非 Windows 集成身份驗證)
    4、PUSH 模式下,畫蛇添足登錄數據庫.
    5、部署時出錯:連接失敗.錯誤的登錄參數.
    概述
    登錄失敗是水晶報表 Web 應用的一個常見問題,涉及賬號模擬、身份驗證方式、數據庫安全、NTFS 權限這些方方面面的安全問題.

    1.模擬
    用戶訪問 ASP.NET 程序時,通常模擬的是 ASPNET 賬號.也可能是當前用戶、SYSTEM 賬號等.
    2.驗證
    (1) 登錄數據庫需要驗證用戶的身份.
    如果採用非 Windows 集成身份驗證,則需要提供正確的登錄用戶名和密碼.如果用戶名或密碼錯誤,則登錄失敗.
    而採用 Windows 集成身份驗證,會自動用用戶模擬的賬號登錄.
    (2) 訪問 NTFS 文件夾時也需要驗證用戶的身份.驗證的是用戶模擬的賬號.

    3.授權
    (1) 數據庫安全採用 Windows 集成身份驗證時,如果用戶模擬的賬號沒有登錄權限,則出現登錄失敗.
    (2) 訪問 NTFS 文件夾時,如果用戶模擬的賬號沒有相應的 NTFS 權限,也會出現登錄失敗.
    1、文件夾 NTFS 權限的問題
    (1) 水晶報表 Web 查看器文件夾
    VS.NET 內置的水晶報表:C:\Program Files\Microsoft Visual Studio .NET\Crystal Reports\Viewers

    水晶報表 9.x:C:\Program Files\Common Files\Crystal Decisions\2.0\crystalreportviewers
    錯誤提示:"/WebApplication1”應用程序中的服務器錯誤.登錄失敗.
    異常詳細信息: CrystalDecisions.CrystalReports.Engine.LogOnException: 登錄失敗.
    (2) 報表文件所在的文件夾,或者導出時的目標文件夾.

    錯誤提示:s登錄失敗.
    異常詳細信息: CrystalDecisions.CrystalReports.Engine.LogOnException: 登錄失敗.
    (3) 解決方案
    在資源管理器裏設置上述文件夾的"安全”,即 NTFS 權限.
    爲用戶 ASPNET 添加"寫入”權限.
    如果問題仍然存在,爲用戶 Everyone 添加"完全控制”權限.
    2、PULL 模式下,數據庫登錄問題 (Windows 集成身份驗證)

    (1) 錯誤提示
    "/MyWebApp”應用程序中的服務器錯誤.
    用戶 'PYPC101\ASPNET' 登錄失敗.
    (2) 問題分析
    設計水晶報表時,在"數據庫專家”的"連接信息”裏使用了"集成安全”,即採用了 Windows 集成身份驗證.
    (3) 解決方案
    要爲 ASPNET 賬號增加數據庫登錄和訪問權限
    但這種安全措施不太適用,設計時最好使用非 Windows 集成身份驗證,用服務器的賬號登錄,比如:sa.

    3、PULL 模式下,數據庫登錄問題 (非 Windows 集成身份驗證)
    運行時讀取 web.config 中服務器及賬號信息,並登錄數據庫服務器.
 

  1. using CrystalDecisions.Shared ; //負責解釋TableLogOnInfo類  
  2. using CrystalDecisions.CrystalReports.Engine ; //負責解釋ReportDocument類  
  3. private void Page_Load(object sender, System.EventArgs e)  
  4. {  
  5.     string rptPath;  
  6.     rptPath=Server.MapPath ("analysis.rpt");  
  7.     oRpt.Load (rptPath;);  
  8.     //從web.config中獲取服務器及賬號信息  
  9.     string serverName, dbName, userName, password;  
  10.     serverName = System.Configuration.ConfigurationSettings.AppSettings ["serverName"];  
  11.  
  12.     dbName = System.Configuration.ConfigurationSettings.AppSettings ["dbName"];  
  13.     userName = System.Configuration.ConfigurationSettings.AppSettings ["userName"];  
  14.     password =System.Configuration.ConfigurationSettings.AppSettings ["password"];  
  15.  
  16.     //登錄數據庫  
  17.     TableLogOnInfo logOnInfo = new TableLogOnInfo ();  
  18.     int i = 0;  
  19.     // 對報表中的每個表依次循環.  
  20.     for (i=0;i == Report.Database.Tables.Count - 1;i++)  
  21.     {  
  22.      // 設置當前表的連接信息.  
  23.      logOnInfo.ConnectionInfo.ServerName = serverName;  
  24.      logOnInfo.ConnectionInfo.DatabaseName = dbName;  
  25.  
  26.      logOnInfo.ConnectionInfo.UserID = userName;  
  27.      logOnInfo.ConnectionInfo.Password = password;  
  28.      Report.Database.Tables [i].ApplyLogOnInfo (logOnInfo);  
  29.     }  
  30.     //建立.rpt文件與CryStalReportviewer文件之間的連接  
  31.     CrystalReportViewer1.ReportSource = oRpt;  
  32.  
  33.     CrystalReportViewer1.DataBind();  
  34. }  

   

    4、PUSH 模式下,畫蛇添足登錄數據庫.
    PUSH 模式使用程序裏的數據集作爲數據源,不需要登錄數據庫.
    5、部署時出錯:連接失敗.錯誤的登錄參數.
    部署包缺少了負責數據源讀寫的管理模塊:Crystal_Database_Access2003.msm、Crystal_Database_Access2003_chs.msm.
    ref:
    http://life.blogspirit.com/archive/2005/01/17/dw_19987_39064_--_27700_26230_25253_34920_24120_35265_38382.html

    http://life.blogspirit.com/archive/2005/01/17/dw_19987_39064_--_27700_26230_25253_34920_24120_35265_383821.html
 

    
6、 未使用集成crystal登錄方式,直接打開的報表文件,不需要集成登錄.實現方式是在aspx頁面上添加一個控件,然後在代碼中找到相應的報表文件(絕對路徑),設置相應的區域和時間參數,顯示出來即可.

  1. viewer.ReportSource = "D:\rpt\test_rpt_file";  
  2. ParameterFields paramFields = new ParameterFields();  
  3. ParameterField pfItemId = new ParameterField();  
  4. pfItemId.ParameterFieldName = "CityCode";  
  5. ParameterDiscreteValue dcItemId = new ParameterDiscreteValue();  
  6.  
  7. dcItemId.Value = ddlCity.SelectedValue;  
  8. pfItemId.CurrentValues.Add(dcItemId);  
  9. ParameterField pfItemMonth = new ParameterField();  
  10. pfItemMonth.ParameterFieldName = "year_month";  
  11. ParameterDiscreteValue dcItemMonth = new ParameterDiscreteValue();  
  12.  
  13. dcItemMonth.Value = int.Parse(GetDateValue());  
  14. pfItemMonth.CurrentValues.Add(dcItemMonth);  
  15. paramFields.Add(pfItemId);  
  16. paramFields.Add(pfItemMonth);  
  17. viewer.ParameterFieldInfo = paramFields;  

一、圖片顯示出不來

 在配置文件(web.config)裏添加以下代碼:

  1. <httpHandlers>  
  2.     <add verb="GET" path="CrystalImageHandler.aspx" type="CrystalDecisions.Web.CrystalImageHandler, CrystalDecisions.Web, Version=13.0.2000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304"/>
  3. </httpHandlers>  

 二、原文錯誤信息:
You're getting the error message "A Number, Currency Amount, Boolean, Date, Time, Date-Time, or String Is Expected Here". In general, this happens when you're running a Crystal Reports template that was created on one machine, that used custom DLLs, and those DLLs were not copied/installed/registered on the machines running Report Runner Viewer or Report Runner Batch. The custom DLLs are normally stored/registered in the Windows Crystal directory.
In short, it means your report is trying to use a function that the Crystal Reports runtime engine does not recognize.
You can also get this with version incompatibilities. For example, our 2008 version of our Viewer support 99% of the Crystal Reports 2008 functionality, but there are a few new functions that are not yet supported. HasValue is one of those functions. If you use that in your Crystal Reports template, you will also get the error message above.

翻譯:
在使用水晶報表的時候,您可能看到類似這樣的錯誤信息“某個數值,貨幣計算,布爾值,日期,時間,日期-時間,或字符串等可預期的值。 ”一般來說,這種情況發生在您運行一個在某臺機器上創建好的Crystal Reports模板文件時,只能使用它系統自帶的動態庫 ,而缺少那些沒有 複製/安裝/註冊 在此機器上的動態庫或報表運行組件。自帶的動態庫通常儲存/註冊在系統目錄下水晶報表的目錄中。 
總之,這就說明您的報表是試圖使用一個水晶報表運行引擎不兼容的函數。 
您也可以得到這個錯誤當您使用一個與這個版本不兼容的函數。例如,我們的2008版的水晶報表支持99 %的Crystal Reports 2008的功能,但有一些新的功能,目前還不支持。 HasValue就是其中的一個功能。如果您使用在您的Crystal Reports模板中,您也將看到上述的錯誤信息。

三、Crystal report 出現maximum report processing jobs limit configured by your system administrator has been reached錯誤的解決辦法.
WEB下的水晶報表在正常運行一段時間後,出現以下錯誤:
maximum report processing jobs limit configured by your system administrator has been reached

1.更改註冊表:
HKEY_LOCAL_MACHINE/SOftware/Crystal Decisions/Report Application Server/InprocServer/ReportDocument
將PrintJobLimit由75改爲0表示無限制,或者改爲更大,然後重啓動計算機後,故障排除.

2. 報表生成完以後加上下面語句

  1. if(rptDoc!=null)  
  2. {  
  3.   rptDOc.Close();  
  4.   rptDoc.Dispose();  

rptDoc是 ReportDocument 對象 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章