Лістинг 4.8. Розбиття набору даних на сторінки засобами ADO.

<%@LANGUAGE="VBScript" %>

<%Response.Expires=-1 %>

<HTML><HEAD>

<META HTTP-EQUIV="Content-Type" content="text/html; charset=windows-1251">

<TITLE>Paging Records by Mikle</TITLE> </HEAD> <BODY>

<%

' На якій ми сторінці?

Select Case Request.QueryString("Direction")

Case "" Session("CurrentPage")= 1

Case "Next" Session("CurrentPage")= Session("CurrentPage")+ 1

Case "Prev" Session("CurrentPage")= Session("CurrentPage") - 1

End Select

' Константи

Const adOpenKeyset = 1

' Оголошуємо змінні

Dim objConnection

Dim objRecordset

' Відкриваємо базу даних

Set objConnection = Server.CreateObject("ADODB.Connection")

objConnection.Open "Data", "", ""

' Конструюємо оператора SQL

Dim strSQL

strSQL ="SELECT Name, About FROM Users"

' Створюємо набір даних

Set objRecordset = Server.CreateObject("ADODB.Recordset")

objRecordset.PageSize = 10

objRecordset.Open strSQL, objConnection, adOpenKeyset

objRecordset.AbsolutePage = CLng(Session("CurrentPage"))

' Виводимо результати

%>

<P>Page <%=Session("CurrentPage")%> of

<%=objRecordset.PageCount%></P>

<TABLE BORDER>

<TR><TH>Пользователь</TH><TH>Сведения</TH>

</TR><%

Dim i

For i = 1 To objRecordset.PageSize

if NOT objRecordset.EOF Then

%>

<TR><TD><%=objRecordset("Name")%></TD>

<TD><%=objRecordset("About")%></TD>

</TR> <%

objRecordset.MoveNext

end if

Next %>

</TABLE>

<!-- Посилання на НАСТУПНУ сторінку -->

<% If CLng(Session("CurrentPage"))< objRecordset. PageCount Then %>

<P><A HREF="e8.asp?Direction=Next">Следующая страница</A></P>

<%End If%>

<!-- Посилання на ПОПЕРЕДНЮ сторінку -->

<% If CLng(Session("CurrentPage"))> 1 Then %>

<P><A HREF="e8.asp?Direction=Prev">Предыдущая страница</A></P>

<%End If%>

<%

' Закриваємо базу даних

objRecordset.Close

objConnection.Close

Set objRecordset = Nothing

Set ObjConnection = Nothing %>

</BODY></HTML>

В даному прикладі застосовуються певні прийоми, які варто обговорити детальніше. Зверніть увагу, що весь процес розбиття на сторінки забезпечується одним ASP-файлом. Для кожної сторінки даних знов викликається той же самий ASP-файл. Зазвичай при виклику сторінки Internet Explorer отримує її з пам'яті клієнтського комп'ютера. У нашому прикладі сторінка завжди знаходитиметься в пам'яті, оскільки викликається постійно. У наявності проблема: адже запит виконується лише тоді, коли виконується код на сервері. Тому ми повинні запобігти використанню ASP-файлов з пам'яті. Для цього слід встановити властивість Expires об'єкту Response в нуль. Тоді файл оновлюватиметься при кожному новому зверненні до сторінки, що нам і потрібний.

Зверніть також увагу, що при кожному зверненні до сторінки виконується один і той же запит, міняється лише властивість Absolute-Page. Така стратегія здається досить марнотратною, але вимагає менше ресурсів, чим запам'ятовування об'єктів Recordset великого об'єму в змінних сесії і зберігання їх в період між зверненнями до сторінки. Уявіть собі вузол з тисячами користувачів, в кожного з яких в змінній сесії зберігається об'єкт Recordset. Ресурси сервера будуть вмить виснажені.

За допомогою ADO можна виконувати доступ до даних на сервері на основі будь-якого оператора SQL. Запити можна закодувати як процедури SQL-сервера, що зберігаються, або безпосередньо у вигляді SQL-операторов SELECT. Модифікувати дані можна за допомогою SQL-операторов UPDATE і методу Execute об'єкту Connection. ADO може при­меняться і на клієнтській стороні у поєднанні з Advanced Data Control (ADC). По суті ADC дуже мало відрізняється від просто ActiveX-оболочки довкола більшої частини функціональності ADO. Основну роль в доступі до даних за допомогою ADC грає його властивість Recordset.

Компонент File Access.Компонент File Access (компонент доступу до файлів) надає доступ до текстових файлів на Web-узле. Насправді він складається з двох окремих об'єктів: FileSystem, який служить для відкриття і закриття файлів, і TextStream, призначеного для читання і запису.

Отже, аби дістати доступ до файлу, спочатку створіть (методом CreateObject об'єкту Server) об'єкт FileSystem. Потім для створення нового файлу слід викликати метод CreateTextFile тільки що створеного об'єкту, а для відкриття існуючого файлу — метод OpenTextFile. В будь-якому разі обоє методу повернуть об'єкт TextStream. Нижче показано, як дістати доступ до файлу DATA.TXT:

Set objFile = Server. CreateObject("Scripting. FileSystemObject") Set objStream = objFile.OpenTextFile("DATA.TXT")

Після створення об'єкту TextStream можна вільно викликати будь-які його методи для читання або запису інформації. Не забувайте, проте, що зазвичай файл відкривається лише для читання або лише для запису, але не для того і іншого одночасно. Цей факт вимагає певної організації коду ASP-страниц: якщо над одним і тим же файлом необхідно виконати різні операції, його слід відкрити, закрити і знов відкрити.

Окрім просто читання і запису компонент File Access служить для створення динамічного інформаційного наповнення. Давайте спробуємо реалізувати генератор «чергових порад» (tip-of-the-day), що виводить підказки або повідомлення, які оновлюються при кожному новому завантаженні сторінки. Повний текст прикладу, присвяченого радим з програмування на Visual Basic, приведений в лістингу 4.9. Головне в цьому завданні — написати текстовий файл, кожна строчка якого містить одну підказку. Потім ці строчки прочитуються по одній у випадковому порядку методом ReadLine об'єкту TextStream і поміщаються на сторінку методом Write об'єкту Response.








Дата добавления: 2016-04-02; просмотров: 603;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.011 сек.