Общая функция отображения базы данных. Требования следующие:
1. Может отображать указанные поля. Конечно, имена полей и отображаемый текст могут быть разными.
2. Может запрашивать несколько полей одновременно, поддерживая как нечеткие, так и точные методы запроса.
3. Предусмотрено два режима отображения: горизонтальное расположение и вертикальное расположение полей.
4. Может автоматически разбиваться на страницы.
5. Можно задать количество записей для отображения на каждой странице. Ну вот и все. В соответствии с этим требованием Аю написал следующую функцию.
Фактически, Аю написал здесь две функции: одна — TABDISP(), которая используется для отображения содержимого указанной таблицы, другая — ER(), небольшая функция обработки ошибок.
У этой функции 5 параметров (это много). Каждый параметр должен быть введен с данными и не может быть пустым, иначе произойдет ошибка.
1(TAB), имя вызываемой таблицы.
2 (DISPFILD), какие поля в таблице должны отображаться. Если имена полей отличаются от отображаемых символов, разделите их знаком <. Например, определенное имя поля: IMG, но оно должно отображаться как: Изображение на странице просто напишите Для IMG<изображения, если есть несколько полей, используйте «,» для разделения каждого поля. Увы, это долгая история.
3(FINDFILD), какие поля должны быть запрошены, а имена полей и отображаемые символы разделены знаком <.
4(PAGEN), сколько записей отображается на каждой странице.
5(FH), направление отображения. Если установлено значение S, оно отображается вертикально. Если установлено значение H, оно отображается горизонтально.
Возвращаемое значение функции истинно, если нет ошибок, в противном случае оно ложно.
В эту функцию не входит часть подключения к базе данных, поэтому вам придется подключиться к библиотеке самостоятельно. Кроме того, для повторных применений вы можете сохранить эту функцию в файл и затем включать этот файл при необходимости.
Взгляните на следующую функцию: (Не пропустите ее, в конце я приведу вам пример приложения)
<%
'Ниже определяет функцию TABDISP() для отображения таблиц, параметры TAB, имя отображаемой таблицы, DISPFILD, отображаемые поля, FINDFILD, поле запроса, PAGEN, количество отображаемых на странице, fh, направление отображения
'Если отображение прошло успешно, возвращаемое значение будет истинным; если оно не удалось, возвращаемое значение будет ложным.
'Используйте, чтобы разделить несколько полей
'Поле запроса должно быть включено в поле отображения.
'Если имя поля отличается от отображаемого имени, используйте <, чтобы разделить имя поля и отображаемое имя. Для поиска в поле имя поля и отображаемый символ должны быть разделены символом <.
'Направление отображения FH: «H» для горизонтального отображения, «S» для вертикального отображения, с учетом регистра.
ФУНКЦИЯ TABDISP(TAB,DISPFILD,FINDFILD,PAGEN,FH)
При ошибке Возобновить Далее
ЕСЛИ ДИСПФИЛД="" ТО ДИСПФИЛД="*"
ЕСЛИ PAGEN="" ТО PAGEN=15
DISPFILD1=DISPFILD&","
findfild1=findfild&","
dim findl(10),findr(10)
я1=1
делать, пока instr(findfild1,",")<>0
звезда=инстр(найтифилд1,",")
findl(i1)=влево(findfild1,звезда-1)
findr(i1)=findl(i1)
fildbak=findl(i1)
findl(i1)=left(fildbak,instr(fildbak,"<")-1)
findr(i1)=right(fildbak,len(fildbak)-instr(fildbak,"<"))
findfild1=right(findfild1,len(findfild1)-звезда)
я1=я1+1
петля
Response.Write "<table border='0' width='100%' cellpacing='0'><tr><form Method='GET'>"
Response.Write "<TD> " 'width='50%'
ЕСЛИ СЕССИЯ("FLMENUULBUP")<>"" ТО
Response.Write "Текущий столбец: <A HREF='FLMEN.ASP?MENULB="&SESSION("FLMENULBUP")&"'>"&MID(SESSION("FLMENULBUP"),4,200)&"</A>"
КОНЕЦ ЕСЛИ
ЕСЛИ СЕССИЯ("flmenulb")<> СЕССИЯ("FLMENULBUP") ТО
Response.Write " >> <A HREF='FLMEN.ASP?menulb="&SESSION("FLMENULBUP")&"&LB="&SESSION("flmenulb")&"'>"&MID(SESSION("flmenulb"),4,200 )&"</A>"
КОНЕЦ ЕСЛИ
Response.Write "</TD><td align='right' ></td><td align='right'><table border='0' cellpacing='0' cellpadding='0'> "
Response.Write "<tr><td rowspan='2'><img src='img/SEARCH.GIF' width='50'> </td>"
для i3=1 до i1-1
Ответ. Напишите "<td>"&findr(i3)&":</td>"
следующий
Response.Write "</tr><tr>" '<td></td>
для i2=1 до i1-1
Response.Write "<td><input type='text' name='key_word"&i2&"' size='8' value=''></td>"
следующий
ответ. Напишите "<tr></table></td><td width='20%'> <input type='checkbox' name='find_fr' value='yes'>Accurate<input type='submit ' value='Start' name='B_FIND'></td>"
Response.Write "</form> </tr></table>"
find_fr=request("find_fr")
ТиДжей=""
urllr="&find_fr="&find_fr
findlrdisp=""
ДЛЯ I3=1 ДО I1-1
TJ1=запрос("KEY_WORD"&I3)
urllr=urllr&"&key_word"&i3&"="&tj1
ЕСЛИ TJ1=FINDR(I3) ИЛИ TJ1="" ТО
ТДЖ1=""
ЕЩЕ
если find_fr<>"да", то
findlrdisp=findlrdisp&findr(i3)&"Содержит ""&TJ1&"" "
tj1=" И "&findL(I3)&" например '%"&TRIM(TJ1)&"%' "
еще
findlrdisp=findlrdisp&findr(i3)&"是""&TJ1&""
tj1=" AND "&FINDL(I3)&" = '"&TRIM(TJ1)&"' "
конец, если
КОНЕЦ ЕСЛИ
TJ=TJ&TJ1
ЕСЛИ TJ="" ТО
ТОПСН="ТОП 300"
ЕЩЕ
ТОПСН=""
КОНЕЦ ЕСЛИ
СЛЕДУЮЩИЙ
тусклый файл(35),dispfil(35),dispfildlr
диспфилдлр=""
я = 1
dispfild1=dispfild1
делать, пока instr(dispfild1,",")<>0
звезда=инстр(dispfild1,",")
поле (i) = влево (dispfild1, звезда-1)
диспфил (я) = файл (я)
если instr(fild(i),"<")<>0 тогда
fildbak=fild(i)
fild(i)=left(fildbak,instr(fildbak,"<")-1)
dispfil(i)=right(fildbak,len(fildbak)-instr(fildbak,"<"))
конец, если
dispfildlr=dispfildlr&филд(i)&","
dispfild1 = вправо (dispfild1,len(dispfild1)-звезда)
я=я+1
петля
dispfildlr = влево (dispfildlr, len (dispfildlr)-1)
SQL="SELECT "&topsn&" id,"&DISPFILDlr&" FROM "&TAB&" WHERE ID<>-1 "&tj&" упорядочить по -ID"
'Ответ.Запись sql
сеанс("tabsql")=sql
Set rs=Server.CreateObject("ADODB.RecordSet")
rs.Open sql,conn,1,3
если не rs.eof, то
страницыn=запрос("страницы")
если страницыn<=0 или страницыn="" тогда страницыn=1
rs.pagesize=страница
pagezs=rs.pagecount
ЕСЛИ cint(PAGESN)>pagezs ТОГДА страницыn=PAGEZS
zs=rs.recordcount
страница=(страницыn-1)*страница
страница rs.move, 1
if findlrdisp<>"" then Response.Write "После поиска записи "&findlrdisp&" выглядят следующим образом:"
Response.Write "<table border='0' width='90%'>"
если zs>=300 и topsn<>"" то
Response.Write "<tr> <form Method='POST' action='?"&urllr&"'><td width='54%'>Общее количество очень велико. Первые элементы "&ZS&" в настоящее время отображаются разделенными на страницы "&PAGEZS&". Теперь это страница "&PAGESN&"</td>"
еще
Response.Write "<tr> <form Method='POST' action='?"&urllr&"'><td width='54%'>Всего есть элементы "&ZS&", разделенные на страницы "&PAGEZS&". Текущий страница – это страница "&PAGESN&"</td>"
конец, если
Response.Write "<td width='11%' align='center'><a href='?PAGESN="&PAGESN-1&urllr&"'>Предыдущая страница</A></td>"
Response.Write "<td width='11%' align='center'><a href='?PAGESN="&PAGESN+1&urllr&"'>Следующая страница</A></td>"
Response.Write "<td width='24%' ALIGN='RIGHT'>Перейти на страницу"
Response.Write "<input type='text' name='PAGESN' size='2'>Page<input type='submit' value='GO' name='B1'></td></form> "
Response.Write "</tr></table> "
если fh="H" ТО
Response.Write " <table border='0' width='100%' cellpacing='1' cellpadding='0'>"
Response.Write " <tr bgcolor='#EDBAA5' align='center'> "
для ii=1 до i-1
Response.Write "<td>"&dispFIL(ii)&"</td>"
следующий
Ответ. Напишите "</tr>"
для iii=1 на страницу
Response.Write "<tr bgcolor='#FFFAEE'>"
ДЛЯ II=1 ДО I-1
Response.Write "<td>"&RS(fild(II))&"</td>"
СЛЕДУЮЩИЙ
Ответ. Напишите "</tr>"
RS.MOVENEXT
если rs.eof, то выходим для
следующий
Response.Write "</table>"
ЕЩЕ
Response.Write " <table border='0' width='100%' cellpacing='1' cellpadding='0'>"
для iii=1 на страницу
ДЛЯ II=1 ДО I-1
Response.Write "<tr><td bgcolor='#EDBAA5' ALIGN='RIGHT' WIDTH='20%'>"&dispFIL(ii)&":</td><td bgcolor='#FFFAEE'>"&RS (филд(II))&"</td></tr>"
СЛЕДУЮЩИЙ
Response.Write "<tr height='1'><td bgcolor='#CFBA9E' colspan='2' ALIGN='RIGHT' WIDTH='20%'> </td></tr>"
RS.MOVENEXT
если rs.eof, то выходим для
следующий
Response.Write "</table>"
КОНЕЦ ЕСЛИ
RS.закрыть
Response.Write "<table border='0' width='90%'>"
если zs>=300 и topsn<>"" то
Response.Write "<tr> <form Method='POST' action='?"&urllr&"'><td width='54%'>Общее количество очень велико. Первые элементы "&ZS&" в настоящее время отображаются разделенными на страницы "&PAGEZS&". Теперь это страница "&PAGESN&"</td>"
еще
Response.Write "<tr> <form Method='POST' action='?"&urllr&"'><td width='54%'>Всего есть элементы "&ZS&", разделенные на страницы "&PAGEZS&". Текущий страница – это страница "&PAGESN&"</td>"
конец, если
Response.Write "<td width='11%' align='center'><a href='?PAGESN="&PAGESN-1&urllr&"'>Предыдущая страница</A></td>"
Response.Write "<td width='11%' align='center'><a href='?PAGESN="&PAGESN+1&urllr&"'>Следующая страница</A></td>"
Response.Write "<td width='24%' ALIGN='RIGHT'>Перейти на страницу"
Response.Write "<input type='text' name='PAGESN' size='2'>Page<input type='submit' value='GO' name='B1'></td></form> "
Response.Write "</tr></table> "
еще
Ответ. Напишите «Подходящая запись не найдена».
конец, если
если эр(), то
tabdisp = Ложь
еще
tabdisp=Истина
конец, если
END FUNCTION
Функция Er() 'Функция обработки ошибок
Если Номер ошибки = 0 Тогда
Эр = Ложь
Еще
Ошиб.Очистить
Эр=Истина
Конец, если
Конечная функция
%>
Наконец дочитал функцию...
Вы немного устали, но не важно, внимательно вы смотрите или нет. В любом случае, просто настройте. Вот пример применения.
Сначала мы сохраняем предыдущую функцию, которая является частью между <% и %>, в файл с именем TABDISP.ASP.
Код выглядит следующим образом:
Отображение таблицы списка должностей, имя таблицы: ZG.
Есть несколько полей, включая идентификатор, имя, должность, TEL BP, DZ (адрес)
.
. . . . . .
Подключение к базе данных здесь пропущено и не будет записано.
%>
<!--#include file="TABDISP.asp"-->
<%
DISP="имя,должность,титул,ТЕЛ<телефон,BP<пейджинг,DZ<адрес"
НАЙТИ="Имя<Имя, Должность<Должность, ДЗ<Адрес"
ПАГЕН="15"
ФХ="Ч"
TAB="ZG"
ЕСЛИ НЕ TABDISP(TAB,DISP,FIND,PAGEN,FH) ТО
response.write "Произошла ошибка",
КОНЕЦ ЕСЛИ
УСТАНОВИТЬ ПОДКЛЮЧЕНИЕ = НИЧЕГО
%>
Просто дайте вышеуказанному содержимому имя файла, и все будет в порядке.