web|列印|資料|統計 摘 要:本文闡述一種利用ASP實現Web資料統計、報表的基本思路和實現方法,同時提供一種巧妙調用Word列印報表的解決方案。
關鍵詞: ASP,資料統計,報表,列印,Word
1、 引言
隨著Internet的飛速發展,基於Web開發的業務應用系統越來越多,如辦公自動化、電子商務和管理資訊系統(MIS)等。這些Web業務應用系統經常涉及到資料的統計、報表和列印。ASP在實施動態互動和產生動態網頁面方面具有很大的優勢,但在處理複雜資料統計、報表和列印時卻遇到不小的麻煩。本文闡述一種利用ASP實現Web資料統計、報表的基本思路和實現方法,同時提供一種巧妙調用Word列印報表的解決方案。
2、 應用執行個體
假設有一家公司利用網路MIS系統對公司員工進行管理,必然會涉及到各部門的員工統計。為了簡單起見,假設最終的統計報表如下:
公司員工統計表
部門
合計
員工姓名
市場部
2
張三
李四
研發部
3
王五
趙六
劉七
員工合計
5
與傳統單機MIS系統相比,在網路MIS系統中使用ASP實現以上資料統計、報表和列印會遇到以下問題:
(1) 資料統計時需要按部門進行分類統計,同時要記下各部門員工的具體名單。
(2) 報表產生時需按具體要求動態繪製幾行幾列表格,同時在適當的地方保持空白。
(3) 表格列印可以簡單地按網頁列印,但效果不好,而且不容易控制。
3、 實現方法簡述
基於Web的業務應用一般採用三層結構,用戶端是普通的Web瀏覽器,中間商務邏輯應用程式層存放於Web伺服器上,由Web伺服器上的資料庫介面訪問後台資料庫。利用ASP實現Web資料統計、報表和列印的過程如圖所示:
瀏覽器
HTML
VBScript
統計
報表
Word
對象
Web伺服器
商務邏輯實現
資料庫
提供者
數
據
庫
Word本地列印
(1) 用戶端向Web伺服器發送資料統計請求。
(2) Web伺服器執行SQL語句,從後台資料庫取得統計資料,在頁面上動態產生報表。
(3) 在用戶端運行指令碼,使用VBScript指令碼函數CreateObject在本地建立Word的Document對象的執行個體,也就是在用戶端建立Word文檔,設定表格屬性,然後將頁面上的報表資料填入本地Word表格,最後儲存文檔,執行本地Word列印。
4、 實現過程分析
(1)資料庫連接
首先建立資料庫(data.mdb),簡單的員工資料表(personnel)結構如下:
personnel:department,文本;name,文本;
然後建立一個ODBC資料來源(DSN),利用DSN指向ODBC資料庫。
(2)程式碼分析(在此只分析統計報表程式tongji.asp)
<%
sql = "Select department,count(department) From personnel group by department" //將記錄按部門分類統計
Set Cnn = Server.CreateObject("ADODB.Connection") //串連資料庫
Cnn.Open "data"
Set Rs = Server.CreateObject("ADODB.Recordset")
Rs.CursorType = 3
Rs.LockType = 3
Rs.Open sql, Cnn
If Rs.EOF Then //如果沒有記錄就結束
Response.End
End If
%>
<html>
//以下顯示表格標題和輸出表頭
<p align="center"><b><font size="4">公司員工統計表</font></b></p>
<div align="center">
<table id="data" border="1" width="606" height="53" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111"> //注意:此處標明表格的id為data
<tr>
<td width="93" height="24">
<p align="center"><font size="2">部門</font></td>
<td width="78" height="24">
<p align="center"><font size="2">合計</font></td>
<td width="413" height="24">
<p align="center"><font size="2">員工姓名</font></td>
</tr>
<%
hj=0 //設定變數,總人數合計初始值為0
//以下While迴圈按部門依次完成統計和報表
while (not rs.eof)
departmenttmp=rs("department") //設定臨時變數,儲存當前部門名稱
sqlstr="select * from personnel where department='"&departmenttmp&"'" //找出當前部門的所有員工
Set conn = Server.CreateObject("ADODB.Connection") //再次串連資料庫
conn.Open "data"
Set rss = Server.CreateObject("ADODB.Recordset")
rss.CursorType = 3
rss.LockType = 3
rss.Open sqlstr, conn
number=0 //設定變數,當前部門人數合計初始值為0
//以下While迴圈計算出當前部門人數合計
while(not rss.eof)
rss.movenext
number=number+1
wend
hj=hj+number //總人數合計為各部門人數之和
rss.movefirst
flag=0 //設定變數,flag用來判斷當前部門是否首次出現,初始值為0
//以下While迴圈輸出當前部門統計資料和員工名單
while(not rss.eof)%>
<tr>