仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2446|回复: 18
打印 上一主题 下一主题

[学习教程] ASP教程之WEB情况下打印报表的crystal的处理计划...

[复制链接]
小女巫 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-3 23:32:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
使用cdonts,可以发送、查看邮件,实现webmail的功能。结合wsh,可以实现对nt主机的管理,如nt用户管理、iis虚拟主机设置、exchange邮箱设置等等,就像管理本地机一样方便。   <%@ 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办事端包括的功效来完成这个功效,你可以选择分歧的
'SmartViewer*.asp文件送到分歧的阅读器,复杂的用你想用的Smart Viewer asp文件来取代。

'这些选择是: SmartViewerActiveX.asp, SmartViewerJave.asp,SmartViewerHTMLFrame.asp,
'and SmartViewerHTMLPAge.asp.注重,利用这些包括文件时,你必需把响应的.ASP文件放在同主
'ASP文件不异的虚拟途径中。
'
'*注重* 关于 SmartViewerHTMLFrame and SmartViewerHTMLPage,你必需在虚拟途径中有framepage.asp
'文件和toolbar.asp 文件

viewer = Request.Form("Viewer")

'下面读取被利用的viewer的值,并放入变量"viewer"中

If cstr(viewer) = "ActiveX" then
%>
<!-- #include file="SmartViewerActiveX.asp" -->
<%
ElseIf cstr(viewer) = "Netscape Plug-in" then
%>
<!-- #include file="ActiveXPluginViewer.asp" -->
<%
ElseIf cstr(viewer) = "Java using Browser JVM" then
%>
<!-- #include file="SmartViewerJava.asp" -->
<%
ElseIf cstr(viewer) = "Java using Java Plug-in" then
%>
<!-- #include file="JavaPluginViewer.asp" -->
<%
ElseIf cstr(viewer) = "HTML Frame" then
Response.Redirect("htmstart.asp")
Else
Response.Redirect("rptserver.asp")
End If
'下面 If/Then/Else 被设计测试"viewer" 变量的值,基于这个值,送恰当的Crystal Smart Viewer
%>
Active Server Page技术为应用开发商提供了基于脚本的直观、快速、高效的应用开发手段,极大地提高了开发的效果。在讨论ASP的安全性问题之前,让我们来看看ASP是怎么工作的。
若天明 该用户已被删除
沙发
发表于 2015-2-4 01:42:37 | 只看该作者
学习ASP其实应该上升到如何学习程序设计这种境界,其实学习程序设计又是接受一种编程思想。比如ASP如何学习,你也许在以前的学习中碰到过。以下我仔细给你说几点:
只想知道 该用户已被删除
板凳
发表于 2015-2-4 01:42:37 | 只看该作者
完全不知道到底自己学的是什么。最后,除了教程里面说的几个例子,还是什么都不会。
飘灵儿 该用户已被删除
地板
发表于 2015-2-4 01:42:37 | 只看该作者
代码逻辑混乱,难于管理:由于ASP是脚本语言混合html编程,所以你很难看清代码的逻辑关系,并且随着程序的复杂性增加,使得代码的管理十分困难,甚至超出一个程序员所能达到的管理能力,从而造成出错或这样那样的问题。
乐观 该用户已被删除
5#
发表于 2015-2-5 16:58:22 | 只看该作者
下载一个源代码,然后再下载一个VBScript帮助,在源代码中遇到不认识的函数或是其他什么程序,都可以查帮助进行解决,这样学习效率很高。
灵魂腐蚀 该用户已被删除
6#
发表于 2015-2-7 04:04:07 | 只看该作者
以上是语言本身的弱点,在功能方面ASP同样存在问题,第一是功能太弱,一些底层操作只能通过组件来完成,在这点上是远远比不上PHP/JSP,其次就是缺乏完善的纠错/调试功能,这点上ASP/PHP/JSP差不多。
小妖女 该用户已被删除
7#
发表于 2015-3-6 17:04:27 | 只看该作者
你可以通过继承已有的对象最大限度保护你以前的投资。并且C#和C++、Java一样提供了完善的调试/纠错体系。
愤怒的大鸟 该用户已被删除
8#
发表于 2015-3-11 04:39:16 | 只看该作者
弱类型造成潜在的出错可能:尽管弱数据类型的编程语言使用起来回方便一些,但相对于它所造成的出错几率是远远得不偿失的。
不帅 该用户已被删除
9#
发表于 2015-3-17 20:12:48 | 只看该作者
下载一个源代码,然后再下载一个VBScript帮助,在源代码中遇到不认识的函数或是其他什么程序,都可以查帮助进行解决,这样学习效率很高。
小魔女 该用户已被删除
10#
发表于 2015-3-23 08:06:19 | 只看该作者
代码的可重用性差:由于是面向结构的编程方式,并且混合html,所以可能页面原型修改一点,整个程序都需要修改,更别提代码重用了。
再见西城 该用户已被删除
11#
发表于 2015-4-1 00:11:01 | 只看该作者
我就感觉到ASP和一些常用的数据库编程以及软件工程方面的思想是非常重要的。我现在也在尝试自己做网页,这其中就用到了ASP,我想它的作用是可想而知的。
飘飘悠悠 该用户已被删除
12#
发表于 2015-4-11 16:06:33 | 只看该作者
Application:这个存储服务端的数据,如果不清除,会直到web应用程序结束才清除(例如重启站点)
莫相离 该用户已被删除
13#
发表于 2015-4-16 00:11:31 | 只看该作者
Session:这个存储跟客户端会话过程的数据,默认20分钟失效
再现理想 该用户已被删除
14#
发表于 2015-4-28 10:36:58 | 只看该作者
他的语法和设计思路和VB完全相同,导致很多ASP的书都留一句“相关内容请参考VB的相关教材....”更糟糕的是,相当多的ASP教程混合了Javascript,VBscript等等脚本语言,搞的初学者。
金色的骷髅 该用户已被删除
15#
发表于 2015-4-30 05:14:36 | 只看该作者
我认为比较好的方法是找一些比较经典的例子,每个例子比较集中一种编程思想而设计的。
爱飞 该用户已被删除
16#
发表于 2015-5-1 14:09:28 | 只看该作者
Session:这个存储跟客户端会话过程的数据,默认20分钟失效
因胸联盟 该用户已被删除
17#
发表于 2015-5-6 19:10:37 | 只看该作者
代码逻辑混乱,难于管理:由于ASP是脚本语言混合html编程,所以你很难看清代码的逻辑关系,并且随着程序的复杂性增加,使得代码的管理十分困难,甚至超出一个程序员所能达到的管理能力,从而造成出错或这样那样的问题。
兰色精灵 该用户已被删除
18#
发表于 2015-6-20 21:07:05 | 只看该作者
交流是必要的,不管是生活还是学习我们都要试着去交流,通过交流我们可以学到很多我们自己本身所没有的知识,可以分享别人的经验甚至经历。
柔情似水 该用户已被删除
19#
发表于 2015-7-14 12:22:13 | 只看该作者
在平时的学习过程中要注意现学现用,注重运用,在掌握了一定的基础知识后,我们可以尝试做一些网页,也许在开始的时候我们可能会遇到很多问题,比如说如何很好的构建基本框架。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-3 13:43

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表