프로그램 구현 기능: 두 개의 데이터 테이블에 데이터를 페이징 표시
최근에는 비교적 드문 요구 사항이 발생했습니다. 귀하도 이러한 문제를 겪었는지 궁금해서고객 요구 사항: 데이터의 두 부분, 두 부분
을 공유하고 싶습니다.
데이터베이스의 두 테이블은 데이터베이스 DB1과 DB2, 테이블 Table1과 Table2로 정의되어 있으며, 이 두 테이블의 데이터는 페이지의 상단과 하단에 각각 표시되어야 하며 동일한 페이징 번호가 표시되어야 합니다. 충분하지 않으면 데이터의 두 번째 부분이
'/*code*/
<%
Set objConn1=Server.CreateObject("ADODB.Recordset")
에 채워집니다.
objConn2=Server.CreateObject("ADODB.Recordset") 설정
objConn1.Open "PROVIDER=SQLOLEDB;데이터 소스=localhost;UID=sa;PWD=123;DATABASE=DB1"
objConn2.Open "PROVIDER=SQLOLEDB;데이터 소스=localhost;UID=sa;PWD=123;DATABASE=DB2"
Page=CLng(Request.QueryString("페이지"))
page=""인 경우
페이지=1
종료하면
StrSQL1="ID 설명별로 Table1 순서에서 *를 선택합니다."
StrSQL2="select * from Table2 order by ID desc"
Record_count1=Clng(objConn1.execute(StrSQL1)(0)) '첫 번째 테이블의 레코드 수를 가져옵니다.
Record_count2=Clng(objConn2.execute(StrSQL2)(0))'두 번째 테이블의 레코드 수를 가져옵니다.
Record_count=record_count1+record_count2 '두 테이블의 레코드 수를 가져오고
If Record_count>0 Then
page_size1=5 '페이지당 첫 번째 테이블에 표시되는 데이터의 기본 부분 수
page_size2=5 '페이지당 두 번째 테이블의 부분 데이터의 기본 표시 수
page_count1=CInt(record_count1/page_size1)
If (record_count1 Mod page_size1)<(page_size1/2) Then page_count1=page_count1+1 '데이터의 첫 번째 부분의 페이지 번호를 가져옵니다.
page_count2=CInt(record_count2/page_size2)
If (record_count2 Mod page_size2)<(page_size2/2) Then page_count2=page_count2+1'데이터의 두 번째 부분의 페이지 번호를 가져옵니다.
if Cint(page_count2)=cint(page) then '데이터의 두 번째 부분이 작아야 합니다. 여기서 현재 페이지가 데이터가 적은 마지막 페이지인지 여부를 확인합니다.
thepageRecordcount=record_count2-(page-1)*5 '데이터의 두 번째 부분의 마지막 페이지에 표시되는 데이터 수
page_size1=10-cint(thepageRecordcount) '데이터의 첫 번째 부분 중 두 번째 부분의 마지막 페이지에 표시되는 항목 수'
page_size1=cint(thepageRecordcount) '이 페이지의 첫 번째 부분에 표시된 항목 수를 가져옵니다.
elseif cint(page)>cint(page_count2) then '이후 데이터의 첫 번째 부분은 모두
page_size1=10
이 됩니다.
page_size2=0
종료되는 경우
page_count=CInt(record_count/(page_size1+page_size2) '두 카테고리를 합친 페이지 수
If (record_count Mod (page_size1+page_size2))<((page_size1+page_size2)/2) Then page_count=page_count+1
If Page < 1 Then
페이지=1
종료 조건
페이지 > page_count이면
페이지 = page_count
Dim Pagefrom,Pageto
의 경우 종료
Pagefrom=페이지-10
Pageto=page+10
if Pagefrom<1이면
페이지=1
종료하면
Pageto>record_count이면
페이지토=page_count
종료하면
종료 조건
If Page<=1 Then '첫 번째 페이지에 쿼리 표시
StrSQL1="상위 "&page_size1&" * Table1에서 선택 "
StrSQL1=StrSQL1&" ID별 순서 설명"
StrSQl2="상위 "&page_size1&" * Table2에서 선택 "
StrSQL2=StrSQL2&" ID 설명으로 주문"
Else 'N페이지에 쿼리 표시
StrSQL1="테이블1에서 상위 "&(Page-1)*page_size1&" ID 선택 "
StrSQL1=StrSQL1&" ID 설명으로 주문"
StrSQL1="("&StrSQL1&")에서 상위 1개 ID 선택 DERIVEDTBL ID별 주문 "
'응답.쓰기(SQL)
id =Trim(objConn1.execute(StrSQL1)(0))
StrSQL1="상위 "&page_size1&" * Table1에서 선택"
StrSQL1=StrSQL1&" 여기서 id<'"&id&"'"
StrSQL1=StrSQL1&" ID 설명으로 주문"
StrSQL2="Table2에서 상위 "&(Page-1)*page_size2&" ID 선택 "
StrSQL2=StrSQL2&" ID 설명으로 주문"
StrSQL2="("&StrSQL2&")에서 상위 1개 ID 선택 DERIVEDTBL ID별 주문 "
id =Trim(objconn2.execute(StrSQL2)(0))
StrSQL2="상단 "&page_size2&" * Table2에서 선택 "
StrSQL2=StrSQL2&" 여기서 id<'"&id &"'"
StrSQL2=StrSQL2&" id Desc에 따른 주문"
End If
%>
<%
Record_count>0이면
%>
<%
Rs1=Server.CreateObject("Adodb.Recordset") 설정
rs1.openStrSQL1,objconn1
n = 1인 경우 page_size1로
rs1.Eof인 경우 다음을 위해 종료합니다.
%>
<!--표시된 콘텐츠 루프의 첫 번째 부분-->
<%
rs1.다음으로 이동
rs1.EOF인 경우 종료 대상
다음
RS1.닫기
rs1=아무것도 설정하지 않음
%>
<%
Rs2=Server.CreateObject("Adodb.Recordset") 설정
rs2.openStrSQL2,objconn2
n = 1인 경우 page_size2로
rs2.Eof인 경우 다음을 위해 종료합니다.
%>
<!--표시된 콘텐츠 루프의 두 번째 부분-->
<%
rs2.다음으로 이동
rs2.EOF인 경우 다음을 위해 종료합니다.
다음
RS2.닫기
rs2=아무것도 설정하지 않음
%>
<!--결과 페이지 번호-->
<%if page<>"1" then%><a href=?page=<%=Cint(page-1)%>>이전 페이지</a> <%end if%>
<% '페이지 번호 연결을 작성하려면 for 루프를 사용하세요.
i=Pagefrom에서 Pageto로
i=0이면
나는=1
if i<>Cint(page)이면
종료됩니다
.
strurl="<a href=?page="&i&"><font color=#000000>"&i&"</font></a>"
else
strurl="<b><font color=#ce0031>"&i&"</font></b>"
response.write strurl
이면 끝납니다.
응답.쓰기 " "
다음
%>
<%if page_count =1 또는 (page_count-Cint(페이지))=0이면
응답.쓰기("")
또 다른
response.Write "<a href=?page="&Cint(page+1)&">다음 페이지</a>"
종료하면
%>
<!--결과 페이지 번호-->
'/*코드 끝*/
레벨이 제한되어 있고, 프로그램이 거칠고, 부족한 부분이 있을 수 있어요~비판하고 고쳐주셨으면 좋겠습니다~