권장 : ASP를 사용하여 데이터베이스에서보기 및 저장된 절차를 호출 1. 서문 ASP (Active Server Pages)는 서버 측 스크립팅 환경으로 Microsoft의 IIS3.0 이상에서 지원됩니다. 동적 웹 페이지를 만들거나 강력한 웹 애플리케이션을 생성하는 데 사용할 수 있습니다. ASP 페이지에는 HTML 태그, 텍스트가 포함됩니다
ADO가 데이터베이스에 액세스 할 때 Pagination 디스플레이는 무엇입니까? 현재 많은 웹 사이트에서 전자 게시판 보드 프로그램을 사용한 경우 페이지의 읽기 속도를 향상시키기 위해 전자 게시판 보드 프로그램이 일반적으로 한 페이지에 모든 게시물을 나열하지는 않지만 20 개의 게시물과 같은 페이지 당 특정 게시물을 표시하기 위해 여러 페이지로 나누어줍니다. 이것은 데이터베이스 쿼리의 Pagination 표시입니다. 아직 이해하지 못하면 Yahoo와 같은 검색 엔진의 쿼리 결과를 살펴보면 이해하게됩니다.
그렇다면 데이터베이스의 쿼리 결과를 어떻게 페이지를 찍을 수 있습니까? 실제로 여러 가지 방법이 있지만 두 가지 주요 방법이 있습니다.
1. 쿼리 조건을 한 번에 레코드 세트로 충족시키는 데이터베이스의 모든 레코드를 읽고 메모리에 저장하십시오. 그런 다음 페이징 처리를 지원하는 ADO RecordSet 객체에서 제공 한 여러 속성을 통해 페이징 처리를 관리합니다. Paging Processing (페이지 크기), PageCount (페이지 번호) 및 AbsolutePage (Absolute Pages).
2. 고객의 지침에 따라 지정된 레코드 수를 읽고 매번 쿼리 조건을 충족하는 레코드에서 표시해야합니다.
두 가지의 주요 차이점은 전자가 한 번에 모든 레코드를 메모리로 읽은 다음 Paglination Display의 효과를 달성하기위한 지침에 따라 판단과 분석을 순서대로 작성하고, 후자는 지침을 기반으로 판단을 내리고 쿼리 조건을 메모리로 충족시키는 지정된 수의 레코드를 읽으므로 Paglination Dispiation의 기능을 직접 달성합니다.
데이터베이스의 레코드 수가 수만 명 이상에 도달하면 첫 번째 방법의 실행 효율성이 두 번째 방법의 실행 효율보다 상당히 낮을 것이라고 분명히 생각할 수 있습니다. 각 고객이 페이지를 쿼리 할 때 기준을 충족하는 모든 레코드는 서버 메모리에 저장되어야하며, 페이징 및 기타 처리가 수행되기 때문입니다. 100 명 이상의 고객이 동시에 온라인으로 쿼리하면 ASP 응용 프로그램의 실행 효율성에 큰 영향을 미칩니다. 그러나 서버의 레코드 수와 동시에 온라인으로 사람의 수가 크지 않으면이 둘의 실행 효율은 거의 동일합니다. 이 시점에서 첫 번째 방법은 일반적으로 채택됩니다. 첫 번째 방법의 ASP 프로그램 쓰기는 두 번째 방법보다 훨씬 간단하고 명확하기 때문입니다.
여기서 저자는 BBS 프로그램에서 Pagination Display 기능을 구현하는 방법을 분석하기위한 공통 ASP BBS 프로그램을 예로들 것입니다. 데이터베이스 레코드 수와 우리가 일반적으로 사용하는 BBS 프로그램에서 동시에 액세스하는 사람들의 수는 너무 많지 않기 때문에 다음 프로그램 예제는 이전에 소개 된 첫 번째 페이지 매김 디스플레이 방법입니다.
ADO가 데이터베이스에 액세스 할 때 Pagination 표시는 실제로 레코드 세트의 레코드를 작동하는 것입니다. 따라서 먼저 Reordset 객체의 속성과 방법을 이해해야합니다.
BOF 속성 : 현재 표시기는 레코드 세트와의 첫 번째 트랜잭션을 나타냅니다.
EOF 속성 : 현재 표시기는 레코드 세트와의 마지막 트랜잭션을 나타냅니다.
이동 방법 : 레코드 세트에서 메트릭을 레코드로 이동하십시오.
AbsolutePage 속성 : 어떤 페이지에있는 레코드의 현재 위치를 설정합니다. AbsolutePosition 속성 : 레코드 세트에서 메트릭의 현재 위치.
PageCount 속성 : 레코드 세트 객체에 포함 된 데이터의 페이지 수를 표시합니다.
Pagesize 속성 : 레코드 세트 객체의 각 페이지에 표시된 레코드 수를 표시합니다.
RecordCount 속성 : RecordSet 객체의 총 레코드 수를 표시합니다.
이러한 중요한 속성과 방법을 자세히 살펴 보겠습니다.
1. BOF 및 EOF 속성
일반적으로 ASP 프로그램에 코드를 작성하여 BOF 및 EOF 속성을 확인하여 현재 지표가 지적한 레코드 세트의 위치를 알 수 있습니다. BOF 및 EOF 속성을 사용하여 레코드 세트 객체에 레코드가 포함되어 있는지 또는 이동 레코드 라인이 레코드 세트 객체의 범위를 초과했는지 여부를 알 수 있습니다.
좋다:
< % rs.eof가 아닌 경우 ... %>
< %가 아닌 경우 (rs.bof 및 rs.eof) %>
현재 레코드 위치가 레코드 세트 오브젝트의 첫 번째 행 앞에있는 경우 BOF 속성은 true를 반환하고 그렇지 않으면 False를 반환합니다.
현재 레코드 위치가 레코드 세트 오브젝트의 마지막 행 뒤에있는 경우, EOF 속성은 true를 반환하고 그렇지 않으면 false를 반환합니다.
BOF와 EOF는 모두 false입니다. 표시기가 레코드 세트에 있음을 의미합니다.
BOF는 사실입니다. 현재 표시기는 레코드 세트에 대한 첫 번째 레코드를 나타냅니다. EOF는 사실입니다. 현재 표시기는 레코드 세트에 대한 마지막 레코드를 나타냅니다.
BOF와 EOF는 모두 사실입니다. 레코드 세트에는 레코드가 없습니다.
2. 방법을 움직입니다
이동 방법을 사용하여 메트릭을 레코드 세트의 레코드로 이동할 수 있으며 구문은 다음과 같습니다.
Rs. Move NumRecords, 시작
여기서 rs는 객체 변수이며, 현재 레코드 위치에 이동하려는 레코드 세트 객체를 나타냅니다. NumRecords는 현재 레코드 위치의 움직임 수를 설정하는 양수 및 음수 계산 공식입니다. Start는 레코드 시작에 대한 레이블을 지정하는 선택적 항목입니다.
모든 레코드 세트 객체는 이동 방법을 지원합니다. NumRecords 매개 변수가 0보다 크면 현재 레코드 위치가 끝으로 이동합니다. 0보다 작은 경우 현재 레코드 위치는 시작으로 이동합니다. 빈 레코드 세트 객체가 이동 메소드를 호출하면 오류가 생성됩니다.
MoveFirst Method : 현재 레코드 위치를 첫 번째 레코드로 이동하십시오.
Movelast Method : 현재 레코드 위치를 마지막 레코드로 이동하십시오.
MOVENEXT 메소드 : 현재 레코드 위치를 다음 레코드로 이동하십시오. MovePrevious Method : 현재 레코드 위치를 이전 레코드로 이동하십시오.
[n] 메소드 이동 : 색인을 nth 펜 레코드로 이동하고 N은 0부터 시작됩니다.
3. AbsolutePage 속성
AbsolutePage 속성은 현재 레코드가있는 페이지의 페이지 수를 설정합니다. Pagesize 속성을 사용하여 Recordset 객체를 논리 페이지로 나누고 각 페이지의 레코드 수는 Pagesize입니다 (Pagesize 레코드보다 적은 마지막 페이지를 제외하고). 모든 데이터 제공 업체 가이 속성을 지원하는 것은 아니므로 여기에서 사용할 때주의해야합니다.
AbsolutePosition 속성과 동일하게 AbsolutePage 속성은 1로 시작합니다. 현재 레코드가 레코드 세트의 첫 번째 행 인 경우 AbsolutePage는 1입니다. AbsolutePage 속성은 지정된 페이지의 첫 번째 행 레코드 위치로 이동하도록 설정할 수 있습니다.
4. Absoluteposition 속성
레코드 세트에서 메트릭의 현재 위치를 결정 해야하는 경우 AbsolutePosition 속성을 사용할 수 있습니다.
AbsolutePosition 속성의 값은 첫 번째 트랜잭션에 비해 현재 지표의 위치, 즉 1부터 시작하는 첫 번째 트랜잭션의 위치는 1입니다.
레코드 세트에 액세스 할 때 레코드 세트가 매번 동일한 순서로 나타날 것이라는 보장은 없습니다.
AbsolutePosition을 활성화하려면 먼저 사용자 커서 (포인터)를 사용하도록 설정해야하며 ASP 코드는 다음과 같습니다.
rs2.cursorlocation = 3
5. PageCount 속성
PageCount 속성을 사용하여 레코드 세트 객체에 포함 된 데이터의 페이지 수를 결정하십시오. 여기의 페이지는 데이터 레코드 모음이며 크기는 Pagesize 속성 설정과 같습니다. 마지막 페이지의 레코드 수가 Pagesize 값보다 적더라도 마지막 페이지는 PageCount 페이지로 간주됩니다. 모든 데이터 제공 업체 가이 속성을 지원하는 것은 아닙니다.
6. Pagesize 속성
Pagesize 속성은 데이터베이스에 액세스 할 때 Ado Paginates를 결정하는 핵심입니다. 이를 사용하면 얼마나 많은 레코드가 논리적 페이지를 형성하는지 결정할 수 있습니다. 페이지 크기를 설정하고 생성하여 AbsolutePage 속성을 다른 논리 페이지의 첫 번째 레코드로 옮길 수 있습니다. Pagesize 속성은 언제든지 설정할 수 있습니다.
7. RecordCount 속성
이것은 또한 매우 일반적이고 중요한 재산입니다. 우리는 종종 RecordCount 속성을 사용하여 레코드 세트 객체에 포함 된 레코드 수를 찾습니다. 예를 들면 다음과 같습니다. < %totle = rs.recordCount %> 레코드 세트 객체의 위의 속성 및 메소드를 이해 한 후, 페이지 매김 디스플레이의 목적을 달성하기 위해이를 사용하는 방법을 고려해 봅시다. 먼저, Pagesize 속성에 대한 값을 설정하여 레코드 그룹에서 가져온 페이지를 구성하는 행의 수를 지정할 수 있습니다. 그런 다음 RecordCount 속성을 사용하여 총 레코드 수를 결정하십시오. 그런 다음 총 레코드 수를 Pagesize로 나누어 표시된 총 페이지 수를 얻습니다. 마지막으로, 지정된 페이지에 액세스하는 것은 AbsolutePage 속성을 통해 완료 할 수 있습니다. 매우 복잡하지 않은 것 같습니다. 프로그램이 어떻게 구현되어야하는지 살펴 보겠습니다.
데이터베이스에 다음 5 개의 필드가있는 간단한 BBS 응용 프로그램을 구축했습니다. ID, 각 게시물의 자동 수; 주제, 각 게시물의 주제; 이름, 게시물을 추가 한 사용자의 이름; 이메일, 사용자의 이메일 주소; 사후, 게시물 추가 시간. 데이터베이스의 DSN은 BBS입니다. 쉽게 통화 할 수 있도록 Showlist ()라는 프로세스에 게시물 페이징을 표시하는 모든 단계를 담았습니다. 절차는 다음과 같습니다.
| 다음은 인용 된 내용입니다. /'---- BBS 쇼 포스트 페이징 ---- < %하위 쇼리스트 () %> < % pgsz = 20 /'set switch, 각 페이지에 표시된 게시물 수를 지정하고 기본값은 페이지 당 20 개의 게시물입니다. set conn = server.createobject (adodb.connection) set rs = server.createobject (adodb.recordset) sql = select *에서 id desc의 메시지 주문 /'모든 게시물을 쿼리하고 Post ID에 의해 역순으로 정렬됩니다. conn.open bbs Rs. Open SQL, Conn, 1,1 rs.recordCount = 0 인 경우 response.write <p> <center> 죄송합니다. 데이터베이스에는 관련 정보가 없습니다! < /센터> < /p> 또 다른 rs.pagesize = cint (pgsz) /'Pagesize 속성의 값 설정 Total = int (rs.recordCount / pgsz * -1) * -1 / '표시 할 수있는 총 페이지 수를 계산합니다. pageno = 요청 (pageno) pageno = 그런 다음 pageno = 1 또 다른 pageno = pageno 1 pageno = pageno-1 끝 If scrollaction = request (scrollaction) scrollaction = 이전 페이지 인 경우 pageno = pageno-1 끝 If scrollaction = 다음 페이지 인 경우 pageno = pageno 1 끝 If Pageno <1이면 pageno = 1 끝 If n = 1 rs.AbsolutePage = pageno 응답. write <center> 위치 = rs.pagesize*pageno pagebegin = position-rs.pagesize 1 위치 <rs.recordCount 인 경우 pagend = 위치 또 다른 pagend = rs.recordCount 끝 If response.write <p> <font color =/'navy/'> <b> 데이터베이스 쿼리 결과 : </b> Response.write (조건을 충족하는 & rs.recordCount 및 정보가 있습니다. 응답 <테이블 너비 = 600 테두리 = 1 CellPadding = 4 Cellspacing = 0 bgcolor =#ffffff> 응답 <tr bgcolor =#5fb5e2> <font size = 2> <td> <b> 주제 < /b> < /td> <td> <b> user < /b> < /td> <td> <b> 이메일 < /b> < /td> <td> <b> 게시 날짜 < /b> < /font> <###### 하지 않으면 (RS는 아무것도 아닙니다) RowCount = Rs.Pagesize rs.eof 및 rowcount> 0이 아닌 상태에서 수행하십시오 그렇다면 n = 1이면 응답 <tr bgcolor =#ffffff> 또 다른 응답 <tr bgcolor =#eeeee> 끝 If n = 1-n %> <td> <span style = font-size : 9pt> <a href = /'view.asp? key = < % = rs (id) %> /'> < % = rs (주제) %> < /a> < /span> < /td> <td> <span style = font-size : 9pt> < % = rs (이름) %> < /a> < /span> < /td> <td> <span style = font-size : 9pt> <a href = mailto : < % = rs (이메일) % >> < % = rs (이메일) %> < /a> < /span> < /td> <td> <span style = font-size : 9pt> < % = rs (postdate) %> < /span> < /td> < /tr> < % RowCount = RowCount -1 rs.movenext 고리 rs = rs.nextrecordset을 설정합니다 고리 conn.close RS = 아무것도 설정하지 않습니다 Conn = 아무것도 설정하지 않습니다 %> < /테이블> <양식 메소드 = get action = list.asp> <입력 유형 = 숨겨진 이름 = pageno 값 = < % = pageno % >> < % pageno> 1이면 response.write <입력 유형 = 제출 이름 =/'scrollaction/'value =/'previous page/'> 끝 If rowCount = 0이고 pageno <> 총이면 총 response.write <입력 유형 = 제출 이름 =/'scrollaction/'value =/'다음 페이지/'> 끝 If 응답 < /form> 끝 If %> < % end sub %> |
나는 모든 사람이 위의 프로그램을 완전히 이해할 수 있어야한다고 생각하므로 저자는 여기에서 자세히 설명하지 않을 것입니다. 이 프로그램에서는 작은 트릭이 <input type = hidden name = pageno value = < % = pageno % >>에 사용되었다는 점은 주목할 가치가 있습니다. 이것은 ASP 파일을 호출 할 때마다 데이터를 전달하는 데 사용되는 비밀 구절입니다. 프로그램을 호출 할 때마다 현재 페이지 번호를 나타내는 매개 변수를 전달해야하므로 세션을 사용하는 것을 생각할 수 있지만 시스템 리소스를 저장하는 측면에서는 숨겨진 양식을 사용하여 데이터를 전달하면 더 나은 결과를 얻을 수 있습니다.
좋아, 다시 작별 인사를 할 시간이야. 이 기사에 나열된 프로그램을 완전히 이해하지 못하면 vbscript의 문법에 약간의 연료를 추가해야합니다. 질문이 있으면 최선을 다해 대답 할 수 있습니다. 더 나은 제안이 있으면 편지를 보내주세요.
공유 : 태그를 교체하여 정적 웹 페이지를 생성합니다 모두 HTML 정적 웹 페이지가 검색 엔진에서 색인화 될 가능성이 높다는 것을 알고 있습니다. HTML 웹 페이지를 동적으로 생성하면 웹 사이트의 웹 페이지 수를 늘릴 수 있으며 검색 엔진에도 더 많은 것이 포함될 수 있습니다. 웹 페이지의 품질을 향상시키는 요점은 무엇입니까? 나는 모두가 그것을 알고 있다고 생각합니다. ~을 위한