Лістинг 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;