CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Web 开发 >  ASP

请教Crystal Reports的问题

楼主nickysoft(泥鳅)2002-08-20 16:30:41 在 Web 开发 / ASP 提问

请问如果通过RECORDSET来生成Crystal   reports的报表并显示在WEB页面上,  
   
  一定重谢! 问题点数:100、回复次数:10Top

1 楼swingcoder(摩托骡拉)回复于 2002-08-20 17:12:59 得分 0

帮你顶!Top

2 楼nickysoft(泥鳅)回复于 2002-08-20 17:23:54 得分 0

我自己也顶!各位帮忙啊!!Top

3 楼yonghengdizhen(等季节一过,繁花就凋落)回复于 2002-08-20 18:54:58 得分 0

RECORDSET  
  生成报表??  
   
  不是向做好的报表(.rpt)传递参数???  
   
   
  没听说过.Top

4 楼nickysoft(泥鳅)回复于 2002-08-20 22:49:02 得分 0

我也不清楚到底应该怎么做  
   
  不管什么方法,能否给我个例子参考参考?  
   
  不甚感谢!Top

5 楼gopark(大猫)回复于 2002-08-21 08:33:42 得分 0

CR8.5安裝後,有個ADORecordset的例子,可以看一看.  
  主要方法就是,先定義一個.ttx文件,然後把recordset給他就可以了.Top

6 楼gopark(大猫)回复于 2002-08-21 08:37:22 得分 100

給個例子看看  
   
    <     %@     LANGUAGE="VBSCRIPT"     %>      
      <     %  
      '     =     =     =     =     =     =     =     =     =     =     =     =     =     =     =     =     =     =     =     =     =     =     =     =     =     =     =     =     =     =     =     =     =     =  
      '     从ADO     Recordset直接生成报表  
      '     =     =     =     =     =     =     =     =     =     =     =     =     =     =     =     =     =     =     =     =     =     =     =     =     =     =     =     =     =     =     =     =     =     =  
      '  
      '     概念:  
      '  
      '     这个应用被设计成演示怎样从ADO     Recordset生成报表。我们首先建立ADO     Connection和  
      '     Recordset对象,然后用SQL语句从数据库中生成一个记录集。然后我们建立一个Crystal  
      '     Reports对象,并把这个这个对象指向ADO     recordset。最后我们将Crystal     Reports  
      '     Smart     Viewer送到客户端显示这个报表。  
       
      '     第一步:建立ADO     Connection     and     Recordset  
       
      '     一个ADO的数据库连接就是通过你已经存在的ODBC数据源(DSN)从象ASP这样的应用中来访问  
      '     数据的连接。为了达到这个例子的目的,我们将使用到用一个叫做"Xtreme     Sample     Data"的  
      '     连到Access数据库Xtreme.mdb系统DSN  
       
      '     建立ADO数据库连接:  
       
      Set     oConn     =     Server.CreateObject("ADODB.Connection")  
       
      '这里建立叫做"oConn"的ADO     connection,我们将用这个ADO     connection对象连接到上述的DSN  
       
      '用     ADO     connection     必须先要打开它:  
       
      oConn.Open("Xtreme     Sample     Database")  
       
      '这里打开我们的ODBC的数据源,这个数据源指向Access数据库Xtreme.mdb  
       
      '现在我们必须建立一个RecordSet对象:  
       
      set     session("oRs")     =     Server.CreateObject("ADODB.Recordset")  
       
      '在上面我们建立了一个session("oRs").     这个session中存放一个RecordSet对象  
      '将要包含用SQL语句返回的数据  
       
      '定义和生成     recordset:  
       
      session("oRs").ActiveConnection     =     oConn  
      '定义这个recordset将要使用的Connection     对象  
       
      session("oRs").Open     "SELECT     [Product     ID],     [Product     Name]     FROM     Product"  
       
      '用SQL语句从Xtreme.mdb库的"Product"表中取出两个字段  
       
      '===================================================================================  
      '建立Crystal     Reports     对象  
      '===================================================================================  
      '你可能注意到,Crystal     Reports对象被设为session,这是因为已经需求就会被一个叫做  
      '"rptserver.asp"的ASP处理,为了让rptserver.asp能非常容易地访问Crystal     Report对象,  
      '我们把这些对象都设为session。这样任何ASP页都运行在这个session中,都能够直接访问这些对象  
       
      reportname     =     "ADORecordset.rpt"  
       
      '这里建立一个字符串变量,指向Crystal     Report文件(.rpt     file),再用这段代码的时候  
      '换成你的Crystal     Report文件名。  
       
      '建立APPLICATION     对象  
      If     Not     IsObject     (session("oApp"))     Then  
      Set     session("oApp")     =     Server.CreateObject("CrystalRuntime.Application")  
      End     If  
       
      '这个"if/end     if"     结构用来每个session只建立一次     Crystal     Reports     Application对象o  
      '建立application对象     -     session("oApp"),将Crystal     Report     Design     Component  
      'automation     server     (craxdrt.dll)载入内存。  
      '  
      '我们建立session变量是为了再asp     session过程中都使用它们.这样可以减少将craxdrt.dll  
      '载入和卸载的系统开销。在一个session中一旦建立了一个application对象我们就可以不必  
      '重建对象运行更多的报表     。  
       
      '     建立REPORT     对象  
      '  
      '这个REPORT     对象被Application的OpenReport方法建立  
       
      Path     =     Request.ServerVariables("PATH_TRANSLATED")  
      While     (Right(Path,     1)     <     >         "\"     And     Len(Path)     <     >         0)  
      iLen     =     Len(Path)     -     1  
      Path     =     Left(Path,     iLen)  
      Wend  
      response.Write     path  
      '这个"While/Wend"     循环被用来将当前文件从虚拟路径(eg:     http://Domain/Dir)转换成Crystal  
      '     Report     file的物理路径(eg:     C:\)  
       
      '打开REPORT     (先清除以前的任何对象)  
       
      If     IsObject(session("oRpt"))     then  
      Set     session("oRpt")     =     nothing  
      End     if  
       
      On     error     resume     next  
       
      Set     session("oRpt")     =     session("oApp").OpenReport(path     &         reportname,     1)  
      '这里用"PATH"     和     "reportname"变量计算出Crystal     Report     file的物理路径,     并打开它。  
       
      If     Err.Number     <     >         0     Then  
      Response.Write     "Error     Occurred     creating     Report     Object:     "     &         Err.Description  
      Set     Session("oRpt")     =     nothing  
      Set     Session("oApp")     =     nothing  
      Session.Abandon  
      Response.End  
      End     If  
       
      '这个     On     erro     resume     next     块检查在建立report对象时出现的任何错误,我们正明确的捕获任何  
      '错误如果视图超过许可协议规定的最大并发用户数。  
       
      '注意,我们并不只建立一次report对象。这是因为有了ASP     session     你可以处理更多的超过一个报表  
      '     rptserver.asp将仅仅处理一个叫session("oRpt")的report对象。因此,你如果希望处理多个报表  
      '的话,就要建立一个新的session("oRpt")对象。  
       
      session("oRpt").MorePrintEngineErrorMessages     =     False  
      session("oRpt").EnableParameterPrompting     =     False  
       
      '这里不允许错误报告机制,包括Crystal     Report     Design     Component     automation     server     (craxdrt.dll)  
      '内建的错误报告,这是因为两个原因:  
      '1.     打印引擎是在Web     Server上执行的,     所以任何错误信息都将被显示在服务端,如果在服务端报告出错了,  
      '     打印引擎将停止运作,你的应用将被“挂起”  
      '2.     rptserver.asp     已经有一些错误处理逻辑在里面了,可以捕获任何非致命错误,并显示在客户端。  
      '  
      '**重要**     即使我们禁止了服务端引擎的错误处理,但是致命错误还是会在Web     Server服务端被捕获,并  
      '显示出错误提示对话框。所以我们建议,你在"World     Wide     Web     Publishing"     service     (IIS     service)设置  
      '"Allow     Service     to     Interact     with     Desktop"选项。这样如果你的ASP应用死了,你将能看到错误提示。  
       
      '======================================================================================  
      '======================================================================================  
       
      '现在我们必须告诉report在ADO     recordset中的数据  
       
      'report建立在动态的ADO     recordset的基础,我们必须基于我们建立的recordset来建立report  
      '然后在运行时我们告诉report数据在ADO     Record     set中。report通常依靠数据库结构文件  
      '(ADORecordset.ttx)建立,这个.ttx文件包含recordset的结构,不包含实际数据。  
       
      '一个Crystal     Report完全依赖将要使用的Report的数据结构,因此在运行时你的数据库结构文件(ttx     file)  
      '或真实反应ADO     recordset包含的数据的DSN是十分重要的  
       
      session("oRpt").DiscardSavedData  
      set     Database     =     session("oRpt").Database  
      '实例化report用到的数据库  
       
      set     Tables     =     Database.Tables  
      '实例化数据库对象中的表  
       
      set     Table1     =     Tables.Item(1)  
      '实例化第一张表,在这个实例中这个表对象指向ADORecordset.ttx文件  
       
      Table1.SetPrivateData     3,     session("oRs")  
       
      '"SetPrivateData"告诉report现在数据源是     recordset,现在report将要显示的数据包含在session("oRs")中  
      '如果你的report中包含子报表将提供不同的recordset来指向子报表的数据  
      '  
      '====================================================================================  
      '重新得到记录和建立"Page     on     Demand"     Engine     Object  
      '====================================================================================  
       
      On     Error     Resume     Next  
      session("oRpt").ReadRecords  
       
      If     Err.Number     <     >         0     Then  
      Response.Write     "Error     Occurred     Reading     Records:     "     &         Err.Description  
      Set     Session("oRpt")     =     nothing  
      Set     Session("oApp")     =     nothing  
      Session.Abandon  
      Response.End  
      Else  
      If     IsObject(session("oPageEngine"))     Then  
      set     session("oPageEngine")     =     nothing  
      End     If  
      set     session("oPageEngine")     =     session("oRpt").PageEngine  
      End     If  
       
      '     实例化     CRYSTAL     REPORTS     SMART     VIEWER  
      '  
      '在ASP环境中使用Crystal     Reports     automation     server,     我们用相同的页来通过Crystal     Web     Report     Server调用  
      '"Smart     Viewers"  
      '有四个     Crystal     Reports     Smart     Viewers:  
      '  
      '1.     ActiveX     Smart     Viewer  
      '2.     Java     Smart     Viewer  
      '3.     HTML     Frame     Smart     Viewer  
      '4.     HTML     Page     Smart     Viewer  
      '  
      '你使用的Smart     Viewer将与你数用的浏览器兼容的,例如你将不会使用Java     viewer如果你的浏览器  
      '不支持Java     applets。为此,在这个DEMO中,我们已经选择定义一个viewer,你可以通过代码决定  
      '提出要求的浏览器的支持兼容性,无论如何,这个功能继承自Crystal     Reports     automation     server,  
      '超过了这个示例的范围。  
       
      '基于简单的理由,我们已经选择通过ASP服务端包含的功能来实现这个功能,你可以选择不同的  
      'SmartVie  
  Top

7 楼nickysoft(泥鳅)回复于 2002-08-21 09:35:04 得分 0

太感谢了,如果成功,我一定重重感谢!Top

8 楼nickysoft(泥鳅)回复于 2002-08-21 10:37:59 得分 0

能不能给个完整的例子啊,谢谢!Top

9 楼nickysoft(泥鳅)回复于 2002-08-21 11:34:32 得分 0

我已经试出来了,可是它必须要先有个RPT的文件  
  请问怎么生成一个REPORT呢?  
  谢谢!Top

10 楼gopark(大猫)回复于 2002-08-21 13:09:16 得分 0

rpt用報表設計器做.  
  ttx也可用報表設計器做,也可自己寫.  
  參考  
  http://www.csdn.net/expert/topic/794/794473.xml?temp=.113064  
  下午我請假了,自己多看看例子吧,有問題晚上再說吧...  
  還有可已用Crystal搜一下舊貼...  
  能教的就那麼多了  
  ..Top

相关问题

  • asp 与Crystal Reports
  • Crystal Reports的问题
  • 我的 "Crystal Reports designer" 在哪?
  • Crystal Reports 8.0的CD Key
  • 誰有 Crystal Reports 10 VCL
  • 求救:Crystal Reports问题???
  • 请问Crystal reports/Crystal reports web server是什么东东?
  • Crystal Reports和datareport哪个好用???
  • 请教关于CRYSTAL REPORTS的问题?
  • 寻找Crystal Reports 8 .0 的CD-KEY

关键词

  • reports
  • 报表
  • smart
  • 数据
  • 文件
  • 数据库
  • 引擎
  • 浏览器
  • 结构
  • orpt

得分解答快速导航

  • 帖主:nickysoft
  • gopark

相关链接

  • Web开发类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo