이 기사는 주로 ADO 데이터베이스 페이징을 표시하는 방법을 소개합니다
데이터베이스의 쿼리 결과를 어떻게 페이지를 이끌어 낼 수 있습니까? 실제로 여러 가지 방법이 있지만 두 가지 주요 방법이 있습니다.
1. 쿼리 조건을 한 번에 레코드 세트로 충족시키는 데이터베이스의 모든 레코드를 읽은 다음 ADO 레코드 세트 객체를 통해 PAGING 처리를 지원하는 몇 가지 속성이 제공됩니다. 페이징 처리를 관리하기위한 (페이지 번호) 및 AbsolutePage (Absolute Page).
2. 고객의 지침에 따라 지정된 레코드 수를 읽고 매번 쿼리 조건을 충족하는 레코드에서 표시해야합니다.
두 사람의 주요 차이점은 전자가 한 번에 모든 레코드를 메모리로 읽은 다음 페이지 매김 디스플레이의 영향을 달성하기위한 지침에 따라 판단과 분석을 한 반면 후자는 지침에 따라 판단을 내리고 설정한다는 것입니다. 쿼리 조건을 충족시키기 위해 지정된 번호는 메모리로 읽히므로 Paglination 디스플레이의 기능을 직접 달성합니다.
데이터베이스의 레코드 수가 수만 명 이상에 도달하면 첫 번째 방법의 실행 효율이 두 번째 방법의 실행 효율보다 상당히 낮을 것이라고 분명히 느낄 수 있습니다. 모든 고객이 페이지를 쿼리 할 때 모든 결과가 필요하기 때문입니다. 기준을 충족하는 레코드는 서버 메모리에 저장된 다음 페이징 등으로 처리됩니다. 그러나 서버의 데이터베이스의 레코드 수와 동시에 온라인으로 사람들의 수가 크지 않으면이 시점에서 첫 번째 방법은 일반적으로 사용됩니다. 첫 번째 메소드의 ASP 프로그램은 비교적 쓰여져 있습니다. 두 번째 방법은 훨씬 간단하고 명확합니다.
여기에서 저자는 공통 ASP BBS 프로그램을 예로 들어 BBS 프로그램에서 Pagination Display 기능을 구현하는 방법을 분석합니다. 너무 많아서, 프로그램 예제는 이전에 사용한 첫 번째 페이지 매김 디스플레이 방법입니다.
ADO가 데이터베이스에 액세스 할 때 Pagination 표시는 실제로 레코드 세트의 레코드를 작동하는 것입니다. 따라서 먼저 Reordset 객체의 속성과 방법을 이해해야합니다.
BOF 속성 : 현재 표시기는 레코드 세트와의 첫 번째 트랜잭션을 나타냅니다.
EOF 속성 : 현재 표시기는 레코드 세트와의 마지막 트랜잭션을 나타냅니다.
이동 방법 : 레코드 세트에서 메트릭을 레코드로 이동하십시오.
AbsolutePage 속성 : 어떤 페이지에있는 레코드의 현재 위치를 설정합니다.
PageCount 속성 : 레코드 세트 객체에 포함 된 데이터의 페이지 수를 표시합니다.
Pagesize 속성 : 레코드 세트 객체의 각 페이지에 표시된 레코드 수를 표시합니다.
RecordCount 속성 : RecordSet 객체의 총 레코드 수를 표시합니다.
이러한 중요한 속성과 방법을 자세히 살펴 보겠습니다.
1. BOF 및 EOF 속성
일반적으로 BOF 및 EOF 속성을 사용하여 BOF 및 EOF 속성을 확인하기 위해 ASP 프로그램에 코드를 작성합니다. 라인은 레코드 세트 객체의 범위가 초과되었습니다.
예를 들면 : < %rs.eof가 아닌 경우 ... %>
< %가 아닌 경우 (rs.bof 및 rs.eof) %>
현재 레코드 위치가 레코드 세트 오브젝트의 첫 번째 행 앞에있는 경우 BOF 속성은 true를 반환하고 그렇지 않으면 False를 반환합니다.
현재 레코드 위치가 레코드 세트 오브젝트의 마지막 행 뒤에있는 경우, EOF 속성은 true를 반환하고 그렇지 않으면 false를 반환합니다.
BOF와 EOF는 모두 false입니다. 표시기가 레코드 세트에 있음을 의미합니다.
BOF는 사실입니다. 현재 표시기는 레코드 세트에 대한 첫 번째 레코드를 나타냅니다. EOF는 사실입니다. 현재 표시기는 레코드 세트에 대한 마지막 레코드를 나타냅니다.
BOF와 EOF는 모두 사실입니다. 레코드 세트에는 레코드가 없습니다.
2. 방법을 움직입니다
이동 방법을 사용하여 메트릭을 레코드 세트의 레코드로 이동할 수 있으며 구문은 다음과 같습니다.
Rs. Move NumRecords, 시작
여기서 RS는 현재 레코드 위치가 이동하고자하는 레코드 세트 객체를 나타내며, 현재 레코드 위치의 움직임 수를 설정하는 옵션입니다 시작 태그.
모든 레코드 객체는 이동 방법이 0보다 큰 경우, 현재 레코드 위치가 시작되면 이동이 발생합니다 방법, 오류가 생성됩니다.
MoveFirst Method : 현재 레코드 위치를 첫 번째 레코드로 이동하십시오.
Movelast Method : 현재 레코드 위치를 마지막 레코드로 이동하십시오.
MOVENEXT 메소드 : 현재 레코드 위치를 다음 레코드로 이동하십시오. MovePrevious Method : 현재 레코드 위치를 이전 레코드로 이동하십시오.
[n] 메소드 이동 : 색인을 nth 펜 레코드로 이동하고 N은 0부터 시작됩니다.
3. AbsolutePage 속성
AbsolutePage 속성은 Pageize 속성을 사용하여 Recordset 객체를 논리 페이지로 나누고 각 페이지의 레코드 수는 Pagesize입니다. Pagesize Records). 모든 데이터 제공 업체 가이 속성을 지원하는 것은 아니므로 여기에서 사용할 때주의해야합니다.
AbsolutePosition 속성과 동일하게 AbsolutePage 속성은 1로 시작합니다. 현재 레코드가 레코드 세트의 첫 번째 행 인 경우 AbsolutePage는 1입니다. AbsolutePage 속성은 지정된 페이지의 첫 번째 행 레코드 위치로 이동하도록 설정할 수 있습니다.
4. Absoluteposition 속성
레코드 세트에서 메트릭의 현재 위치를 결정 해야하는 경우 AbsolutePosition 속성을 사용할 수 있습니다.
AbsolutePosition 속성의 값은 첫 번째 트랜잭션에 비해 현재 지표의 위치, 즉 1부터 시작하는 첫 번째 트랜잭션의 위치는 1입니다.
레코드 세트에 액세스 할 때 레코드 세트가 매번 동일한 순서로 나타날 것이라는 보장은 없습니다.
AbsolutePosition을 활성화하려면 먼저 사용자 커서 (포인터)를 사용하도록 설정해야하며 ASP 코드는 다음과 같습니다.
rs2.cursorlocation = 3
5. PageCount 속성
PageCount 속성을 사용하여 레코드 세트 객체에 포함 된 데이터의 페이지 수를 결정하십시오. 여기의 페이지는 데이터 레코드 모음이며, 그 크기는 Pagesize 속성 설정과 동일합니다. 마지막 페이지의 레코드 수가 페이지 규모의 값보다 적 으면 마지막 페이지는 PageCount의 페이지로 간주됩니다. . 모든 데이터 제공 업체 가이 속성을 지원하는 것은 아닙니다.
6. Pagesize 속성
Pagesize 속성은 데이터베이스를 사용할 때 Ado Paginates를 결정하는 핵심입니다. 페이지 크기를 설정하고 생성하여 AbsolutePage 속성을 다른 논리 페이지의 첫 번째 레코드로 옮길 수 있습니다. Pagesize 속성은 언제든지 설정할 수 있습니다.
7. RecordCount 속성
이것은 또한 매우 일반적이고 중요한 속성입니다. 예 : < %totle = rs.recordCount %>
위의 레코드 세트 객체의 특성과 방법을 이해 한 후에는 페이지 매김 디스플레이의 목적을 달성하기 위해이를 사용하는 방법을 고려해 봅시다. 먼저 Pagesize 속성에 대한 값을 설정하여 레코드 그룹에서 가져온 페이지를 지정한 다음 레코드 수를 결정합니다 표시된 페이지를 얻으려면 최종적으로 지정된 페이지에 액세스 할 수 있습니다. 매우 복잡하지 않은 것 같습니다.
우리는 다음과 같은 간단한 BBS 응용 프로그램을 구축했습니다. 데이터베이스에는 다음과 같은 5 개의 필드가 있습니다. 게시 시간. 데이터베이스의 DSN은 BBS입니다. 쉽게 통화 할 수 있도록 Showlist ()라는 프로세스에 게시물 페이징을 표시하는 모든 단계를 담았습니다. 절차는 다음과 같습니다.
?
- '---- BBS 디스플레이 포스트 페이징 ---
- <%subshowlist ()%>
- <%
- pgsz = 20 '설정 스위치, 각 페이지에 표시된 게시물 수를 지정하고 기본값은 페이지 당 20 개의 게시물입니다.
- setconn = server.createobject (adodb.connection)
- setrs = server.createobject (adodb.recordset)
- sql = select*fromMessageOrderByIddesc
- '모든 게시물을 쿼리하고 Post ID에 의해 역순으로 정렬됩니다.
- conn.openbbs
- Rs.Opensql, Conn, 1,1
- ifrs.recordCount = 0then
- response.write <p> <center> 죄송합니다. 데이터베이스에는 관련 정보가 없습니다! </센터> </p>
- 또 다른
- rs.pagesize = cint (pgsz) 'Pagesize 속성의 값을 설정합니다
- total = int (rs.recordcount/pgsz*-1)*-1 '표시 할 수있는 총 페이지 수를 계산합니다.
- pageno = 요청 (pageno)
- ifpageno = 그런 다음
- pageno = 1
- 또 다른
- pageno = pageno+1
- pageno = pageno-1
- endif
- scrollaction = request (scrollaction)
- ifscrollaction = 이전 페이지
- pageno = pageno-1
- endif
- ifscrollaction = 다음 페이지
- pageno = pageno+1
- endif
- ifpageno <1then
- pageno = 1
- endif
- n = 1
- rs.AbsolutePage = pageno
- 응답. write <center>
- 위치 = rs.pagesize*pageno
- pagebegin = position-rs.pagesize+1
- ifposition <rs.recordcountthen
- pagend = 위치
- 또 다른
- pagend = rs.recordcout
- endif
- response.write <p> <fontcolor = 'Navy'> <b> 데이터베이스 쿼리 결과 : </b>
- Response.write (조건을 충족하는 & rs.recordCount 및 정보의 전체가 있습니다.
- response.write <tableWidth = 600border = 1CellPadding = 4CellSpacing = 0BGCOLOR =#ffffff>
- 응답 <trbgcolor =#5fb5e2> <fontsize = 2> <td> <b> 테마 </b> </td> <td> <b> 사용자 </b> </td> <td> <b> 이메일 </b> </td> <td> <b> 게시 날짜 </b> </td> </font> <trbgcolor =#ffffff>
- Dowhilenot (rsisnothing)
- RowCount = Rs.Pagesize
- dowhilenotrs.eofandrowcount> 0
- ifn = 1then
- 응답 <trbgcolor =#ffffff>
- 또 다른
- 응답 <trbgcolor =#eeeee>
- endif
- n = 1-n%>
- <td> <spanstyle = font-size : 9pt> <ahref = 'view.asp? key = <%= rs (id)%>'> <%= rs (주제)%> </a> </span> </td>
- <td> <spanstyle = font-size : 9pt> <%= rs (이름)%> </a> </span> </td>
- <td> <spanstyle = font-size : 9pt> <ahref = mailto : <%= rs (이메일)%>> <%= rs (이메일)%> </a> </span> </td>
- <td> <spanstyle = font-size : 9pt> <%= rs (postdate)%> </span> </td>
- </tr>
- <%
- RowCount = RowCount-1
- rs.movenext
- 고리
- setrs = rs.nextrecordset
- 고리
- conn.close
- setrs = 아무것도
- setconn = 아무것도 없습니다
- %>
- </테이블>
- <formmethod = getAction = list.asp>
- <inputtype = hiddenname = pagenovalue = <%= pageno%>>
- <%
- ifpageno> 1then
- response.write <inputtype = subblyname = 'scrollaction'Value ='previous page '>
- endif
- ifrowcount = 0andpageno <> Totalthen
- response.write <inputtype = submitname = 'scrollaction'Value ='다음 페이지 '>
- endif
- 응답 </form>
- endif
- %>
- <%endub%>