ASP教程之WEB情况下打印报表的crystal的处理计划...
使用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 , 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是怎么工作的。 学习ASP其实应该上升到如何学习程序设计这种境界,其实学习程序设计又是接受一种编程思想。比如ASP如何学习,你也许在以前的学习中碰到过。以下我仔细给你说几点: 完全不知道到底自己学的是什么。最后,除了教程里面说的几个例子,还是什么都不会。 代码逻辑混乱,难于管理:由于ASP是脚本语言混合html编程,所以你很难看清代码的逻辑关系,并且随着程序的复杂性增加,使得代码的管理十分困难,甚至超出一个程序员所能达到的管理能力,从而造成出错或这样那样的问题。 下载一个源代码,然后再下载一个VBScript帮助,在源代码中遇到不认识的函数或是其他什么程序,都可以查帮助进行解决,这样学习效率很高。 以上是语言本身的弱点,在功能方面ASP同样存在问题,第一是功能太弱,一些底层操作只能通过组件来完成,在这点上是远远比不上PHP/JSP,其次就是缺乏完善的纠错/调试功能,这点上ASP/PHP/JSP差不多。 你可以通过继承已有的对象最大限度保护你以前的投资。并且C#和C++、Java一样提供了完善的调试/纠错体系。 弱类型造成潜在的出错可能:尽管弱数据类型的编程语言使用起来回方便一些,但相对于它所造成的出错几率是远远得不偿失的。 下载一个源代码,然后再下载一个VBScript帮助,在源代码中遇到不认识的函数或是其他什么程序,都可以查帮助进行解决,这样学习效率很高。 代码的可重用性差:由于是面向结构的编程方式,并且混合html,所以可能页面原型修改一点,整个程序都需要修改,更别提代码重用了。 我就感觉到ASP和一些常用的数据库编程以及软件工程方面的思想是非常重要的。我现在也在尝试自己做网页,这其中就用到了ASP,我想它的作用是可想而知的。 Application:这个存储服务端的数据,如果不清除,会直到web应用程序结束才清除(例如重启站点) Session:这个存储跟客户端会话过程的数据,默认20分钟失效 他的语法和设计思路和VB完全相同,导致很多ASP的书都留一句“相关内容请参考VB的相关教材....”更糟糕的是,相当多的ASP教程混合了Javascript,VBscript等等脚本语言,搞的初学者。 我认为比较好的方法是找一些比较经典的例子,每个例子比较集中一种编程思想而设计的。 Session:这个存储跟客户端会话过程的数据,默认20分钟失效 代码逻辑混乱,难于管理:由于ASP是脚本语言混合html编程,所以你很难看清代码的逻辑关系,并且随着程序的复杂性增加,使得代码的管理十分困难,甚至超出一个程序员所能达到的管理能力,从而造成出错或这样那样的问题。 交流是必要的,不管是生活还是学习我们都要试着去交流,通过交流我们可以学到很多我们自己本身所没有的知识,可以分享别人的经验甚至经历。 在平时的学习过程中要注意现学现用,注重运用,在掌握了一定的基础知识后,我们可以尝试做一些网页,也许在开始的时候我们可能会遇到很多问题,比如说如何很好的构建基本框架。
页:
[1]