Разбиение набора данных на страницы средствами ADO.

<%@LANGUAGE="VBScript" %>

<%Response.Expires=-1 %>

<HTML><HEAD>

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

<TITLE>Paging Records</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.








Дата добавления: 2015-11-04; просмотров: 662;


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

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

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

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