|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
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是怎么工作的。 |
|