この記事では、主にADOデータベースのページングを表示する方法を紹介します
データベースのクエリ結果をどのようにページングできますか?実際には多くの方法がありますが、 2つの主な方法があります。
1.クエリ条件を一度に満たすデータベースのすべてのレコードを読み取り、ADOレコードセットオブジェクトを介して、ページサイズ(ページサイズ)、PageCountをサポートするいくつかのプロパティが提供されます。 (ページ番号)およびページング処理を管理するためのAbsolutePage(Absolute Page)。
2。顧客の指示によると、指定された記録の数は、毎回クエリ条件を満たすレコードから読み上げられて表示されます。
2つの主な違いは、前者が一度にすべてのレコードをメモリに読み取り、ページネーションディスプレイの効果を達成するための指示に従って判断と分析を行うことです。クエリ条件を満たすために指定された番号。したがって、ページネーションディスプレイの機能を直接達成します。
データベース内のレコードの数が数万以上に達すると、最初の方法の実行効率は2番目の方法の実行効率よりも大幅に低くなるとはっきりと感じることができます。基準を満たすレコードは、サーバーメモリに保存され、ページングなどで処理されます。ただし、サーバー上のデータベースのレコードの数と同時にオンラインの人の数が大きくない場合、この2つの実行効率はほぼ同じです。最初の方法のASPプログラムは比較的記述されています。2番目の方法ははるかにシンプルで明確です。
ここで、著者は、一般的に使用するBBSプログラムで同時にアクセスするデータベースレコードの数と数の人々の数がBBSプログラムで機能を実装する方法を分析するための例として、共通のASP BBSプログラムを採用します。したがって、以前に使用された最初のページネーションディスプレイ方法があります。
ADOがデータベースにアクセスするときのページネーションディスプレイは、実際にはレコードセットのレコードを操作するためです。したがって、最初にreodsetオブジェクトのプロパティと方法を理解する必要があります。
BOF属性:現在のインジケータは、レコードセットへの最初のトランザクションを指します。
EOF属性:現在のインジケータは、レコードセットへの最後のトランザクションを指します。
移動方法:メトリックをレコードセットのレコードに移動します。
AbsolutePageプロパティ:ページが配置されているレコードの現在の場所を設定します。
PageCountプロパティ:レコードセットオブジェクトに含まれるデータの数を表示します。
Pagesizeプロパティ: RecordSetオブジェクトの各ページに表示されるレコードの数を表示します。
RecordCountプロパティ: RecordSetオブジェクトのレコードの総数を表示します。
これらの重要な属性と方法を詳しく見てみましょう
1。BOFおよびEOF属性
通常、BOFおよびEOF属性をチェックするASPプログラムでコードを作成して、BOFおよびEOF属性を使用して記録されているレコードセットの場所を知ることができます。ラインは、レコードセットオブジェクトの範囲を超えています。
たとえば、<%rs.eof then ...%>
<%ではない場合(rs.bofおよびrs.eof)%>
現在のレコード位置がレコードセットオブジェクトの最初の行の前にある場合、BOFプロパティはtrueを返し、それ以外の場合はfalseを返します。
現在のレコード位置がレコードセットオブジェクトの最後の行の後にある場合、EOFプロパティはtrueを返し、それ以外の場合はfalseを返します。
BOFとEOFはどちらも偽です。インジケータがレコードセットにあることを意味します。
BOFは真です:現在のインジケータは、レコードセットの最初のレコードを指します。 EOFはTrue:現在のインジケータは、レコードセットの最後のレコードを指します。
BOFとEOFは両方です。レコードセットにはレコードがありません。
2。メソッドを移動します
MOVEメソッドを使用して、構文を次のように、メトリックをレコードセットのレコードに移動できます。
rs.move numrecords、start
ここで、RSはオブジェクト変数であり、現在のレコードの位置が正と負の数の計算式であるときに移動したい記録セットオブジェクトを示します開始タグ。
すべてのレコードセットは、numrecordsパラメーターがゼロよりも大きい場合、ゼロに移動する場合、現在のレコードオブジェクトが移動を呼び出します方法、エラーが生成されます。
MoveFirstメソッド:現在のレコード位置を最初のレコードに移動します。
Movelastメソッド:現在のレコード位置を最後のレコードに移動します。
movenextメソッド:現在のレコード位置を次のレコードに移動します。移動中心の方法:現在のレコード位置を前のレコードに移動します。
[n]メソッドの移動:インデックスをn番目のペンレコードに移動し、nは0から始まります。
3。絶対属性
AbsolutePageプロパティは、ページが配置されているページのページ数を設定します。ページサイズのレコード)。ここでは、すべてのデータプロバイダーがこのプロパティをサポートしているわけではないことに注意する必要があるため、使用する場合は注意してください。
絶対的なプロパティと同じように、絶対配分プロパティは1から始まります。現在のレコードがレコードセットの最初の行である場合、絶対断片は1です。 AbsolutePageプロパティは、指定されたページの最初の行レコード位置に移動するように設定できます。
4。絶対堆積プロパティ
レコードセット内のメトリックの現在の位置を決定する必要がある場合は、絶対的なプロパティを使用できます。
絶対堆積プロパティの値は、最初のトランザクションに対する現在のインジケーターの位置であり、1から始まります。つまり、最初のトランザクションの絶対的なものは1です。
レコードセットにアクセスするとき、レコードセットが毎回同じ順序で表示されるという保証はないことに注意してください。
絶対的な配置を有効にするには、最初にユーザーカーソル(ポインター)を使用するように設定する必要があります。ASPコードは次のとおりです。
rs2.cursorlocation = 3
5。PageCountプロパティ
PageCountプロパティを使用して、レコードセットオブジェクトに含まれるデータの数を決定します。ここのページはデータレコードのコレクションであり、そのサイズはページサイズのプロパティの設定に等しくなります。 。すべてのデータプロバイダーがこのプロパティをサポートしているわけではないことに注意する必要があります。
6。Paysizeプロパティ
Pagesizeプロパティは、データベースを使用するときにADOがどのようにパジネートするかを判断するための鍵です。ページサイズを設定して作成し、AbsoluatePageプロパティを他の論理ページの最初のレコードに移動できるようにします。 Pagesizeプロパティはいつでも設定できます。
7。RecordCountプロパティ
これは、非常に一般的で重要なプロパティでもあります。例:<%totle = rs.recordCount%>
上記のプロパティとレコードセットオブジェクトの方法を理解した後、それらを使用してページネーションディスプレイの目的を実現する方法を考えてみましょう。まず、ページサイズのプロパティの値を設定し、レコードグループから取得したページを構成する行数を指定できます表示されたページの総数を取得するには、最終的に指定されたページにアクセスできます。それは非常に複雑ではないようです。
次の5つのフィールドがあります。投稿の時間。データベースのDSNはBBSです。簡単な通話のために、showlist()というプロセスにポストページングを表示するすべての手順を掲載します。手順は次のとおりです。
?
- '---- BBSはポストページングを表示します---
- <%subshowlist()%>
- <%
- PGSZ = 20 '設定スイッチ、各ページに表示される投稿の数を指定し、デフォルトはページごとに20の投稿です
- setConn = server.createObject(adodb.Connection)
- setrs = server.createObject(adodb.Recordset)
- sql = select*frommessageorderbyiddesc
- 'すべての投稿をクエリし、投稿IDによって逆順序で配置します
- conn.openbbs
- rs.opensql、conn、1,1
- ifrs.RecordCount = 0then
- Response.Write <P> <Center>申し訳ありませんが、データベースに関連情報はありません! </center> </p>
- それ以外
- rs.Pagesize = cint(pgsz) 'Pagesizeプロパティの値を設定します
- Total = int(rs.RecordCount/PGSZ*-1)*-1'表示できるページの総数を計算する
- pageno = request(pageno)
- ifpageno = then
- 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
- Response.Write <Center>
- 位置= rs.pagesize*pageno
- PageBegin = position-rs .Pagesize+1
- ifposition <rs.RecordCountThen
- pagend = position
- それ以外
- pagend = rs.RecordCout
- endif
- Response.Write <P> <FontColor = 'Navy'> <b>データベースクエリ結果:</b>
- Response.write(条件、display&pagend& - &pagend&&pagend&&</p>を満たす合計&rs.RecordCount&fieceの断片があります。
- Response.Write <TableWidth = 600border = 1CellPadding = 4CellSpacing = 0BGCOLOR =#ffffff>
- respons.write <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
- dowhileenotrs.eofandrowcount> 0
- ifn = 1then
- Response.write <trbgcolor =#ffffff>
- それ以外
- Response.write <trbgcolor =#eeeee>
- endif
- n = 1-n%>
- <td> <spanstyle = font-size:9pt> <ahref = 'view.asp?key = <%= rs(id)%>'> <%= rs(subject)%> </a> </span> </td>
- <td> <spanstyle = font-size:9pt> <%= rs(name)%> </a> </span> </td>
- <td> <spanstyle = font-size:9pt> <ahref = mailto:<%= rs(email)%>> <%= rs(email)%> </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 =何もない
- %>
- </table>
- <formmethod = getaction = list.asp>
- <inputtype = hiddenname = pagenovalue = <%= pageno%>>
- <%
- ifpageno> 1then
- Response.Write <inputType = submitName = 'Scrollaction'Value ='前のページ '>
- endif
- ifrowcount = 0andpageno <> totalthen
- Response.write <inputType = submitName = 'Scrollaction'Value =' Next Page '>
- endif
- Response.Write </form>
- endif
- %>
- <%endub%>