일반적인 데이터베이스 표시 기능은 다음과 같습니다.
1. 지정된 필드를 표시할 수 있습니다. 물론 필드 이름과 표시되는 텍스트가 다를 수 있습니다.
2. 퍼지 및 정확한 쿼리 방법을 모두 지원하여 여러 필드를 동시에 쿼리할 수 있습니다.
3. 필드의 수평 배열과 수직 배열의 두 가지 디스플레이 모드가 있습니다.
4. 자동으로 페이지를 매길 수 있습니다.
5. 각 페이지에 표시할 레코드 수를 설정할 수 있습니다. 이 요구 사항에 따라 Ayu는 다음 기능을 작성했습니다.
실제로 Ayu는 여기에 두 가지 함수를 작성했는데, 하나는 지정된 테이블의 내용을 표시하는 데 사용되는 TABDISP()이고, 다른 하나는 작은 오류 처리 함수입니다.
이 함수에는 5개의 매개변수가 있습니다(매우 많습니다). 각 매개변수는 데이터와 함께 입력되어야 하며 공백일 수 없습니다. 그렇지 않으면 오류가 발생합니다.
1(TAB)은 호출할 테이블의 이름이다.
2(DISPFILD), 테이블의 어떤 필드가 표시되어야 하는지, 필드 이름이 표시할 문자와 다른 경우 <로 구분합니다. 예를 들어 특정 필드 이름은 IMG이지만 다음과 같이 표시되어야 합니다. 페이지에 그림을 입력하고 IMG<그림의 경우 필드가 여러 개인 경우 ","를 사용하여 각 필드를 구분합니다.
3(FINDFILD), 쿼리할 필드와 표시할 필드 이름 및 문자는 <로 구분됩니다.
4(PAGEN), 각 페이지에 몇 개의 레코드가 표시되는지.
5(FH)는 표시 방향입니다. S일 경우 수직으로 표시됩니다. H일 경우 수평으로 표시됩니다.
함수의 반환 값은 오류가 없으면 true이고, 오류가 없으면 false입니다.
이 기능에는 데이터베이스에 연결하는 부분이 포함되어 있지 않으므로 직접 라이브러리에 연결해야 합니다. 또한, 반복적으로 적용할 경우에는 이 기능을 파일로 저장한 후 필요할 때 이 파일을 포함시킬 수 있습니다.
다음 기능을 살펴보세요. ( 놓치지 마세요. 마지막에 적용 예시를 보여드리겠습니다.)
<%
'다음은 테이블을 표시하는 함수 TABDISP(), 매개변수 TAB, 표시할 테이블 이름, DISPFILD, 표시할 필드, FINDFILD, 쿼리 필드, PAGEN, 페이지당 표시되는 수, fh, 디스플레이 방향
'표시가 성공하면 반환 값은 true이고, 실패하면 반환 값은 false입니다.
'여러 필드를 구분하는 데 사용
'쿼리 필드는 표시 필드에 포함되어야 합니다.
'필드 이름이 표시할 이름과 다를 경우 <를 사용하여 필드 이름과 표시 문자를 구분해야 합니다.
'FH 표시 방향은 가로 표시의 경우 "H", 세로 표시의 경우 "S"이며 대소문자를 구분합니다.
기능 TABDISP(TAB,DISPFILD,FINDFILD,PAGEN,FH)
오류 발생 시 다음 재개
DISPFILD=""인 경우 DISPFILD="*"
IF PAGEN=""이면 PAGEN=15입니다.
DISPFILD1=DISPFILD&","
findfild1=findfild&","
희미한 findl(10),findr(10)
i1=1
instr(findfild1,",")<>0 동안 수행
star=instr(findfild1,",")
findl(i1)=왼쪽(findfild1,스타-1)
찾기(i1)=찾기(i1)
fildbak=findl(i1)
findl(i1)=왼쪽(fildbak,instr(fildbak,"<")-1)
findr(i1)=right(fildbak,len(fildbak)-instr(fildbak,"<"))
findfild1=right(findfild1,len(findfild1)-스타)
i1=i1+1
고리
Response.Write "<테이블 테두리='0' 너비='100%' 셀 간격='0'><tr><양식 방법='GET'>"
응답.쓰기 "<TD > " '너비='50%'
IF SESSION("FLMENULBUP")<>"" THEN
Response.Write "현재 열: <A HREF='FLMEN.ASP?MENULB="&SESSION("FLMENULBUP")&"'>"&MID(SESSION("FLMENULBUP"),4,200)&"</A>"
종료 IF
IF SESSION("flmenulb")<> SESSION("FLMENULBUP") THEN
Response.Write " >> <A HREF='FLMEN.ASP?menulb="&SESSION("FLMENULBUP")&"&LB="&SESSION("flmenulb")&"'>"&MID(SESSION("flmenulb"),4,200 )&"</A>"
종료 IF
Response.Write "</TD><td align='right' ></td><td align='right'><table border='0' cellpacing='0' cellpadding='0'> "
응답.쓰기 "<tr><td rowspan='2'><img src='img/SEARCH.GIF' width='50'> </td>"
i3=1에서 i1-1까지
응답.쓰기 "<td>"&findr(i3)&":</td>"
다음
응답.쓰기 "</tr><tr>" '<td></td>
i2=1에서 i1-1까지
응답.쓰기 "<td><input type='text' name='key_word"&i2&"' size='8' value=''></td>"
next
Response.Write "<tr></table></td><td width='20%'> <input type='checkbox' name='find_fr' value='yes'>정확<input type='submit ' 값='시작' 이름='B_FIND'></td>"
응답.쓰기 "</form> </tr></table>"
find_fr=요청("find_fr")
TJ=""
urllr="&find_fr="&find_fr
findlrdisp=""
I3=1에서 I1-1까지
TJ1=요청("KEY_WORD"&I3)
urlr=urllr&"&key_word"&i3&"="&tj1
IF TJ1=FINDR(I3) 또는 TJ1=""이면
TJ1=""
또 다른
find_fr<>"yes"이면
findlrdisp=findlrdisp&findr(i3)&"Contains ""&TJ1&"" "
tj1=" AND "&findL(I3)&" like '%"&TRIM(TJ1)&"%' "
또 다른
findlrdisp=findlrdisp&findr(i3)&"是""&TJ1&""
tj1=" AND "&FINDL(I3)&" = '"&TRIM(TJ1)&"' "
종료하면
종료 IF
TJ=TJ&TJ1
TJ=""이면
TOPSN=" TOP 300 "
또 다른
TOPSN=""
종료 IF
NEXT
희미한 fild(35),dispfil(35),dispfildlr
dispfildlr=""
나는=1
dispfild1=dispfild1
instr(dispfild1,",")<>0 동안 수행
star=instr(dispfild1,",")
fild(i)=왼쪽(dispfild1,별-1)
dispfil(i)=fild(i)
if instr(fild(i),"<")<>0 그러면
fildbak=fild(i)
fild(i)=왼쪽(fildbak,instr(fildbak,"<")-1)
dispfil(i)=right(fildbak,len(fildbak)-instr(fildbak,"<"))
종료하면
dispfildlr=dispfildlr&fild(i)&","
dispfild1=오른쪽(dispfild1,len(dispfild1)-별)
나=나+1
고리
dispfildlr=왼쪽(dispfildlr,len(dispfildlr)-1)
SQL="SELECT "&topsn&" id,"&DISPFILDlr&" FROM "&TAB&" WHERE ID<>-1 "&tj&" order by -ID"
'응답.SQL 쓰기
세션("tabsql")=sql
rs=Server.CreateObject("ADODB.RecordSet")를 설정합니다.
rs.SQL,conn,1,3 열기
rs.eof가 아니라면
페이지n=요청("페이지n")
페이지n<=0 또는 페이지n=""인 경우 페이지n=1
rs.pagesize=페이지n
pagezs=rs.pagecount
IF cint(PAGESN)>pagezs THEN 페이지n=PAGEZS
zs=rs.recordcount
페이지=(페이지n-1)*페이지
rs.이동페이지,1
if findlrdisp<>"" then Response.Write "검색 결과 "&findlrdisp&"의 기록은 다음과 같습니다."
응답.쓰기 "<테이블 테두리='0' 너비='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'>페이지<input type='submit' value='GO' name='B1'></td></form> "
응답.쓰기 "</tr></table> "
fh="H"이면
Response.Write " <테이블 테두리='0' 너비='100%' 셀 간격='1' cellpadding='0'>"
Response.Write " <tr bgcolor='#EDBAA5' align='center'> "
ii=1 ~ i-1의 경우
응답."<td>"&dispFIL(ii)&"</td>" 쓰기
다음
응답."</tr>" 쓰기
iii=1에서 페이지까지
응답.쓰기 "<tr bgcolor='#FFFAEE'>"
II=1부터 I-1까지
응답."<td>"&RS(fild(II))&"</td>" 쓰기
다음
응답."</tr>" 쓰기
RS.MOVENEXT
rs.eof이면 종료합니다.
다음
응답.쓰기 "</table>"
또 다른
Response.Write " <테이블 테두리='0' 너비='100%' 셀 간격='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 (fild(II))&"</td></tr>"
다음
응답.쓰기 "<tr height='1'><td bgcolor='#CFBA9E' colspan='2' ALIGN='RIGHT' WIDTH='20%'> </td></tr>"
RS.MOVENEXT
rs.eof이면 종료합니다.
다음
응답.쓰기 "</table>"
종료 IF
RS.닫기
응답.쓰기 "<테이블 테두리='0' 너비='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'>페이지<input type='submit' value='GO' name='B1'></td></form> "
응답.쓰기 "</tr></table> "
또 다른
응답.쓰기 "적절한 기록을 찾을 수 없습니다"
종료하면
만약 er()라면
tabdisp=거짓
또 다른
tabdisp=참
종료하면
END FUNCTION
함수 Er() '에러 처리 함수
Err.Number = 0이면
어=거짓
또 다른
Err.Clear
어=참
종료 조건
기능 종료
%>
드디어 함수 읽기가 끝났습니다..
조금 피곤하시겠지만, 잘 살펴보셔도 상관은 없습니다. 어쨌든, 적용 예시를 보여드리겠습니다.
먼저 <%와 %> 사이의 부분인 이전 함수를 TABDISP.ASP라는 파일에 저장합니다.
코드는 다음과 같습니다:
작업 명단 테이블 표시, 테이블 이름: ZG
ID, 이름, 직위, TEL BP, DZ(주소) 등 여러 필드가 있습니다
.
. . . . . .
데이터베이스 연결은 여기에서 건너뛰고 기록되지 않습니다.
%>
<!--#include 파일="TABDISP.asp"-->
<%
DISP="이름,위치,제목,TEL<전화,BP<페이징,DZ<주소"
FIND="이름<이름, 직위<직위, DZ<주소"
PAGEN="15"
FH="H"
TAB="ZG"
TABDISP(TAB,DISP,FIND,PAGEN,FH)가 아닌 경우
response.write "오류가 발생했습니다."
종료 IF
CONN=아무것도 설정하지 않음
%>
위의 내용에 파일 이름을 지정하면 모든 것이 잘 됩니다.