[转载]计算机启动过程详解- -| 回首页 | 2004年索引 | - -[转载]一个时代的终结! Winamp宣告“脑死亡”

[原创]我写的一个通用分页类- -

                                      

很早就写的,现在总结出来权当抛砖引玉啦:)
请大家说说算法上如何优化



<%
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''
''      PageDiv.asp
''
''      Version: 1.0      Last-Modified: 2004-10-28 10:16
''      Copyright: Xinsoft@newX.org ( CTO of UnionIT.org )
''
''      分页类(通用)
''
''
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
%>
<%
Class ListDiv

Public Flag                  ' as Integer

Private RecordSet      ' as ADODB.RecordSet
Private Connection      ' as ADODB.Connection

Public DivNum      ' as Integer
Public PageN      ' as Integer
Public CurN            ' as Integer
Public CurPage            ' as Integer
Public IdxColType      ' as String            ' -- char
                                                      ' -- int
Public IndexSQL            ' as String
Public ListSQLB            ' as String
Public ListSQLE            ' as String
Public IdxStr            ' as String
Public RecN                  ' as Integer

Public RowA,RowN      ' A pair of Array

Public LinkStrB            ' as String
Public LinkStrE            ' as String
Public LinkStyle      ' as String

Property Let Conn(objConn)
      Connection.ConnectionString=objConn.ConnectionString
End Property
Property Get Conn()
      Conn=Connection.ConnectionString
End Property

Private Sub Class_Initialize
      Flag=1
      DivNum=10
      PageN=0
      CurN=0
      CurPage=1
      IdxColType="char"
      LinkStyle="default"
      Set RecordSet=Server.CreateObject("ADODB.RecordSet")
      Set Connection=Server.CreateObject("ADODB.Connection")
End Sub
Private Sub Class_Terminate
      Set RecordSet=Nothing
      Set Connection=Nothing
End Sub

Public Sub Exec()

      If Not IsNumeric(CurPage) Then CurPage=1
      If CurPage<1 Then CurPage=1
     
      '' 获取索引字段值列表
      Dim RecA,i,N
      Connection.Open
      RecordSet.Open IndexSQL,Connection,1,1
      RecN=RecordSet.RecordCount
      If RecN>0 Then
            RecA=RecordSet.GetRows
      Else
            Flag=0
            Exit sub
      End if
      RecordSet.Close
     
      '' 计算页数
      PageN=Int(RecN / DivNum)+1
      If DivNum*(PageN-1)=RecN Then
            PageN=PageN-1
      End if
     
      If CurPage>PageN Then CurPage=PageN
      If PageN>1 Then
            If CurPage=PageN Then
                  CurN=RecN-(CurPage-1)*DivNum
            Else
                  CurN=DivNum
            End if
      Else
            CurN=RecN
      End If
     
      '' 索引数组
      Dim IdxA
      ReDim IdxA(CurN)
      For i=0 To CurN-1
            IdxA(i)=RecA(0,(CurPage-1)*DivNum+i)
      Next
     
      Dim DotChar
      Select Case LCase(IdxColType)
            Case "int"  : DotChar=""
            Case "char" : DotChar="'"
            Case Else      : DotChar="'"
      End select
     
      IdxStr=""
      If CurN>0 Then
      IdxStr=DotChar& IdxA(0) &DotChar
      If CurN>1 Then
            For i=1 To CurN-1
                  IdxStr=IdxStr&","&DotChar&IdxA(i)&DotChar
            Next
      End if
      End If
     
      '' 获取实际列表
      RecordSet.Open ListSQLB &IdxStr& ListSQLE,Connection,1,1
      RowN=RecordSet.RecordCount
      If RowN>0 Then
            RowA=RecordSet.GetRows
      Else
            Flag=0
            Exit sub
      End if
      RecordSet.Close
     
     
      Connection.Close
End Sub

Public Function GetPageDivBar()
      Dim Str
      Dim i
      Str=""
     
      If CurPage>1 Then
            Str=Str&"<a href="""& LinkStrB & CStr(CurPage-1) & LinkStrE &""">上一页</a>"
      Else
            Str=Str&"上一页"
      End If
     
      Str=Str&"  第"&CurPage&"页/共"&PageN&"页,每页"&DivNum&"条记录,共"&RecN&"条记录  "
     
      If CurPage<PageN Then
            Str=Str & "<a href="""&LinkStrB&CStr(CurPage+1)&LinkStrE&""">下一页</a>"
      Else
            Str=Str & "下一页"
      End if
     
GetPageDivBar=Str
End Function

End Class
%>



这是调用的例子:

<%
     
      Dim objListDiv
      Set objListDiv=New ListDiv
      With objListDiv
            .Conn=Conn
            .IdxColType="int"
            .IndexSQL="Select PeriodID From Xiworld Where Flag=1 Order by PeriodID Desc"
            .ListSQLB="Select PeriodID,YearVal,YearPid,DocURL From Xiworld Where PeriodID in ("
            .ListSQLE=") Order by PeriodID Desc"
            .DivNum=15
            .CurPage=CurPage
           
            .LinkStrB="list.asp?page="
            .LinkStrE=""
      End With
      objListDiv.Exec
%>


- 作者: Xinsoft 2004年11月18日, 星期四 10:25 加入博采

Trackback

你可以使用这个链接引用该篇文章 http://publishblog.blogchina.com/blog/tb.b?diaryID=249845

回复

评论内容: