В системе программирования ASP компании Microsoft создание объектов ADO упрощает доступ к базам данных с веб-страниц. В частности, объект Recordset ADO делает более удобным и свободным управление выводом и отображением данных. В Visual InterDev6.0 (именуемый в дальнейшем VI6.0) в связи с введением таких объектных моделей, как объектная модель сценария (именуемая в дальнейшем SOM), управление временем разработки (именуемая в дальнейшем DTC) и объект среды данных. Модель (далее DEOM). Делает проект доступа веб-страницы к базе данных более удобным.
Из-за предмета, касающегося подключения к базе данных, ниже приведены только код и краткие комментарии, а основное внимание уделяется тому, как использовать объект Recordset (или элемент управления) для реализации постраничного отображения записей данных. Насколько я понимаю, ключ к постраничному отображению лежит в знании свойств и методов объекта Recordset ADO или элемента управления Recordset DTC (управление временем разработки).
Эти семь типов оружия, представленных на страницах, можно свести в четыре категории:
Я временно называю первый и второй методы чистым методом ASP, который также является наиболее часто используемым методом на отечественных ASP-сайтах. Разница между ними заключается только в методах реализации. Реализация этих двух методов наиболее проста для понимания, использует меньше всего концепций объектов и имеет самые низкие требования к среде разработки (подойдет только Блокнот). Можно сказать, что суть этих двух методов по-прежнему остается идеей CGI-программирования, но в программу вводится объект ADO.
Четвертый и пятый методы DHTML временно называются SOM. Эти два метода требуют использования объектной модели Script, предложенной Microsoft, и новых функций привязки к базе данных объекта Table в DHTML в среде VI6.0 (во многих книгах и статьях представлены только функции CSS DHTML). design и игнорирует введение своих функций привязки данных) для управления переключением страниц на стороне клиента. Но для этого требуется, чтобы браузер пользователя поддерживал DHTML, например Microsoft Internet Explorer 4.0 и выше.
Шестой метод временно называется методом SOM на стороне сервера. Он должен быть разработан в среде VI6.0. Он использует несколько элементов управления DTC в объектной модели сценариев, предложенных Microsoft: Recordset, PageObject, Grid и т. д. для реализации управления перелистыванием страниц на стороне сервера (клиента). Это новый захватывающий метод программирования, который рассматривает веб-страницы как объекты (эта объектная модель отличается от традиционной объектной модели DOM-документа: DOM может управлять только клиентом, тогда как SOM может управлять сервером и клиентом). ориентированное программирование веб-страниц. Но, к сожалению, возможно, из-за моих ограниченных личных возможностей, я лично считаю, что эта технология еще не очень развита. Например, интеграция с браузером не очень хороша, что будет подробно объяснено позже.
Седьмой метод временно называется методом DEOM. Он также использует объектную модель среды данных, установленную в VI6.0, для создания объектов набора записей. Это также относительно новый метод в веб-программировании. По сравнению с моделью SOM он имеет свои преимущества, которые будут подробно описаны позже.
Все примеры исходных кодов, приведенные ниже, можно скопировать и использовать напрямую. Вам даже не нужно понимать принципы. Просто замените выделенные жирным шрифтом и курсивом части соответствующими именами баз данных или именами полей.
Прежде чем приступить к подробному описанию различных методов подкачки, давайте сначала создадим базу данных: воспользуемся доступом в Office97 для создания файла «Сотрудник.mdb», создадим в нем таблицу emp и зададим только три поля: идентификатор emp, фамилию и имя. Это так просто, потому что нас волнует, как обрабатывать результаты набора записей.
Первый метод: метод прямой подстановки параметров
Этот метод заключается в том, чтобы вручную создать объект Recordset и использовать его свойства pagesize (заданное количество отображаемых записей на странице), pagecount (общее количество страниц) и Absolutepage (текущий номер страницы) для управления выводом страниц. Пейджинг использует <href>, чтобы напрямую использовать параметр номера страницы для управления перелистыванием страниц. Имя веб-страницы — emp1.asp. Исходный код выглядит следующим образом:
<%//Установите соединение с базой данных сотрудников.mdb.
Установите conn = Server.CreateObject(ADODB.Connection)
conn.Open driver={Драйвер Microsoft Access (*.mdb)};dbq=employee.mdb
//Создаем экземпляр объекта Recordset rs таблицы emp.
Установите rs = Server.CreateObject(ADODB.Recordset)
рс.Открытый пр, конн, 3
PageSize = 10 //Атрибут pagesize указывает количество записей, отображаемых на каждой странице.
Page = CLng(Request(Page)) 'Преобразовать тип строки в длинный тип
Если Страница < 1, то Страница = 1
Если Страница > rs.PageCount Тогда Страница = rs.PageCount
Если Страница <> 1 Тогда
Ответ. Напишите <A HREF=emp1.asp?Page=1>Первая страница</A>
Ответ. Напишите <A HREF=emp1.asp?Page= & (Страница-1) & >Предыдущая страница</A>
Конец, если
Если Страница <> rs.PageCount Тогда
Ответ. Напишите <A HREF=emp1.asp?Page= & (Page+1) & >Следующая страница </A>
Response.Write <A HREF=emp1.asp?Page=&rs.PageCount & >Последняя страница</A>
Конец, если
Номер страницы Response.write: & Page & / & rs.PageCount & </font>
//Отображение каждой страницы
//отображение заголовка
Ответ. Напишите <ЦЕНТР><ГРАНИЦА ТАБЛИЦЫ=1>
Response.WRITE <TR><TD> и rs.Fields(emp ID).Name & </TD>
Ответ.ЗАПИШИТЕ <TD> и rs.Fields(фамилия).Имя & </TD>
Response.WRITE <TD> & rs.Fields(имя).Name & </TD></TR>
//Цикл для отображения каждой записи
rs.AbsolutePage = Page //Назначьте номер страницы атрибуту Absolutepage, чтобы узнать номер первой записи текущей страницы.
Для iPage = 1 To rs.PageSize //
Response.WRITE <TR><TD> и rs.Fields(emp ID).Value & </TD>
Response.WRITE <TD> и rs.Fields(имя).Значение & </TD>
Response.WRITE <TD> и rs.Fields(фамилия).Значение & </TD></TR>
rs.MoveNext
Если rs.EOF, то выйти за
Следующий
Response.Write </TABLE></CENTER>%>
Второй тип: метод формы параметров передачи
Этот метод аналогичен первому методу при создании объекта Recordset, за исключением того, что при управлении перелистыванием страниц для реализации перелистывания страниц используются оператор <input> и case. Имя веб-страницы: emp2.asp. Этот метод имеет недостаток в логике программирования: после нажатия кнопки предыдущей страницы или следующей страницы, а затем нажатия кнопки обновления в браузере страница перевернется автоматически. Исходный код выглядит следующим образом:
if Pagenum = then Pagenum = 1 //Начинаем показ с первой страницы
//Устанавливаем соединение с базой данных и экземпляр объекта Recordset rs.
То же, что и первый метод, здесь пропущен.
RS.Pagesize = 10 'Установить количество записей, отображаемых на одной странице, равное 10
// Определяем действие перелистывания страницы
Выберите запрос дела (NAV)
Случай
сеанс (Pagenum) = 1
случай Первая ' Первая запись
сеанс (Pagenum) = 1
дело Предыдущая ' Предыдущая запись
если сеанс (Pagenum) > 1, то
сеанс (Pagenum) = сеанс (Pagenum) - 1
Конец, если
дело Следующая ' Следующая запись
если сеанс(Pagenum)<RS.PageCount, то
сеанс (Pagenum) = сеанс (Pagenum) + 1
Конец, если
Case Последняя ' Последняя запись
сеанс (Pagenum) = RS.PageCount
Конец выбора
RS.Absolutepage = Clng(session(Pagenum)) //Определяем номер первой записи текущей страницы
//Показать текущую страницу
То же, что и первый метод, здесь пропущен.
// Настройки кнопки навигации на странице
<метод формы=GET action=emp2.asp>
<тип ввода=имя отправки=Значение NAV=Домашняя страница>
<тип ввода=отправляемое значение=название предыдущей страницы=NAV>
<тип ввода=отправить значение=имя следующей страницы=NAV>
<тип ввода=отправляемое значение=имя последней страницы=NAV></form>
Третий тип: использование элемента управления Grid для разработки разбиения на страницы.
Из всех способов это самый простой. Вам нужно всего лишь перетащить элементы управления Recordset и Grid в DTC на веб-страницу asp. Кроме того, вы также можете выбрать, управлять ли включением страниц на серверной или клиентской платформе. Недостаток в том, что вы должны отображать ее в заданном ею формате, и вы не можете самостоятельно свободно управлять форматом отображения таблицы.
Вот как:
Создайте проект emp.vip в VI6.0. Затем добавьте в проект веб-страницу asp: emp3.asp.
Шаг 1. Выберите «Добавить подключение к данным...» в строке меню VI6.0 и следуйте подсказкам средства разработки. Вы можете легко установить соединение с базой данных «Сотрудник.mdb». Перетащите элемент управления Recordset с панели инструментов DTC на веб-страницу и задайте его свойства. Как показано на рисунке:
Когда вы перетаскиваете элемент управления на веб-страницу, VI6.0 автоматически предложит вам использовать объектную модель сценариев, нажмите «Да».
Шаг 3. Перетащите элемент управления «Сетка» с панели инструментов DTC на веб-страницу, затем щелкните правой кнопкой мыши и установите его свойства, например: выберите имя элемента управления «Набор записей», созданного на втором этапе, выберите поля в таблице emp. , каждая страница. Сколько записей отображается, формат отображения и т. д. Это очень просто и удобно, достаточно следовать подсказкам навигации.
Четвертый метод: первый метод DHTML.
Записи данных отображаются в таблице HTML. Он использует функции привязки данных таблиц в DHTML для управления постраничным отображением записей. Недостаток заключается в том, что ваш метод перелистывания страниц будет ограничен определенным способом: только предыдущая и следующая страницы, но не первая и последняя страницы. Поскольку перелистывание страниц контролируется на стороне клиента, этот и пятый способ являются самыми быстрыми, но, к сожалению, их можно использовать только в браузерах, поддерживающих DHTML.
В DHTML атрибут DATASRC <TABLE> позволяет привязать таблицу к источнику данных, а другой атрибут, DATAPAGESIZE, указывает количество записей, отображаемых на странице одновременно.
Давайте посмотрим на следующий пример:
Шаг 1. Перетащите элемент управления Recordset на вновь созданную веб-страницу emp4.htm и установите его свойства. Метод тот же, что и третий метод, который здесь опущен.
Шаг 2: Введите следующий код:
<TABLE ID=Table1 DATASRC=#Recordset1_RDS DATAPAGESIZE=5> //Предположим, что элемент управления Recordset ранее назывался Recordset1. Отображение 5 записей на странице.
<ГОЛОВКА>
<TH ALIGN=left WIDTH=150>Emp ID</TH> //Выходной заголовок
<TH ALIGN=ШИРИНА слева=200>Фамилия</TH>
<TH ALIGN=левая ширина=200>Имя</TH>
</ГОЛОВКА>
<ТР>
<TD><DIV DATAFLD=Emp ID></DIV></TD> //Содержимое таблицы вывода
<TD><DIV DATAFLD=Фамилия></DIV></TD>
<TD><DIV DATAFLD=Имя></DIV></TD>
</ТР>
</ТАБЛИЦА>
Шаг 3. Затем добавьте пару элементов управления кнопками DTC для навигации по страницам: один с именем btnPrevious (предыдущая страница), а другой с именем btnNext (следующая страница). Соответствующие им сценарии следующие:
<ЯЗЫК СКРИПТА=VBScript>
Функция btnPrevious_onclick()
Таблица1.предыдущая страница()
Конечная функция
Функция btnNext_onclick()
Таблица1.nextPage()
Конечная функция
</СКРИПТ>
Пятый метод: второй метод DHTML
Этот метод является усовершенствованием четвертого метода. Используя метод написания скриптов вручную, мы можем сделать кнопки навигации по домашней странице и последней странице, а также определить позицию (номер записи) каждой записи. Из-за нехватки места ниже я приведу только конкретный пример и дам краткое объяснение. Информацию о других свойствах и методах элементов управления DHTML и Recordset можно найти в соответствующих книгах. Здесь необходимо отметить, что элемент управления Recordset несколько отличается от объекта ADO Recordset, представленного в первом и втором методах: элемент управления Recordset не предоставляет напрямую такие свойства, как размер страницы и количество страниц, и его необходимо вычислять с использованием описанного метода. ниже.
Шаг 1. Перетащите элемент управления Recordset на вновь созданную веб-страницу emp5.htm, назовите его Recordset1 и установите его свойства. Метод тот же, что и третий метод, который здесь опущен.
Шаг 2. Определите три глобальные переменные и напишите сценарий ondatasetcomplete (настройка данных завершена) для Recordset1.
Dim gCurrentPageNumber //Номер текущей страницы
Dim gMaxPageNumber //Максимальное количество страниц
Dim gRecordsPerPage //Отображение количества записей на странице
gRecordsPerPage = 5 //Установите количество записей, отображаемых на странице, равным 5 записям.
Функция Recordset1_ondatasetcomplete()
totalRecordCount = Recordset1.getCount() //Общее количество записей
gMaxPageNumber = Int(totalRecordCount / gRecordsPerPage) //Получаем максимальное количество страниц
Если (totalRecordCount Mod gRecordsPerPage) > 0, то
гМаксНомерСтраницы = гМаксНомерСтраницы + 1
Конец, если
Конечная функция
Шаг 3. Создайте кнопки навигации по страницам.
Функция btnFirst_onclick() 'Переход на домашнюю страницу
гкуррентпаженомер = 1
ДисплейДанные()
Конечная функция
Функция btnPrevious_onclick() 'Переход на предыдущую страницу
если gCurrentPageNumber > 1 Тогда
gCurrentPageNumber = gCurrentPageNumber - 1
ДисплейДанные()
Конец, если
Конечная функция
Функция btnNext_onclick() 'Перейти на следующую страницу
если gCurrentPageNumber < gMaxPageNumber Тогда
gCurrentPageNumber = gCurrentPageNumber + 1
ДисплейДанные()
Конец, если
Конечная функция
Функция btnLast_onclick() 'Переход на последнюю страницу
gCurrentPageNumber = gMaxPageNumber
ДисплейДанные()
Конечная функция
Шаг 4. Напишите функцию для отображения каждой страницы. Используются многие атрибуты и методы DHTML. Читателям рекомендуется обратиться к соответствующим книгам.
Субдисплейданные()
startRecord = ((gCurrentPageNumber - 1) * gRecordsPerPage) + 1 //Вычисляем количество записей (позиция, номер), отображаемых в начале каждой страницы
строкаCtr = 1
lblPageNumber.innerHTML = gCurrentPageNumber &/& gMaxPageNumber
For RecordPtr = startRecord To (startRecord + gRecordsPerPage - 1) //Цикл для отображения каждой записи страницы
Если RecordPtr > Recordset1.getCount() Тогда //Отображение пустой таблицы
Table1.rows(rowCtr).cells(0).innerHTML = <P> </P>
Table1.rows(rowCtr).cells(1).innerHTML = <P> </P>
Table1.rows(rowCtr).cells(2).innerHTML = <P> </P>
Table1.rows(rowCtr).cells(3).innerHTML = <P> </P>
Else //Показать каждую страницу отдельно
Recordset1.moveAbsolute(recordPtr) //Перемещаем указатель записи.
empID = Recordset1.fields.getValue (идентификатор emp)
empLName = Recordset1.fields.getValue(имя)
empFName = Recordset1.fields.getValue(фамилия)
Table1.rows(rowCtr).cells(0).innerText = RecordPtr 'Счетчик
Table1.rows(rowCtr).cells(1).innerText = empID
Table1.rows(rowCtr).cells(2).innerText = empLName
Table1.rows(rowCtr).cells(3).innerText = empFName
Конец, если
строкаCtr = строкаCtr + 1
Следующий
Конец субтитра
Кроме того, нам также необходимо написать следующий скрипт в событии загрузки объекта окна:
Для rowCtr = 1 до gRecordsPerPage
Table1.insertRow(rowCtr) 'Вставьте новый столбец
Для cellCtr = от 0 до 3
Таблица1.rows(rowCtr).insertCell()
Следующий
Следующий
Шестой метод: Метод перелистывания страниц управления на стороне сервера.
Если мы разобьем данные на стороне сервера, чтобы сформировать оператор HTML, а затем выведем его клиенту, не будет проблем с тем, что браузер не поддерживает DHTML. Однако использование метода на стороне сервера требует от нас повторного создания элемента управления Recordset каждый раз, когда мы переворачиваем страницу, поэтому скорость определенно ниже, чем при использовании метода DHTML. Но если сервер достаточно быстрый, этот медленный клиент этого не заметит.
В следующем примере я представлю новый элемент управления DTC: PageObject. Благодаря этому элементу управления указанная веб-страница становится объектом веб-страницы, а подпрограммы и функции, организованные пользователем в серверном сценарии этой веб-страницы, могут рассматриваться как методы объекта веб-страницы. Он предоставляет расширенный метод управления информацией о состоянии: объекты веб-страницы имеют некоторые свойства (переменные), и пользователи могут определять время жизни этих свойств. Из-за вышеперечисленных характеристик нам очень удобно составлять скрипты перелистывания страниц.
Но недостатком этого метода является то, что после того, как вы нажмете кнопку предыдущей страницы или следующей страницы, а затем нажмите кнопку обновления в браузере, веб-страница автоматически перевернется. Кроме того, если вы нажмете кнопку «Назад» в браузере, а затем нажмите кнопку перелистывания страниц, может появиться случайная страница. Все это вызвано свойствами объекта веб-страницы (глобальными переменными).
Шаг 1. Перетащите элемент управления Recordset на вновь созданную веб-страницу emp6.asp, назовите его Recordset1 и задайте его свойства. Метод тот же, что и третий метод, который здесь опущен.
Шаг 2. Перетащите элемент управления PageObject на веб-страницу и назовите его emplist. Затем щелкните этот элемент управления правой кнопкой мыши, чтобы открыть страницу свойств и установить три свойства (глобальные переменные) MaxPageNumber, RecordsPerPage и CurrentPageNumber. VI6.0 может использовать методы get и set для чтения и записи своих значений. Для конкретного использования обратитесь к соответствующей информации.
Шаг 3. Напишите событие ondatasetcomplete для Recordset1.
Функция Recordset1_ondatasetcomplete()
записиперпаже = 5
empList.setRecordsPerPage(recordsPerPage)//Установить количество записей на атрибут страницы объекта веб-страницы равным 5
totalRecordCount = Recordset1.getCount()//Получить общее количество записей в наборе записей
mpn = Int(totalRecordCount/recordsPerPage) //Рассчитываем mpn как общее количество страниц
Если (totalRecordCount Mod RecordsPerPage) > 0, то
мпн = мпн + 1
Конец, если
empList.setMaxPageNumber(mpn)
Конечная функция
Шаг 4. Перетащите четыре кнопки управления на веб-страницу и напишите сценарий управления переворачиванием страниц. В основном мы добиваемся перелистывания страниц, изменяя значение свойства CurrentPageNumber объекта веб-страницы.
Функция btnFirst_onclick() 'Переход на домашнюю страницу
empList.setCurrentPageNumber(1)
Конечная функция
Функция btnPrevious_onclick() 'Переход на предыдущую страницу
cpn = empList.getCurrentPageNumber()
если cpn > 1 Тогда
empList.setCurrentPageNumber(cpn - 1)
Конец, если
Конечная функция
Функция btnNext_onclick() 'Перейти на следующую страницу
cpn = empList.getCurrentPageNumber()
если cpn < empList.getMaxPageNumber(), то
empList.setCurrentPageNumber(cpn + 1)
Конец, если
Конечная функция
Функция btnLast_onclick() 'Переход на последнюю страницу
empList.setCurrentPageNumber(empList.getMaxPageNumber())
Конечная функция
Чтобы гарантировать, что первая страница отображается при первом входе на страницу, мы также должны написать событие onEnter объекта веб-страницы.
Функция empList_onEnter()
Если empList.firstEntered Тогда
empList.setCurrentPageNumber(1)
Конец, если
Конечная функция
Шаг 5. Напишите сценарий, отображающий каждую страницу.
<HR><TABLE BORDER=0><TR>//Отображение заголовка
<TH ALIGN=ШИРИНА слева=35></TH>
<TH ALIGN=левая ширина=150>Emp ID</TH>
<TH ALIGN=ШИРИНА слева=200>Фамилия</TH>
<TH ALIGN=ШИРИНА слева=200>Имя</TH></TR>
<%
pageNumber = empList.getCurrentPageNumber()//Рассчитываем различные параметры, необходимые для перелистывания страниц, так же, как метод DHTML 2
RecordsPerPage = empList.getRecordsPerPage()
startRecord = ((pageNumber - 1) * RecordsPerPage) + 1
последняя запись = набор записей1.getCount()
Для RecordPtr = startRecord To (startRecord + RecordsPerPage - 1)%>
<%Если Recordset1.EOF = Истина, Тогда%>
<ТР>
<ТД> </ТД>
<ТД> </ТД>
<ТД> </ТД>
<ТД> </ТД>
</ТР>
<%Другое%>
<%Recordset1.moveAbsolute(recordPtr)%>
<ТР>
<% Если RecordPtr <= LastRecord Тогда %>
<TD><%=recordptr%></TD>
<%Другое%>
<ТД> </ТД>
<%Конец Если %>
<TD><%=Recordset1.fields.getValue(emp ID)%></TD>
<TD><%=Recordset1.fields.getValue(фамилия)%></TD>
<TD><%=Набор записей1.fields.getValue(имя)%></TD>
</ТР>
<%Конец Если%>
<%Следующий%>
</ТАБЛИЦА><HR>
Седьмой метод: метод объектной модели среды данных (объектной модели среды данных).
Объектная модель среды данных абстрагирует объектную модель ADO и ее объекты — объекты «Соединение», «Команда», «Набор записей», «Поле» и «Параметры» — в более простую форму. Объектная модель среды данных представляет команды как методы. Пользователь может вызывать эти методы, которые выполняют команды и возвращают результирующий набор записей. Подробную информацию об объектной модели DEOM можно найти в соответствующих книгах. Давайте рассмотрим пример следующей веб-страницы emp7.asp:
Шаг 1: Щелкните проект правой кнопкой мыши в окне проводника проектов VI6.0 и выберите «Добавить соединение данных» во всплывающем меню. После установления соединения с базой данных в соответствии с навигационными подсказками, выдаваемыми VI, пользователь добавляет команду данных для доступа к базе данных из приложения ASP. В то же время вы увидите объект среды данных в файле global.asa в окне Project Explorer.
Шаг 2. Щелкните правой кнопкой мыши объект «Среда данных» и выберите параметр «Добавить команду данных» во всплывающем меню, чтобы добавить команду данных Command1. В соответствии с навигационной подсказкой VI6.0 вы можете выбрать Оператор SQL на странице Genetal всплывающего окна свойств Command1 и ввести: select * from emp. Нажмите ОК, чтобы вернуться.
Шаг 3. После создания команды данных вы создали метод для объекта среды данных. Затем вы можете вызвать этот метод из сценария, и этот метод вернет пользователю набор записей.
thisPage.createDE() // В режиме SOM thisPage представляет текущий объект веб-страницы, а метод createDE() создает объект DE.
DE.Command1//Выполняет команду объекта DE, за которой могут следовать параметры, что очень полезно при выполнении условных запросов.
Установка rs=DE.rsCommand1//DE.rscommand1 делает объект rs полностью эквивалентным объекту ADO Recordset.
Шаг 4. Поскольку rs является объектом ADO, следующий код перелистывания страниц полностью ссылается на несколько методов, представленных выше, и здесь пропускается.
Другие включают методы, реализованные в навигации по базе данных FrontPage2000 и т. д. Поскольку они не имеют отношения к этой теме, они здесь опущены.
Подводя итог, каждый представленный ранее метод содержит множество новых технологий, которые не могут быть подробно рассмотрены из-за ограниченности места. В этой статье мы просто хотим представить различные методы программирования веб-страниц ASP на конкретном примере перелистывания страниц; позвольте каждому испытать мощные функции VI6.0 при подготовке веб-страниц, понять и ознакомиться с ADO, как использовать элементы управления DHTML, DTC; , объектная модель SOM и объектная модель DEOM. Я надеюсь, что она предоставит вам больше возможностей и ссылок при компиляции веб-страниц;