隨筆-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 閱讀(540) 評論(0)  編輯  收藏 所屬分類: java基礎
          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          文章分類

          Eclipse網址

          java相關網址

          其它

          日語

          英語

          鏈接

          搜索

          •  

          最新評論

          主站蜘蛛池模板: 沽源县| 平乡县| 布拖县| 洛隆县| 玛纳斯县| 罗源县| 思茅市| 鹿泉市| 荥阳市| 柳州市| 华阴市| 高碑店市| 永吉县| 定陶县| 潜山县| 江山市| 泰州市| 万安县| 巴彦淖尔市| 平顶山市| 渝中区| 金阳县| 偃师市| 澳门| 赞皇县| 伊春市| 靖宇县| 景泰县| 新安县| 卢氏县| 平罗县| 南乐县| 同德县| 全南县| 沙洋县| 富宁县| 玛曲县| 密云县| 邳州市| 旌德县| 宁乡县|