zoukankan      html  css  js  c++  java
  • Asp组件中级入门与精通系列之八

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

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

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

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

    代码如下:

    Option Explicit

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

    '作者:龙卷风

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

    '时间: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>

    申明

    非源创博文中的内容均收集自网上,若有侵权之处,请及时联络,我会在第一时间内删除.再次说声抱歉!!!

    博文欢迎转载,但请给出原文连接。

  • 相关阅读:
    管理中的“变”与“不变”
    软件项目需求分析与管理的十大疑问
    小商家也要有O2O思维
    互联网时代CIO生存法则
    浅谈项目经理与部门经理之间的关系
    沃尔玛:“最后一公里”的致命伤
    大数据分析案例:永远别忘记天气这个变量
    IT项目中的6类知识转移
    C
    linu入门
  • 原文地址:https://www.cnblogs.com/Athrun/p/1127670.html
Copyright © 2011-2022 走看看