<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-0  評論-3  文章-28  trackbacks-0

    在.net中,你可以很容易的用sql語句過濾報表數據,但在CR4E中沒這樣的功能設定,但可以通過編寫代碼完成。

    這里是我做的簡單用sql語句過濾數據的例子。

    項目還是用ǘ ├錈嫻膖omcat項目。

    建一個實現這個功能的類

    JRC_ResultSet_DataSource.java

    package com.JRC.util;
    import java.sql.*;
    import javax.servlet.http.*;

    import com.crystaldecisions.reports.sdk.*;
    import com.crystaldecisions.sdk.occa.report.lib.*;

    public class JRC_ResultSet_DataSource ...{
        
    private String      REPORT_NAME="";
        
    public JRC_ResultSet_DataSource(String report_name)...{
            
    this.REPORT_NAME=report_name;
         }

        
        
    /** *//**
          *
    @return rEPORT_NAME
         
    */

        
    public String getREPORT_NAME() ...{
            
    return REPORT_NAME;
         }


        
    /** *//**
          *
    @param report_name 要設置的 rEPORT_NAME
         
    */

        
    public void setREPORT_NAME(String report_name) ...{
             REPORT_NAME
    = report_name;
         }

        

        
    /** *//**
          *    連接數據庫,通過sql查詢語句進行查詢,返回結果集
         
    */

        
    private static ResultSet getResultSetFromQuery(String query, int scrollType)
            
    throws SQLException, ClassNotFoundException ...{
             Class.forName(
    "com.microsoft.jdbc.sqlserver.SQLServerDriver");
            
    final String DBUSERNAME = "username";
            
    final String DBPASSWORD = "password";
            
    final String CONNECTION_URL = "jdbc:microsoft:sqlserver://localhost:1433;database=dname";
            
             java.sql.Connection connection
    = DriverManager.getConnection(CONNECTION_URL, DBUSERNAME, DBPASSWORD);
             Statement statement
    = connection.createStatement(scrollType, ResultSet.CONCUR_READ_ONLY);
            
            
    return statement.executeQuery(query);

         }

        
    /** *//**
          * 通過sql語句過濾報表數據,在.net就不用怎么慘了
         
    */

        
    public boolean isReportSourceInSession(String session_name,HttpSession session) throws ReportSDKException, SQLException, ClassNotFoundException...{
            
    boolean flag=false;
            
    try ...{
                
    //打開水晶報表
                 ReportClientDocument reportClientDoc = new ReportClientDocument();
                 reportClientDoc.open(REPORT_NAME,
    0);
                
    //sql查詢語句,返回的字段數必須跟報表里面的一樣,不能多也不能少,并且字段的類型要跟報表的一樣,其他不管是什么數據都可以  
                
    //from 表這里要填完整,如數據庫名.dbo.數據庫表,最好做個別名
                 String query = "select tt.test_1,tt.test_2,tt.test_3,tt.test_4 from dname.dbo.test tt";
                
                 ResultSet resultSet
    = this.getResultSetFromQuery(query,ResultSet.TYPE_SCROLL_INSENSITIVE);
        
                 String tableAlias
    = reportClientDoc.getDatabaseController().getDatabase().getTables().getTable(0).getAlias();
                
    //把結果集放進報表里,將會自動產生一個datasource
                 reportClientDoc.getDatabaseController().setDataSource(resultSet,tableAlias, "resultsetTable");
                 session.setAttribute(session_name, reportClientDoc.getReportSource());
                 flag
    =true;
                
    return flag;
             }
    catch (Exception e) ...{
                
    // TODO: handle exception
                 e.printStackTrace();
                
    return flag;
             }
            
            
         }

    }

    這里要注意數據庫查詢結果集的字段數目要跟報表里面的字段數目一樣,類型也要一樣,不然就會出錯。

    sql語句中的表的名字要完整,如數據庫名.dbo.數據庫表,最好做個別名

    顯示頁面

    Result_viewer.jsp

     

    <%@page import="com.JRC.util.JRC_ResultSet_DataSource" %>
    <%--webreporting.jar  --%>
    <%@page import="com.crystaldecisions.report.web.viewer.*" %>
    <%--jrcerom.jar --%>
    <%@ page import="com.crystaldecisions.reports.sdk.*" %>
    <%    
         JRC_ResultSet_DataSource jrcd
    =new JRC_ResultSet_DataSource("resultSet.rpt");
        
    if(!jrcd.isReportSourceInSession("reportSource",session)
             response.sendRedirect(
    "error.html");
         CrystalReportViewer crViewer
    =new CrystalReportViewer();
         crViewer.setOwnPage(
    true);
         crViewer.setOwnForm(
    true);
         crViewer.setPrintMode(CrPrintMode.ACTIVEX);
        
         Object reportSource
    =session.getAttribute("reportSource");
         crViewer.setReportSource(reportSource);
        
         crViewer.processHttpRequest(request,response,
    this.getServletConfig().getServletContext(),null);
    %>

    注意上面幾點應該就沒問題了

    PS:Snippets視圖最下面有Crystal reports的一些實用代碼段

    CR查看器標記、打開并查詢報表、打開報表、查看報表、查看報表并設置數據庫登錄、將報表導出為pdf、將報表導出為rtf 等的代碼段,簡單易用

    posted on 2008-03-28 16:48 閱讀(538) 評論(0)  編輯  收藏 所屬分類: java基礎
    主站蜘蛛池模板: 狠狠色婷婷狠狠狠亚洲综合| 男女超爽刺激视频免费播放| 国产一精品一aⅴ一免费| 亚洲国产最大av| A级毛片内射免费视频| 亚洲日韩乱码久久久久久| 亚洲黄色免费电影| 亚洲网站在线免费观看| 中文字幕乱码免费视频| 亚洲国产美女视频| 中文字幕无码播放免费| 亚洲熟女综合一区二区三区| 在线观看免费宅男视频| 亚洲6080yy久久无码产自国产 | 国产黄在线观看免费观看不卡| 亚洲阿v天堂在线2017免费| 美国免费高清一级毛片| 国产成人亚洲综合无码| a级毛片在线视频免费观看| 久久久久亚洲av无码专区| 中文字幕av无码无卡免费| 亚洲sm另类一区二区三区| 日韩精品成人亚洲专区| 黄色网址在线免费| 亚洲人成网站看在线播放| 国产v片免费播放| a级午夜毛片免费一区二区| 亚洲一区二区三区电影| 大学生一级毛片免费看| 日韩精品视频在线观看免费| 国产综合精品久久亚洲| 亚洲成人在线免费观看| 18禁亚洲深夜福利人口| 国产精品亚洲片在线观看不卡| 国产精品久久久久免费a∨| 污污污视频在线免费观看| 色婷婷六月亚洲婷婷丁香| 国产成人免费一区二区三区| 免费a级毛片无码a∨免费软件| 亚洲综合一区二区三区四区五区| 午夜亚洲av永久无码精品|