| 网站首页 | 资讯 | 影音 | 图片 | 论坛 | 模拟驾考 | 免费取名算命 | 瓷都工具 | 留言本 | 域名 | 瓷都商城 | 汇款 | 
|
资讯首页
|
瓷都德化
|
站内新闻
|
影视剧情
|
汽车世界
|
网络文摘
|
周易八卦
|
教程技巧
|
房产信息
|
您现在的位置: 瓷都热线|诚信中国:“一就是一”(1941.CN) >> 资讯 >> 教程技巧0 >> 网络编程 >> 正文 登录 注册
专 题 栏 目
  • 四川汶川8.0级强震
  • 机动车驾驶员考试资料
  • 高考试题及答案
  • 最 新 热 门
     德化又添3个地理标志证明
     [组图]期待!德化龙门湖
     [组图]德化:“绿色动脉
     [图文]德化:造莲花美景
     [图文]德化:编织小网格
     [图文]德化龙门滩龙门湖
     [图文]福建德化县美湖镇
     德化白瓷艺术展亮相深圳
     [组图]“世界瓷都·润养
     德化:前妻婚内举债近8万
    最 新 推 荐
     [组图]期待!德化龙门湖
     [组图]德化:“绿色动脉
     [图文]德化龙门滩龙门湖
     [图文]福建德化县美湖镇
     [组图]德化各种花卉相继
     [组图]福建德化九仙山迎
     [图文]德化石牛山惊现双
     [组图]千年古瓷都德化的
     [组图]警方连捣5传销窝点
     [组图]福建民俗博物馆办
    相 关 文 章
    没有相关资讯
    巧用ASP实现Web数据统计、报表和打印         ★★★
    巧用ASP实现Web数据统计、报表和打印
    作者:不详 文章来源:不详 更新时间:2003-8-2 8:07:45
    【声明:转载此信息在于传递更多信息,其内容表达的观点并不代表本站立场,由这些信息所产生的一切后果本站不负任何责任。如果您对本信息有什么意见,欢迎和本站联系,谢谢!】http://CiDu.Net

    摘 要:本文阐述一种利用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>

    <%if (flag=0) then%>

    //如果flag为0,表示该部门是首次出现,表格此处就应该输出部门名称,部门员工合计人数

    <td width="93" height="24"><p align="center"><font size=2><%=departmenttmp%></font></td>

    <td width="78" height="24"><p align="center"><font size=2><%=number%></font></td>

    <%else%>

    //如果flag不为0,表示该部门不是首次出现,表格此处就应该输出空白

    <td width="93" height="24"><p align="center">&nbsp;</td>

    <td width="78" height="24"><p align="center">&nbsp;</td>

    <%end if%>

    //无论该部门是否首次出现,此处输出员工姓名

    <td width="413" height="24"><p align="center"><font size=2><%=rss("name")%></font></td>

    <%rss.movenext //当前部门员工记录指针rss指向下一个员工记录

    flag=flag+1 //flag加1

    wend%>

    </tr>

    <%rs.movenext //部门记录指针rs指向下一个部门记录

    wend%>

    <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><%=hj%></font></td>

    <td width="413" height="24"><p align="center"><font size=2>&nbsp;</font></td>

    </tr>

    </table>

    </div>

    <input type=button onclick="vbscript:buildDoc" value="打印"> //点击“打印”按钮,调用vbscript函数buildDoc生成本地Word文档,实现本地打印。

    </html>

    //以下VBScript代码实现buildDoc函数

    <script language="vbscript">

    Sub buildDoc

    set table = document.all.data //把html文档中的表格data的结构和数据赋值给table

    row = table.rows.length //row为table的行数

    column = table.rows(1).cells.length //colnum为table的列数

    Set objWordDoc = CreateObject("Word.Document") //创建一个Word.Document的对象

    Dim theArray(10,10000) //定义数组变量,存放表格中的数据,10是虚拟列数,10000是虚拟行数

    //以下两层for循环将html文档的表格中的纯文本数据赋值给数组

    for i=0 to row-1

    for j=0 to column-1

    theArray(j+1,i+1) = table.rows(i).cells(j).innerTEXT

    next

    next



    objWordDoc.Application.ActiveDocument.Paragraphs.Add.Range.InsertBefore("公司员工统计表") //显示表格标题

    objWordDoc.Application.ActiveDocument.Paragraphs.Add.Range.InsertBefore("") //输出标题后回车换行



    Set rngPara = objWordDoc.Application.ActiveDocument.Paragraphs(1).Range

    //以下With代码段设置标题属性

    With rngPara

    .Bold = True //将标题设为粗体

    .ParagraphFormat.Alignment = 1 //将标题居中

    .Font.Name = "Arial" //设定标题字体

    .Font.Size = 12 //设定标题字体大小

    End With



    Set rngCurrent = objWordDoc.Application.ActiveDocument.Paragraphs(3).Range

    Set tabCurrent = ObjWordDoc.Application.ActiveDocument.Tables.Add(rngCurrent,row,column)

    //以下for循环输出表头

    for i = 1 to column

    objWordDoc.Application.ActiveDocument.Tables(1).Rows(1).Cells(i).Range.InsertAfter theArray(i,1)

    objWordDoc.Application.ActiveDocument.Tables(1).Rows(1).Cells(i).Range.ParagraphFormat.alignment=1

    next

    //以下两层for循环输出表格实际内容

    For i =1 to column

    For j = 2 to row

    objWordDoc.Application.ActiveDocument.Tables(1).Rows(j).Cells(i).Range.InsertAfter theArray(i,j)

    objWordDoc.Application.ActiveDocument.Tables(1).Rows(j).Cells(i).Range.ParagraphFormat.alignment=1

    Next

    Next

    objWordDoc.Application.ActiveDocument.SaveAs

    End Sub

    </script>



    5、 结束语

    以上程序在Windows2000及IIS5.0下运行通过,数据库采用Access2000。执行打印之前,需要将浏览器的安全级别设为低,或在中级安全级别下将ActiveX控件设为启用。该方法的优点在于实现统计报表十分简单,调用Word打印非常方便,并且可以按用户要求对表格属性进行设置;不足之处是需要调节浏览器的安全设置,且不支持图片和特殊字体的打印,同时客户端必须安装Microsoft Word软件。



    参考文献:

    [1]《Active Server Page & WEB数据库》,王国荣著,人民邮电出版社,2000。

    [2] MSDN Library Visual Basic文档



    参考网址:

    动感教育网 www.activeedu.net


    声明:以上信息资料大都是网上搜集而来,版权归作者,如有版权问题请留言告知我将马上改正。
    文中所提到的各种观点只是原文观点,各种说法未经一一确认。并不代表本站认可此观点!!
    资讯录入:ahui    责任编辑:ahui 
  • 上一篇资讯:

  • 下一篇资讯:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    点击数:570
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
        没有任何评论