亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

WEB環境下打印報表的crystal的解決方案

2019-11-18 20:28:09
字體:
來源:轉載
供稿:網友
<%@ 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
%>


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
神马久久桃色视频| 亚洲最大的免费| 亚洲女在线观看| 国产精品久久久久av免费| 久久久久北条麻妃免费看| 亚洲性线免费观看视频成熟| 欧美成人一区在线| 亚洲区中文字幕| 欧美国产中文字幕| 国产精品久久久久久久久免费看| 日韩在线免费视频观看| 国产女人18毛片水18精品| 清纯唯美日韩制服另类| 国产成人精品视| 色www亚洲国产张柏芝| 狠狠躁夜夜躁人人爽超碰91| 欧美大尺度在线观看| 亚洲精品www久久久| 国产成人福利夜色影视| 中文字幕欧美精品在线| 欧美电影在线播放| 欧美日韩黄色大片| 国产精品一区专区欧美日韩| 欧美黑人一区二区三区| 2019中文字幕在线观看| 国产亚洲在线播放| 亚洲一区二区国产| 91久久夜色精品国产网站| 欧美成人剧情片在线观看| 亚洲色图美腿丝袜| 亚洲r级在线观看| 精品福利樱桃av导航| 成人免费视频在线观看超级碰| 在线观看久久av| 欧美激情国产日韩精品一区18| 日韩免费观看网站| 亚洲精品视频久久| 亚洲国产欧美久久| 亚洲国产欧美一区二区三区久久| 久久偷看各类女兵18女厕嘘嘘| 亚洲一区亚洲二区亚洲三区| 日韩高清电影好看的电视剧电影| 欧美丝袜第一区| 亚洲欧美国产日韩天堂区| 久久久精品国产一区二区| 成人自拍性视频| 国产日韩亚洲欧美| 久久中文字幕视频| 精品丝袜一区二区三区| 亚洲丝袜av一区| 美乳少妇欧美精品| 欧美激情在线一区| 欧美一级在线亚洲天堂| 日韩av电影国产| 亚洲大胆人体视频| 91精品视频专区| 日本高清久久天堂| 日韩美女激情视频| 久久夜色精品国产亚洲aⅴ| 日韩最新中文字幕电影免费看| 欧美性xxxx在线播放| 欧美大尺度电影在线观看| 日韩中文在线不卡| 欧美午夜精品在线| 久久久久国产精品免费网站| 日本一本a高清免费不卡| 国产精品美女久久久久久免费| 亚洲成人中文字幕| 91精品国产91久久久久久| 亚洲国产精品久久久| 麻豆一区二区在线观看| 国产亚洲欧美日韩一区二区| 国产精品第一页在线| 国产精品第一视频| 日韩精品999| 精品日本美女福利在线观看| 亚洲欧美第一页| 亚洲精品久久久久| 色偷偷av一区二区三区| 久久精品亚洲94久久精品| 欧美激情久久久久久| 成人激情视频小说免费下载| 成人黄色在线播放| 亚洲mm色国产网站| 8x拔播拔播x8国产精品| 亚洲一区二区三区四区视频| 国产成人在线一区| 992tv成人免费影院| 中文字幕精品网| 色琪琪综合男人的天堂aⅴ视频| 午夜免费日韩视频| 欧美孕妇毛茸茸xxxx| 精品日韩美女的视频高清| 国产精品一区二区av影院萌芽| 夜色77av精品影院| 亚洲xxx大片| 亚洲人成电影网站| 国产精品91在线| 亚洲男人天堂网站| 国产精品成人品| 97在线免费视频| 亚洲一区www| 美女福利视频一区| 日韩hd视频在线观看| 在线日韩日本国产亚洲| 成人黄色av免费在线观看| 福利微拍一区二区| 日本aⅴ大伊香蕉精品视频| 69av在线视频| 国产精品视频一区二区高潮| 国内精品国产三级国产在线专| 欧美黑人xxxⅹ高潮交| 国产视频丨精品|在线观看| 精品久久香蕉国产线看观看gif| 欧美精品在线第一页| 亚洲欧美日韩中文视频| 色综合亚洲精品激情狠狠| 国产成人在线一区二区| 欧美有码在线视频| 亚洲成人av中文字幕| 亚洲欧美一区二区三区情侣bbw| 久久久av亚洲男天堂| 久久精品中文字幕| 91视频国产一区| 国产精品久久久亚洲| 91国产精品视频在线| 国产成人av在线播放| www.亚洲人.com| 奇门遁甲1982国语版免费观看高清| 久久精品视频一| 欧美激情成人在线视频| 亚洲综合在线中文字幕| 97香蕉超级碰碰久久免费的优势| 欧美极品少妇xxxxx| 91九色国产视频| 伊人av综合网| 成人在线精品视频| 狠狠躁天天躁日日躁欧美| 91热福利电影| 亚洲免费影视第一页| 亚洲精品免费在线视频| 国产有码一区二区| 欧美性xxxx极品hd欧美风情| 亚洲福利精品在线| 精品国产电影一区| 久久久免费av| 欧美—级a级欧美特级ar全黄| 久久人人看视频| 国产精品久久久久久av下载红粉| 欧美成人一二三| 精品精品国产国产自在线| 中文字幕精品av| 国产精品中文在线| 欧美激情精品久久久久久免费印度| 成人春色激情网| 色综合天天狠天天透天天伊人| 欧美丰满少妇xxxxx| 色狠狠av一区二区三区香蕉蜜桃| 日韩av电影手机在线| 米奇精品一区二区三区在线观看| 91老司机在线| 日韩在线视频播放| 国产精品久久久久久久av大片| 国内精品伊人久久|