Web Creation - еженедельный сетевой журнал для вебмастеров

   
Постраничный вывод базы данных 

Автор: Вадим Веденин

Хочу описать о последовательности операций, которую я применяю для постраничного вывода результатов запроса к БД.

Алгоритм обращения к странице у меня обычно такой:

  1. На какой-то странице стоит гиперссылка на страницу search.asp которая как раз выполняет скрипт , обращающийся к БД. Запрос к этой старнице осуществляется методом "GET"
  2. На странице search.asp при первой загрузке показываю пользователю форму myForm, чтобы он смог сгенерировать запрос к БД. Все параметры запроса, указанные пользователем, передаю этой же странице методом "POST". В зависимости от задачи в форме myForm иногда завожу скрытые тэки input, в которые записываю необходимые атрибуты запроса.
  3. При второй загрузке страницы я вывожу полученный запрос к БД, учитывая текущую страницу. Одновременно вывожу последовательность гиперссылок на страницу search.asp , в адресе которых указываю номер текущей старницы.

В данной задаче две проблемы :

  1. Необходимо разделить первую загрузку страницы searh.asp и вторую
  2. Необходимо обеспечить пользователю возможность переход между страницами, на которые разбит запрос к БД
Первая задача решается путем получения названия метода, с помощью которого странице seach.asp переданы данные : GET или POST.

Если страница получила данные методом POST, то пользователь нажал на кнопку выполнения запроса, и нужно сгененерировать запрос на основе переданных параметров. Параметр curpage текущей страницы при этом устанавливатеся в 1.

Если страница получила данные методом GET то тут возможны два варианта: или пользователь первый раз загрузил страницу, или же пользователь нажал на ссылку перехода на одну из страниц запроса. В первом случае в строке адреса не будет находиться параметра curpage ( проверка на то, является ли он числом, даст false), во втором номер текущей страницы в выборке из БД будет числом, и параметру curpage надо его и происвоить.

Код, описывающий все эти действия , привожу ниже

if (String(Request.ServerVariables("Request_Method")).indexOf("POST")!=-1)
{
	// получить параметры запроса
	type_sql=Request.Form("type_sql ");
	// текущая старница в выборке - 1
	curpage=1;
}
else
{
	// получить прааметры запроса		
	type_sql =Request.QueryString("type_sql ");
	// isNaN(parseInt(String(Request.QueryString("curpage"))) 
	// возвращает true если curpage не является числом, 
	// то есть загрузились в первый раз
	curpage=(isNaN(parseInt(String(Request.QueryString("curpage")))))
	?1:parseInt(String(Request.QueryString("curpage")));
}
подключение к БД осуществляется следующим образом:
var conn1 = Server.CreateObject('ADODB.Connection');
conn1.Provider="sqloledb";
conn1.Open("Data Source=server_name;Initial Catalog=my_kat;",login,pass);

var rsTel= Server.CreateObject('ADODB.Recordset');

var sqlstr="select * from my_kat ";

rsTel.CursorType=1;
rsTel.CursorLocation=3;

rsTel.Open(sqlstr,conn1,3,3,1);
Вывод последовательности ссылок, осуществляющих переход между страницами выборки из БД
<%

rsTel.MoveFirst();

//rsTel.PageSize=20;  - устанавливаем если нужно
rsTel.AbsolutePage=curpage;	// текущая страница
var i;
for(i=1;i<=rsTel.PageCount;i++)
{
	%>
	<a href="search.asp?curpage=<%=i%>"><%=i%></a>
	<%
}
i=1;
%>

и вывод самой базы 
for(;i<=rsTel.PageSize;i++)
{
	if(rsTel.EOF) break	;
	// тут выводим поля базы
	rsTel.MoveNext();
}

rsTel.Close()
rsTel=null;
conn1.Close();
conn1=null;
Все гениальное просто.

Автор: Вадим Веденин

 

© журнал принадлежит Web Creation
по всем вопросам обращаться А. Кузьмин