国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
[代碼]在WEB環(huán)境下打印報表的crystal的解決方案
在WEB環(huán)境下打印報表的crystal的解決方案
2008-05-12 00:09:19     我來說兩句 
收藏    我要投稿    [字體: ]

<%@ LANGUAGE="VBSCRIPT" %>
<%
’ = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = 
’ 該實例直接使用ASP編寫報表打印程序
’ 從ADO Recordset直接生成報表
’ = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = 

’ 概念:
’ 
’ 這個應用被設計成演示怎樣從ADO Recordset生成報表。我們首先建立ADO Connection和
’ Recordset對象,然后用SQL語句從數(shù)據(jù)庫中生成一個記錄集。然后我們建立一個Crystal 
’ Reports對象,并把這個這個對象指向ADO recordset。最后我們將Crystal Reports
’ Smart Viewer送到客戶端顯示這個報表。

’ 第一步:建立ADO Connection and Recordset

’ 一個ADO的數(shù)據(jù)庫連接就是通過你已經存在的ODBC數(shù)據(jù)源(DSN)從象ASP這樣的應用中來訪問
’ 數(shù)據(jù)的連接。為了達到這個例子的目的,我們將使用到用一個叫做"Xtreme Sample Data"的
’ 連到access(小型網站之最愛)數(shù)據(jù)庫Xtreme.mdb系統(tǒng)DSN

’ 建立ADO數(shù)據(jù)庫連接:

Set oConn = Server.CreateObject("ADODB.Connection")

’這里建立叫做"oConn"的ADO connection,我們將用這個ADO connection對象連接到上述的DSN 

’用 ADO connection 必須先要打開它:

oConn.Open("Xtreme Sample Database")

’這里打開我們的ODBC的數(shù)據(jù)源,這個數(shù)據(jù)源指向access(小型網站之最愛)數(shù)據(jù)庫Xtreme.mdb

’現(xiàn)在我們必須建立一個RecordSet對象:

set session("oRs") = Server.CreateObject("ADODB.Recordset")

’在上面我們建立了一個session("oRs"). 這個session中存放一個RecordSet對象
’將要包含用SQL語句返回的數(shù)據(jù)

’定義和生成 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 
’載入和卸載的系統(tǒng)開銷。在一個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" 循環(huán)被用來將當前文件從虛擬路徑(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對象時出現(xiàn)的任何錯誤,我們正明確的捕獲任何
’錯誤如果視圖超過許可協(xié)議規(guī)定的最大并發(fā)用戶數(shù)。

’注意,我們并不只建立一次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上執(zhí)行的, 所以任何錯誤信息都將被顯示在服務端,如果在服務端報告出錯了,
’ 打印引擎將停止運作,你的應用將被“掛起”
’2. rptserver.asp 已經有一些錯誤處理邏輯在里面了,可以捕獲任何非致命錯誤,并顯示在客戶端。

’**重要** 即使我們禁止了服務端引擎的錯誤處理,但是致命錯誤還是會在Web Server服務端被捕獲,并
’顯示出錯誤提示對話框。所以我們建議,你在"World Wide Web Publishing" service (IIS service)設置
’"Allow Service to Interact with Desktop"選項。這樣如果你的ASP應用死了,你將能看到錯誤提示。

’======================================================================================
’======================================================================================

’現(xiàn)在我們必須告訴report在ADO recordset中的數(shù)據(jù)

’report建立在動態(tài)的ADO recordset的基礎,我們必須基于我們建立的recordset來建立report
’然后在運行時我們告訴report數(shù)據(jù)在ADO Record set中。report通常依靠數(shù)據(jù)庫結構文件
’(ADORecordset.ttx)建立,這個.ttx文件包含recordset的結構,不包含實際數(shù)據(jù)。

’一個Crystal Report完全依賴將要使用的Report的數(shù)據(jù)結構,因此在運行時你的數(shù)據(jù)庫結構文件(ttx file)
’或真實反應ADO recordset包含的數(shù)據(jù)的DSN是十分重要的

session("oRpt").DiscardSavedData
set Database = session("oRpt").Database
’實例化report用到的數(shù)據(jù)庫

set Tables = Database.Tables
’實例化數(shù)據(jù)庫對象中的表

set Table1 = Tables.Item(1)
’實例化第一張表,在這個實例中這個表對象指向ADORecordset.ttx文件

Table1.SetPrivateData 3, session("oRs") 

’"SetPrivateData"告訴report現(xiàn)在數(shù)據(jù)源是 recordset,現(xiàn)在report將要顯示的數(shù)據(jù)包含在session("oRs")中
’如果你的report中包含子報表將提供不同的recordset來指向子報表的數(shù)據(jù)

本站僅提供存儲服務,所有內容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
提高ADO性能的優(yōu)秀經驗(轉)
ASP教程:第十五篇 常用的ASP ActiveX組件
ASP技術文章-訪問數(shù)據(jù)源
[轉]ASP:ADO數(shù)據(jù)庫訪問
在ASP中優(yōu)化數(shù)據(jù)庫處理
ASP基礎教程:ADO存取數(shù)據(jù)庫時如何分頁顯示
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服