1
<%
2
Class Page
3
Private CurrPage
4
Private PageN
5
Private UrlStr
6
Private TempStr
7
Private ErrInfo
8
Private IsErr
9
Private TotalRecord
10
Private TotalPage
11
Public PageRs
12
13
Private TempA(11)
14
Private TempB(8)
15
'------------------------------------------------------------
16
Private Sub Class_Initialize()
17
CurrPage=1'//默认显示当前页为第一页
18
PageN=10'//默认每页显示10条数据
19
UrlStr="#"
20
TempStr=""
21
ErrInfo="ErrInfo:"
22
IsErr=False
23
End Sub
24
Private Sub Class_Terminate()
25
If IsObject(PageRs) Then
26
PageRs.Close
27
Set PageRs=Nothing
28
End If
29
Erase TempA
30
Erase TempB
31
End Sub
32
'----------------------------------------------------------
33
'//获取当前页码
34
Public Property Let CurrentPage(Val)
35
CurrPage=Val
36
End Property
37
Public Property Get CurrentPage()
38
CurrentPage=CurrPage
39
End Property
40
'//获取每页显示条数
41
Public Property Let PageNum(Val)
42
PageN=Val
43
End Property
44
Public Property Get PageNum()
45
PageNum=PageN
46
End Property
47
'//获取URL
48
Public Property Let Url(Val)
49
UrlStr=Val
50
End Property
51
Public Property Get Url()
52
Url=UrlStr
53
End Property
54
'//获取模板
55
Public Property Let Temp(Val)
56
TempStr=Val
57
End Property
58
Public Property Get Temp()
59
Temp=TempStr
60
End Property
61
'------------------------------------------------------------
62
63
Public Sub Exec(Sql,ConnObj)
64
On Error Resume Next
65
Set PageRs=Server.CreateObject("ADODB.RecordSet")
66
PageRs.CursorLocation = 3 '使用客户端游标,可以使效率提高
67
PageRs.PageSize = PageN '定义分页记录集每页显示记录数
68
PageRs.Open Sql,ConnObj,0,1
69
If Err.Number<>0 Then
70
Err.Clear
71
PageRs.Close
72
Set PageRs=Nothing
73
ErrInfo=ErrInfo&"建立或打开记录集错误
"
74
IsErr=True
75
Response.Write ErrInfo
76
Response.End
77
End If
78
TotalRecord=PageRs.RecordCount'//如果为0呢?
79
If TotalRecord>=1 Then
80
'----------------------------------------------------------------------------开始
81
'//计算总页数,Ps,为什么不用PageRs.PageCount呢?
82
'If TotalRecord Mod PageN=0 Then
83
'TotalPage=PageRs.RecordCount\PageN
84
'Else
85
'TotalPage=PageRs.RecordCount\PageN
86
'TotalPage=Abs(Int(TotalPage))
87
'End If
88
TotalPage=PageRs.PageCount
89
'//处理当前接收页码,默认的为1,所以不是数字类型的都会为1
90
If IsNumeric(CurrPage) Then
91
CurrPage=CLNg(CurrPage)
92
If CurrPage<1 Then CurrPage=1
93
If CurrPage>TotalPage Then CurrPage=TotalPage
94
Else
95
'//Dim M:M="":IsNumeric(M)=True
96
CurrPage=1
97
End If
98
'---------------------------------------------------------------------------结束
99
Else
100
TotalPage=0
101
CurrPage=1
102
End If
103
'//
104
PageRs.AbsolutePage = CurrPage 'absolutepage:设置指针指向某页开头
105
PageRs.PageSize=PageN
106
End Sub
107
Private Sub Init()
108
'Private TempA(10)
109
TempA(1)="{N1}" '//首页
110
TempA(2)="{N2}"'//上一页
111
TempA(3)="{N3}"'//下一页
112
TempA(4)="{N4}"'//尾页
113
TempA(5)="{N5}"'//当前页码
114
TempA(6)="{N6}"'//页码总数
115
TempA(7)="{N7}"'//每页条数
116
TempA(8)="{N8}"'//文章总数
117
TempA(9)="{L}"'//循环标签开始
118
TempA(10)="{N}"'//循环内单标签:页码
119
TempA(11)="{L/}"'//循环标签结束
120
'Private TempB(8)
121
TempB(1)="首页"
122
TempB(2)="上一页"
123
TempB(3)="下一页"
124
TempB(4)="尾页"
125
TempB(5)=CurrPage'//当前页码
126
TempB(6)=TotalPage'//页码总数
127
TempB(7)=PageN'//每页条数
128
TempB(8)=TotalRecord'//文章总数
129
End Sub
130
Public Sub Show(Style)
131
If IsErr=True Then
132
Response.Write ErrInfo
133
Exit Sub
134
End If
135
136
Call Init()
137
Select Case Style
138
Case 1
139
Response.Write StyleA()
140
Case 2
141
Response.Write StyleB()
142
Case 3
143
Response.Write StyleC()
144
Case 4
145
Response.Write StyleD()
146
Case Else
147
ErrInfo=ErrInfo&"不存在当前样式
"
148
Response.Write ErrInfo
149
End Select
150
End Sub
151
Public Function ShowStyle(Style)
152
If IsErr=True Then
153
ShowStyle=ErrInfo
154
Exit Function
155
End If
156
157
Call Init()
158
Select Case Style
159
Case 1
160
ShowStyle= StyleA()
161
Case 2
162
ShowStyle= StyleB()
163
Case Else
164
ErrInfo=ErrInfo&"不存在当前样式
"
165
ShowStyle=ErrInfo
166
End Select
167
End Function
168
169
Private Function StyleA()
170
'首页 上一页 下一页 尾页 本页为第1/20页,共20页,每页10条,文章总数200条
171
'//分页样例:[首页] [上页] [下页] [尾页] [页次:4/5页] [共86篇 20篇/页] 转到:_ 页
172
'//标签:{N1} {N2} {N3} {N4} || 共:{N8}条记录 {N6}页 当前为第{N5}页 每页{N7}条
173
If IsEmpty(TempStr) Then
174
ErrInfo=ErrInfo&"模板为空
"
175
StyleB=ErrInfo
176
Exit Function
177
End If
178
Dim M
179
If TotalPage>1 Then
180
If CurrPage>1 Then
181
M="<a href='"&UrlStr&"Page=1'>"&"首页"&"</a>"
182
TempStr=Replace(TempStr,"{N1}",M)
183
M="<a href='"&UrlStr&"Page="&CurrPage-1&"'>"&"上一页"&"</a>"
184
TempStr=Replace(TempStr,"{N2}",M)
185
If CurrPage<TotalPage Then
186
M="<a href='"&UrlStr&"Page="&CurrPage+1&"'>"&"下一页"&"</a>"
187
TempStr=Replace(TempStr,"{N3}",M)
188
M="<a href='"&UrlStr&"Page="&TotalPage&"'>"&"尾页"&"</a>"
189
TempStr=Replace(TempStr,"{N4}",M)
190
Else
191
TempStr=Replace(TempStr,"{N3}","下一页")
192
TempStr=Replace(TempStr,"{N4}","尾页")
193
End If
194
Else
195
TempStr=Replace(TempStr,"{N1}","首页")
196
TempStr=Replace(TempStr,"{N2}","上一页")
197
M="<a href='"&UrlStr&"Page="&CurrPage+1&"'>"&"下一页"&"</a>"
198
TempStr=Replace(TempStr,"{N3}",M)
199
M="<a href='"&UrlStr&"Page="&TotalPage&"'>"&"尾页"&"</a>"
200
TempStr=Replace(TempStr,"{N4}",M)
201
End If
202
Else
203
TempStr=Replace(TempStr,"{N1}","首页")
204
TempStr=Replace(TempStr,"{N2}","上一页")
205
TempStr=Replace(TempStr,"{N3}","下一页")
206
TempStr=Replace(TempStr,"{N4}","尾页")
207
End If
208
T=TempStr
209
T=Replace(T,"{N8}",TotalRecord)
210
T=Replace(T,"{N6}",TotalPage)
211
T=Replace(T,"{N5}",CurrPage)
212
T=Replace(T,"{N7}",PageN)
213
TempStr=T
214
StyleA=TempStr
215
End Function
216
217
Private Function StyleB()
218
'首页 |< 1 2 3 4 5 6 7 >| 尾页
219
'//标签:{N1} {N2} {L}{N}{L/}{N3}{N4}
220
If IsEmpty(TempStr) Then
221
ErrInfo=ErrInfo&"模板为空
"
222
StyleB=ErrInfo
223
Exit Function
224
End If
225
Dim ForceNum,BackNum'//当前页的前面和后面显示个数
226
ForceNum=5
227
BackNum=4
228
Dim M
229
'//首页
230
M="<a href='"&UrlStr&"Page=1'>"&TempB(1)&"</a>"
231
TempStr=Replace(TempStr,"{N1}",M)
232
'//尾页
233
M="<a href='"&UrlStr&"Page="&TempB(6)&"'>"&TempB(4)&"</a>"
234
TempStr=Replace(TempStr,"{N4}",M)
235
'//前一页
236
M="|<"
237
If CurrPage-1>=1 Then
238
M="<a href='"&UrlStr&"Page="&CurrPage-1&"'>"&"|<"&"</a>"
239
End If
240
TempStr=Replace(TempStr,"{N2}",M)
241
'//后一页
242
M=">|"
243
If CurrPage+1<=TotalPage Then
244
M="<a href='"&UrlStr&"Page="&CurrPage+1&"'>"&">|"&"</a>"
245
End If
246
TempStr=Replace(TempStr,"{N3}",M)
247
'//取出循环标签
248
Dim N1,N2,N3,N4,N5,N6
249
If InStr(TempStr,"{L}")>0 Then
250
N1=InStr(TempStr,"{L}")
251
End If
252
If InStr(TempStr,"{L/}")>0 Then
253
N2=InStr(TempStr,"{L/}")
254
End If
255
If N2<=N1 Then
256
ErrInfo=ErrInfo&"循环标签出错
"
257
StyleB=ErrInfo
258
Exit Function
259
End If
260
N3=Mid(TempStr,N1,N2-N1+4)'//储存包括{L}{L/}循环标签的模板
261
N4=Replace(N3,"{L}","")'//储存不包括{L}{L/}循环标签的模板
262
N4=Replace(N4,"{L/}","")
263
'//页码列表
264
Dim FirstPageNum,LastPageNum
265
If CurrPage-ForceNum<=1 Then
266
FirstPageNum=1
267
PageList=""
268
Else
269
FirstPageNum=CurrPage-ForceNum
270
PageList="
"
271
End If
272
If CurrPage+BackNum>=TotalPage Then
273
LastPageNum=TotalPage
274
PageList_2=""
275
Else
276
LastPageNum=CurrPage+BackNum
277
PageList_2="
"
278
End If
279
Dim I
280
For I=FirstPageNum To LastPageNum
281
If I=CurrPage Then
282
N5=Replace(N4,"{N}","<b>"&I&"</b>")
283
N6=N6&N5
284
Else
285
M="<a href='"&UrlStr&"Page="&I&"'>"&I&"</a>"
286
N5=Replace(N4,"{N}",M)
287
N6=N6&N5
288
End If
289
Next
290
TempStr=Replace(TempStr,N3,N6)
291
StyleB=TempStr
292
End Function
293
294
Private Function StyleC()
295
'首页 |< |<< 1 2 3 4 5 6 7 >>| >| 尾页
296
'//此风格在StyleB的基础上修改,增加两个标签:{N9}上10页 {N10}下10页
297
'//标签:{N1}{N2}{N9}{L}{N}{L/}{N10}{N3}{N4}
298
Dim T
299
T=StyleB()
300
'//前十页
301
M="|<<"
302
If CurrPage-10>=1 Then
303
M="<a href='"&UrlStr&"Page="&CurrPage-10&"'>"&"|<<"&"</a>"
304
End If
305
T=Replace(T,"{N9}",M)
306
M=">>|"
307
If CurrPage+10<=TotalPage Then
308
M="<a href='"&UrlStr&"Page="&CurrPage+10&"'>"&">>|"&"</a>"
309
End If
310
T=Replace(T,"{N10}",M)
311
StyleC=T
312
End Function
313
314
Private Function StyleD()
315
'//此风格在StyleC的基础上修改
316
'//共{N8}条记录 {N6}页 当前为第{N5}页 每页{N7}条
317
'//首页 |< |<< 1 2 3 4 5 6 7 >>| >| 尾页
318
'//标签:{N1}{N2}{N9}{L}{N}{L/}{N10}{N3}{N4}
319
Dim T
320
T=StyleC()
321
T=Replace(T,"{N8}",TotalRecord)
322
T=Replace(T,"{N6}",TotalPage)
323
T=Replace(T,"{N5}",CurrPage)
324
T=Replace(T,"{N7}",PageN)
325
StyleD=T
326
End Function
327
328
End Class
329
%>
330
这个分页使用的是0游标,也就是Rs.Open Sql,Conn,0,1。但是感觉也快不了多少,10
万条数据的分页时间300多豪秒之间
Set test = New Page '创建啦
test.CurrentPage=1 '自己去读取拉,当前的页数
test.temp="{N1}{N2}{N3} {N4}"'这里是显示的模版,自己可以定义,至于标签,可以自己去那个类里找
test.Exec "Select * From [movie]",conn '这里执行sql语句,conn就是数据连接对象了
test.Show 1 '显示分页样式,可以根据用户输入的参数把这里的1换成变量
这个类可以扩展的地方很多,不错哦.
另外还有其他一些参数可以设置的.