При этом пейджинге используется курсор 0, то есть Rs.Open Sql,Conn,0,1. Но по ощущениям это не намного быстрее, 10
Время подкачки 10 000 фрагментов данных составляет более 300 миллисекунд.
<%
Страница класса
Частная CurrPage
Частная страницаN
Частный URLStr
Частный TempStr
Частная информация ErrInfo
ЧастноеIsErr
Частная тотальная запись
Частная общая страница
Публичные пейджеры
Частные TempA(11)
Частный TempB(8)
'------------------------------------------------ - ---------
Частный подкласс_Initialize()
CurrPage=1'//Текущая страница по умолчанию отображается как первая.
PageN=10'//По умолчанию на каждой странице отображается 10 фрагментов данных.
УрлСтр="#"
ТемпСтр=""
ErrInfo="Ошибка:"
IsErr=Ложь
Конец субтитра
Частный подкласс_Terminate()
Если IsObject(PageRs) Тогда
PageRs.Close
Установить PageRs=Ничего
Конец, если
Стереть TempA
Стереть TempB
Конец субтитра
'------------------------------------------------ - ---------
'//Получаем номер текущей страницы
Открытое свойство Let CurrentPage(Val)
CurrPage=Вал
Конечная собственность
Открытая собственность Получить CurrentPage()
ТекущаяСтраница=ТекущаяСтраница
Конечная собственность
'//Получаем количество элементов, отображаемых на каждой странице
Открытая собственность Let PageNum(Val)
СтраницаN=Значение
Конечная собственность
Открытая собственность Получить PageNum()
PageNum=СтраницаN
Конечная собственность
'//Получить URL
Публичная собственность Let Url(Val)
UrlStr=Вал
Конечная собственность
Публичная собственность Получить URL()
URL=UrlStr
Конечная собственность
'//Получаем шаблон
Общественная собственность Let Temp(Val)
ТемпСтр=Вал
Конечная собственность
Публичная собственность Get Temp()
Темп=ТемпСтр
Конечная собственность
'------------------------------------------------ - ----------
Public Sub Exec(Sql,ConnObj)
При ошибке Возобновить Далее
Установить PageRs=Server.CreateObject("ADODB.RecordSet")
PageRs.CursorLocation = 3 'Использование курсоров на стороне клиента может повысить эффективность
PageRs.PageSize = PageN 'Определить количество записей, отображаемых на каждой странице набора записей подкачки.
PageRs.Open Sql,ConnObj,0,1
Если Номер ошибки<>0 Тогда
Ошиб.Очистить
PageRs.Close
Установить PageRs=Ничего
ErrInfo=ErrInfo&"Ошибка создания или открытия набора записей..."
IsErr=Истина
Response.Write ErrInfo
Ответ.Конец
Конец, если
TotalRecord=PageRs.RecordCount'//Что, если оно равно 0?
Если TotalRecord>=1 Тогда
'------------------------------------------------ - --------------------------начинать
'//Подсчитаем общее количество страниц, Ps, почему бы не использовать PageRs.PageCount?
'Если TotalRecord Mod PageN=0 Тогда
'TotalPage=PageRs.RecordCountPageN
'Еще
'TotalPage=PageRs.RecordCountPageN
'TotalPage=Abs(Int(TotalPage))
'Конец, если
TotalPage=PageRs.PageCount
'//Обработка текущего полученного номера страницы, значение по умолчанию - 1, поэтому, если это не числовой тип, это будет 1
Если IsNumeric(CurrPage) Тогда
CurrPage=CLNg(CurrPage)
Если CurrPage<1, то CurrPage=1
Если CurrPage>TotalPage Тогда CurrPage=TotalPage
Еще
'//Dim M:M="":IsNumeric(M)=True
КуррПейдж=1
Конец, если
'------------------------------------------------ - -------------------------Заканчивать
Еще
ВсегоСтраниц=0
КуррПейдж=1
Конец, если
'//
PageRs.AbsolutePage = CurrPage 'абсолютная страница: устанавливает указатель на начало страницы.
PageRs.PageSize=СтраницаN
Конец субтитра
Частная субинициализация()
'Частный TempA(10)
TempA(1)="{N1}" '//Домашняя страница
TempA(2)="{N2}"'//Предыдущая страница
TempA(3)="{N3}"'//Следующая страница
TempA(4)="{N4}"'//Последняя страница
TempA(5)="{N5}"'//Номер текущей страницы
TempA(6)="{N6}"'//Общее количество страниц
TempA(7)="{N7}"'//Количество элементов на странице
TempA(8)="{N8}"'//Общее количество статей
TempA(9)="{L}"'//Метка начала цикла
TempA(10)="{N}"'//Одна метка в цикле: номер страницы
TempA(11)="{L/}"'//Метка конца цикла
'Частный TempB(8)
TempB(1)="Домой"
TempB(2)="Предыдущая страница"
TempB(3)="Следующая страница"
TempB(4)="Последняя страница"
TempB(5)=CurrPage'//Номер текущей страницы
TempB(6)=TotalPage'//Общее количество страниц
TempB(7)=PageN'//Количество элементов на странице
TempB(8)=TotalRecord'//Общее количество статей
Конец субтитра
Публичное субшоу (стиль)
Если IsErr=True Тогда
Response.Write ErrInfo
Выход из подзаголовка
Завершить
вызов Init()
Выберите стиль корпуса
Случай 1
Ответ. Написать StyleA()
Случай 2
Ответ.Запись StyleB()
Случай 3
Ответ.Запись StyleC()
Случай 4
Ответ. Написать StyleD()
Другое дело
ErrInfo=ErrInfo&"Текущий стиль не существует..."
Response.Write ErrInfo
Конец выбора
Конец субтитра
Открытая функция ShowStyle(Стиль)
Если IsErr=True Тогда
ShowStyle=ErrInfo
Выход из функции
Завершить
вызов Init()
Выберите стиль корпуса
Случай 1
ПоказатьСтиль= СтильA()
Случай 2
ПоказатьСтиль= СтильB()
Другое дело
ErrInfo=ErrInfo&"Текущий стиль не существует..."
ShowStyle=ErrInfo
Конец выбора
Конечная функция
Частная функция StyleA()
'Главная страница Предыдущая страница Следующая страница Последняя страница Эта страница представляет собой страницу 1/20, всего 20 страниц, по 10 статей на странице и всего 200 статей.
'//Пример разбиения на страницы: [Главная] [Предыдущая страница] [Следующая страница] [Последняя страница] [Страница: 4/5 страниц] [Всего 86 статей/20 статей/страница] Перейти на: _ страница
'//Тег: {N1} {N2} {N3} {N4} || Всего: {N8} записей {N6} страница в настоящее время составляет {N5} страниц {N7} записей на странице
Если IsEmpty(TempStr) Тогда
ErrInfo=ErrInfo&"Шаблон пуст..."
СтильB=Информация об ошибке
Выход из функции
Конец, если
ДиМ
Если ОбщаяСтраница>1 Тогда
Если CurrPage>1 Тогда
M="<a href=""&UrlStr&"Page=1'>"&"Home"&"</a>"
TempStr=Заменить(TempStr,"{N1}",M)
M="<a href=""&UrlStr&"Page="&CurrPage-1&"'>"&"Предыдущая страница"&"</a>"
TempStr=Заменить(TempStr,"{N2}",M)
Если CurrPage<TotalPage Тогда
M="<a href=""&UrlStr&"Page="&CurrPage+1&"'>"&"Следующая страница"&"</a>"
TempStr=Заменить(TempStr,"{N3}",M)
M="<a href=""&UrlStr&"Page="&TotalPage&"'>"&"Последняя страница"&"</a>"
TempStr=Заменить(TempStr,"{N4}",M)
Еще
TempStr=Replace(TempStr,"{N3}","Следующая страница")
TempStr=Replace(TempStr,"{N4}","Последняя страница")
Конец, если
Еще
TempStr=Replace(TempStr,"{N1}","Домашняя страница")
TempStr=Replace(TempStr,"{N2}","Предыдущая страница")
M="<a href=""&UrlStr&"Page="&CurrPage+1&"'>"&"Следующая страница"&"</a>"
TempStr=Заменить(TempStr,"{N3}",M)
M="<a href=""&UrlStr&"Page="&TotalPage&"'>"&"Последняя страница"&"</a>"
TempStr=Заменить(TempStr,"{N4}",M)
Конец, если
Еще
TempStr=Replace(TempStr,"{N1}","Домашняя страница")
TempStr=Replace(TempStr,"{N2}","Предыдущая страница")
TempStr=Replace(TempStr,"{N3}","Следующая страница")
TempStr=Replace(TempStr,"{N4}","Последняя страница")
Конец, если
T=ТемпСтр
T=Заменить(T,"{N8}",TotalRecord)
T=Заменить(T,"{N6}",TotalPage)
T=Заменить(T,"{N5}",CurrPage)
Т=Заменить(Т,"{N7}",СтраницаN)
ТемпСтр=Т
СтильA=ТемпСтр
Конечная функция
Частная функция StyleB()
'Домашняя страница|< 1 2 3 4 5 6 7 >| Последняя страница
'//Тег:{N1} {N2} {L}{N}{L/}{N3}{N4}
Если IsEmpty(TempStr) Тогда
ErrInfo=ErrInfo&"Шаблон пуст..."
СтильB=Информация об ошибке
Выход из функции
Конец, если
Dim ForceNum,BackNum'//Число, отображаемое спереди и сзади текущей страницы
ForceNum=5
НазадNum=4
ДиМ
'//главная страница
M="<a href=""&UrlStr&"Page=1'>"&TempB(1)&"</a>"
TempStr=Заменить(TempStr,"{N1}",M)
'//Последняя страница
M="<a href=""&UrlStr&"Page="&TempB(6)&"'>"&TempB(4)&"</a>"
TempStr=Заменить(TempStr,"{N4}",M)
'//Предыдущая страница
М="|<"
Если CurrPage-1>=1 Тогда
M="<a href=""&UrlStr&"Page="&CurrPage-1&"'>"&"|<"&"</a>"
Конец, если
TempStr=Заменить(TempStr,"{N2}",M)
'//Следующая страница
М=">|"
Если CurrPage+1<=TotalPage Тогда
M="<a href=""&UrlStr&"Page="&CurrPage+1&"'>"&">|"&"</a>"
Конец, если
TempStr=Заменить(TempStr,"{N3}",M)
'//удаляем метку цикла
Тусклый N1,N2,N3,N4,N5,N6
Если InStr(TempStr,"{L}")>0 Тогда
N1=InStr(TempStr,"{L}")
Конец, если
Если InStr(TempStr,"{L/}")>0 Тогда
N2=InStr(TempStr,"{L/}")
Конец, если
Если N2<=N1 Тогда
ErrInfo=ErrInfo&"Ошибка в метке цикла..."
СтильB=Информация об ошибке
Выход из функции
Конец, если
N3=Mid(TempStr,N1,N2-N1+4)'//Шаблоны хранилища, включая теги цикла {L}{L/}
N4=Replace(N3,"{L}","")'//Шаблоны хранилища, не содержащие тегов цикла {L}{L/}
N4=Заменить(N4,"{L/}","")
'//Список номеров страниц
Уменьшить значение FirstPageNum, LastPageNum
Если CurrPage-ForceNum<=1 Тогда
ПерваяСтраницаNum=1
Список страниц=""
Еще
FirstPageNum=CurrPage-ForceNum
Список страниц="... ..."
Конец, если
Если CurrPage+BackNum>=TotalPage Тогда
LastPageNum=Всего страниц
Список страниц_2=""
Еще
LastPageNum=CurrPage+BackNum
PageList_2="... ..."
Конец, если
Дим я
Для I = FirstPageNum до LastPageNum
Если I=CurrPage Тогда
N5=Заменить(N4,"{N}","<b>"&I&"</b>")
Н6=Н6&Н5
Еще
M="<a href=""&UrlStr&"Page="&I&"'>"&I&"</a>"
N5=Заменить(N4,"{N}",M)
Н6=Н6&Н5
Конец, если
Следующий
TempStr=Заменить(TempStr,N3,N6)
СтильB=ТемпСтр
Конечная функция
Частная функция StyleC()
'Домашняя страница|< |<< 1 2 3 4 5 6 7 >>| Последняя страница
'//Этот стиль изменен на основе StyleB с добавлением двух тегов: {N9} Предыдущие 10 страниц {N10} Следующие 10 страниц
'//Тег:{N1}{N2}{N9}{L}{N}{L/}{N10}{N3}{N4}
Дим Т
Т=СтильB()
'//Первые десять страниц
М="|<<"
Если CurrPage-10>=1 Тогда
M="<a href=""&UrlStr&"Page="&CurrPage-10&"'>"&"|<<"&"</a>"
Конец, если
Т=Заменить(Т,"{N9}",M)
М=">>|"
Если CurrPage+10<=TotalPage Тогда
M="<a href=""&UrlStr&"Page="&CurrPage+10&"'>"&">>|"&"</a>"
Конец, если
Т=Заменить(Т,"{N10}",M)
СтильC=T
Конечная функция
Частная функция StyleD()
'//Этот стиль изменен на основе StyleC
'//Всего {N8} записей на странице {N6} в настоящее время составляет {N5} страниц {N7} записей на странице
'//Домашняя страница|< |<< 1 2 3 4 5 6 7 >| Последняя страница
'//Тег:{N1}{N2}{N9}{L}{N}{L/}{N10}{N3}{N4}
Дим Т
Т=СтильC()
T=Заменить(T,"{N8}",TotalRecord)
T=Заменить(T,"{N6}",TotalPage)
T=Заменить(T,"{N5}",CurrPage)
Т=Заменить(Т,"{N7}",СтраницаN)
СтильD=T
Конечная функция
Конечный класс
%>