Asp组件中级入门与精通系列之八

原创 2005年01月01日 21:48:00

这段时间一直比较忙,呵呵

今天我们来看一下一个完整的数据封装的、带分页的例子

<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

打开vb6,新建Activex Dll工程。工程名修改为fCom,类名修改为fZ8
引用“Microsoft Active Server Pages Object””Microsoft Activex Data Object 2.7 Library”对象库。

 

创建两个组件事件:OnStartPage以及OnEndPage
在事件OnStartPage中创建类ScriptingContent的一个引用。
实例化类ScriptingContent

 

代码如下:

Option Explicit

 

 

'**************************************************

'作者:龙卷风

'功能:简单的可以定制的,完全封装的组件

'时间:<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />2005-01-01

'**************************************************

 

'对象的声明

Dim MyResponse As Response

Dim MyRequest As Request

Dim myApplication As Application

Dim myServer As Server

Dim mySession As Session

 

'私有变量

Private mPageSize As Long

Private mstrSql As String

 

    '当组件被创建的时候会触发这个事件

Public Sub OnStartPage(myScriptingContent As ScriptingContext)

     '进行对象的实例化

     Set MyResponse = myScriptingContent.Response

     Set MyRequest = myScriptingContent.Request

     Set myServer = myScriptingContent.Server

     Set myApplication = myScriptingContent.Application

     Set mySession = myScriptingContent.Session

End Sub

 

    '当组件被销毁的时候触发这个事件

Public Sub OnEndPage()

     '销毁对象

     Set MyResponse = Nothing

     Set MyRequest = Nothing

     Set myServer = Nothing

     Set myApplication = Nothing

     Set mySession = Nothing

End Sub

 

显示Table

Public Function ShowTable()

   

    Dim conn As New ADODB.Connection

    Dim rs As New ADODB.Recordset

   

    Dim i As Integer

    Dim j As Integer

    Dim intPage As Integer

    Dim intPageCount As Integer

    Dim strScriptName As String

    Dim intPos As Integer

    Dim intFieldCount As Integer

   

    '得到路径

    strScriptName = MyRequest.ServerVariables("Script_Name")

    intPos = InStrRev(strScriptName, "/")

    If intPos <> 0 Then

        strScriptName = Mid(strScriptName, intPos + 1)

    End If

   

    If IsEmpty(MyRequest("page")) Then

        intPage = 1

    Else

        intPage = CInt(MyRequest("page"))

    End If

      

    On Error GoTo err

   

    conn.Open "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=Northwind;Data Source=localhost"

       

    rs.Open mstrSql, conn, adOpenStatic, adLockReadOnly

   

    '得到记录数

    intFieldCount = rs.Fields.Count

   

    '输出表格

    MyResponse.Write "<table border=1 cellspacing=0 cellpadding=2>"

   

    If Not rs.EOF Then

        rs.PageSize = mPageSize

        rs.AbsolutePage = intPage

       

        '得到页数

        intPageCount = rs.PageCount

       

        '处理分页

        If intPage < 1 Then intPage = 1

        If intPage > intPageCount Then intPage = intPageCount

       

       

        '输出表头

        MyResponse.Write "<tr>"

        For i = 0 To intFieldCount - 1

            MyResponse.Write "<th>" & rs(i).Name & "</th>"

        Next

        MyResponse.Write "</tr>"

           

        '输出内容

        For i = 1 To mPageSize

            If rs.EOF Then

                 Exit For

            End If

            MyResponse.Write "<tr>"

                For j = 0 To intFieldCount - 1

                    MyResponse.Write "<td>" & rs.Fields(j).Value & "</td>"

                Next

            MyResponse.Write "</tr>"

            rs.MoveNext

        Next

       

        '输出分页

        MyResponse.Write "<tr>"

        If intPage <> 1 Then

        MyResponse.Write "<a href=" & strScriptName & "?page=1>[第一页]</a>"

        MyResponse.Write "<a href=" & strScriptName & "?page=" & intPage - 1 & " >[上一页]</a>"

        End If

       

        If intPage <> intPageCount Then

        MyResponse.Write "<a href=" & strScriptName & "?page=" & intPage + 1 & ">[下一页]</a>"

        MyResponse.Write "<a href=" & strScriptName & "?page=" & intPageCount & ">[最后一页]</a>"

        End If

       

        MyResponse.Write "页次:<FONT COLOR='Red'>" & intPage & "/ " & intPageCount & "</FONT>"

        MyResponse.Write "</tr>"

       

    End If

   

    MyResponse.Write "</table>"

       

       

    '释放资源

    If Not rs Is Nothing Then

        If rs.State = 1 Then

            rs.Close

        End If

        Set rs = Nothing

    End If

   

    If Not conn Is Nothing Then

        If conn.State = 1 Then

            conn.Close

        End If

        Set conn = Nothing

    End If

 

    Exit Function

 

err:

    MyResponse.Write err.Number & err.Description

    If Not rs Is Nothing Then

        If rs.State = 1 Then

            rs.Close

        End If

        Set rs = Nothing

    End If

   

    If Not conn Is Nothing Then

        If conn.State = 1 Then

            conn.Close

        End If

        Set conn = Nothing

    End If

End Function

 

定义属性

Public Property Get ShowPageSize() As Variant

ShowPageSize = mPageSize

End Property

 

Public Property Let ShowPageSize(ByVal vNewValue As Variant)

mPageSize = vNewValue

End Property

 

Public Property Get strSQL() As Variant

strSQL = mstrSql

End Property

 

Public Property Let strSQL(ByVal vNewValue As Variant)

mstrSql = vNewValue

End Property

 

编译成Dll文件,系统自动会注册。

否则就手工注册 Regsvr32 f:/test/fcom.dll

 

测试

打开visual interdev6.0,生成一个fz8.asp文件

<%@ Language=VBScript %>

<HTML>

<BODY>

<%

dim obj

set obj=server.CreateObject("fcom.fz8")

每页显示的记录数

obj.ShowPageSize=10

显示的sql语句

obj.strSQL="select customerid,companyname,contactname,contacttitle,address from customers"

obj.ShowTable()

%>

</BODY>

</HTML>

 

配置好虚拟目录,在ie中执行fc8.asp文件,可以看到
http://blog.csdn.net/online/gallery/image/42331.aspx

Windows 2008从入门到精通系列教程(一)

Windows Server 2008从入门到精通系列教程(一)             自我庆祝一下,荣幸的获得了微软最有价值专家,感谢51CTO这个平台,感谢各位朋友对我的支持和厚爱。以后我...
  • pmpgao
  • pmpgao
  • 2014年11月12日 15:54
  • 638

ActiveMQ从入门到精通(三)

这是ActiveMQ系列的最后一篇文章,主要是关于ActiveMQ集群,这里采用的方式是:Zookeeper+LevelDB+ActiveMQ。前面2篇博客地址如下:《ActiveMQ从入门到精通(一...
  • jek123456
  • jek123456
  • 2017年05月19日 09:36
  • 590

nginx从入门到精通And原理

本文是多篇文章整理在一起,因为本人比较懒。。。so整理了下各位大牛的文章便于我自己以及后来者一步到位的学习。 文章中的一些内容转载至: http://geek.csdn.net/news/detai...
  • woshishuiaaaD
  • woshishuiaaaD
  • 2016年12月08日 10:36
  • 708

服务器硬件工程师从入门到精通系列课程

前言:     《服务器硬件工程师从入门到精通》系列课程,是我目前正在录制的一套有关服务器硬件技术方面的课程,整套课程初步规划分为十篇,分别是基础篇、RAID篇、HP篇、IBM篇、DELL篇、联...
  • pjj007
  • pjj007
  • 2017年12月17日 16:11
  • 145

《linux从入门到精通》刘忆智 (我再次说, 这类书,入门是可以的, 精通则完全是忽悠骗人的)

在学校的时候, 几乎没怎么跟linux打过交道, 这不, 工作了, 谁都要摸摸linux啊。            有时候, 买一些书, 可以节省自己很多时间, 我也知道像《linux从入门到精通》这...
  • stpeace
  • stpeace
  • 2015年05月13日 23:17
  • 5366

JMeter从入门到精通

《JMeter从入门到精通》之一——开始你的第一个JMeter脚本 JMeter是一款在国外非常流行和受欢迎的开源性能测试工具,像LoadRunner一样,它也提供了一个利用本地Proxy Serv...
  • yangfanend
  • yangfanend
  • 2017年02月15日 16:34
  • 1817

sqlserver从入门到精通

记录的都是自己平时不知道的: 一 基础 1 根据已有表
  • lijiaojiao123123
  • lijiaojiao123123
  • 2014年09月03日 09:13
  • 287

MySql从入门到精通

一:数据库相关 创建数据库:create database databaseName create database CRM ----创建一个名为CRM的数据库。 查看数据库:sho...
  • JustDoC
  • JustDoC
  • 2017年02月22日 10:32
  • 1090

SQL Server从入门到精通pdf

下载地址:网盘下载 内容介绍 编辑 《SQL Server 从入门到精通》从初学者的角度出发,通过通俗易懂的语言、丰富多彩的实例,详细地介绍了SQLServer2...
  • cf406061841
  • cf406061841
  • 2017年06月03日 23:20
  • 1139

Caffe从入门到精通01

这篇博客主要对刚在windows环境下接触caffe的新手可能遇到的疑问提出了一些解答,都是一些我自己在实践过程中遇到的一些问题和解决方案,希望对大家有帮助,抛砖引玉。...
  • TMAC2016
  • TMAC2016
  • 2017年10月30日 12:01
  • 86
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Asp组件中级入门与精通系列之八
举报原因:
原因补充:

(最多只允许输入30个字)