这段时间一直比较忙,呵呵
今天我们来看一下一个完整的数据封装的、带分页的例子
打开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>