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>

posted @ 2008-03-28 14:47  Athrun  阅读(342)  评论(0编辑  收藏  举报