ADOがデータベースにアクセスするとき、ページネーションディスプレイとは何ですか?多くのWebサイトで電子掲示板プログラムを使用した場合、ページの読み取り速度を改善するために、電子掲示板プログラムは一般に1つのページのすべての投稿をリストするのではなく、その代わりに複数に分割されていることを知っておく必要があります。表示するページと各ページには、20などの特定の数の投稿が表示されます。ページネーションディスプレイを実装する方法を知りたいですか?この記事を読んでください!
「ダイナミックなウェブサイトのデザインの18の武道 - ASP」は、最初の号以来、ほとんどの半年を友人と過ごしました。そして、練習しています。私はすでにASPの組み込みオブジェクトとActiveXコンポーネントを使用して、いくつかの基本的なASPアプリケーションを書き込むことができます。友達から受け取った手紙から、ASPスキルが常に向上しているとはっきりと感じることができます。最近、多くの友人が私に手紙を書いており、実際の使用でASPの例を書くことができることを願っています。したがって、この号から始めて、私はASPの基本知識の導入と学習からASPの実際の操作の議論と深化に「ダイナミックウェブサイトデザインエディションの18の格闘技」の位置をシフトすることにしました。私の友人のリクエストに応じて、この号では、アクセスするときにADOデータベースのページングを表示する方法に焦点を当てます。
ADOがデータベースにアクセスするとき、ページネーションディスプレイとは何ですか?多くのWebサイトで電子掲示板プログラムを使用した場合、ページの読み取り速度を改善するために、電子掲示板プログラムは一般に1つのページのすべての投稿をリストするのではなく、その代わりに複数に分割されていることを知っておく必要があります。表示するページと各ページには、20などの特定の数の投稿が表示されます。これは、データベースクエリのページネーションディスプレイです。
では、どのようにしてデータベースのクエリ結果をページングできますか?実際には多くの方法がありますが、2つの主な方法があります。
1.クエリ条件を一度に満たすデータベースのすべてのレコードを読み取り、ADOレコードセットオブジェクトを介して、ページサイズ(ページサイズ)、PageCountをサポートするいくつかのプロパティが提供されます。 (ページ番号)およびページング処理を管理するためのAbsolutePage(Absolute Page)。
2。顧客の指示によると、指定された記録の数は、毎回クエリ条件を満たすレコードから読み上げられて表示されます。
2つの主な違いは、前者が一度にすべてのレコードをメモリに読み取り、ページネーションディスプレイの効果を達成するための指示に従って判断と分析を行うことです。クエリ条件を満たすために指定された番号。したがって、ページネーションディスプレイの機能を直接達成します。
データベース内のレコードの数が数万以上に達すると、最初の方法の実行効率は2番目の方法の実行効率よりも大幅に低くなるとはっきりと感じることができます。基準を満たすレコードは、サーバーメモリに保存され、ページングなどで処理されます。ただし、サーバー上のデータベースのレコードの数と同時にオンラインの人の数が大きくない場合、この2つの実行効率はほぼ同じです。最初の方法のASPプログラムは比較的記述されています。2番目の方法ははるかにシンプルで明確です。
ここで、著者は、一般的に使用するBBSプログラムで同時にアクセスするデータベースレコードの数と、一般的に使用するものではないため、Pagination Display機能を実装する方法を分析する例として、共通のASPBBSプログラムを採用します。したがって、以前に使用した最初のページネーションディスプレイ方法は、多くのことです。
ADOがデータベースにアクセスするときのページネーションディスプレイは、実際にはレコードセットのレコードを操作するためです。したがって、最初にreodsetオブジェクトのプロパティと方法を理解する必要があります。
BOF属性:現在のインジケータは、レコードセットへの最初のトランザクションを指します。
EOF属性:現在のインジケータは、レコードセットへの最後のトランザクションを指します。
移動方法:メトリックをレコードセットのレコードに移動します。
AbsolutePageプロパティ:ページが配置されているレコードの現在の場所を設定します。
PageCountプロパティ:レコードセットオブジェクトに含まれるデータの数を表示します。
Pagesizeプロパティ:RecordSetオブジェクトの各ページに表示されるレコードの数を表示します。
RecordCountプロパティ:RecordSetオブジェクトのレコードの総数を表示します。
これらの重要な属性と方法を詳しく見てみましょう
1。BOFおよびEOF属性
通常、ASPプログラムでコードを作成して、BOF属性とEOF属性をチェックして、BOFとEOFの属性を使用してレコードセットの位置を知ることができます。レコードセットオブジェクトの範囲を超えていますか。
たとえば、<%rs.eof then ...%>
<%ではない場合(rs.bofおよびrs.eof)%>
現在のレコードの場所がレコードセットオブジェクトにある場合
最初の行が記録されると、BOF属性はtrueを返し、それ以外の場合は偽りです。
現在のレコード位置がレコードセットオブジェクトの最後の行の後にある場合、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ショーポストページング---
<%sub showlist()%>
<%
PGSZ = 20 '設定スイッチ、各ページに表示される投稿の数を指定し、デフォルトはページごとに20の投稿です
conn = server.createObject(adodb.connection)を設定します
rs = server.createObject(adodb.Recordset)を設定します
sql = select* from message order by id desc
'すべての投稿をクエリし、投稿IDによって逆順序で配置します
conn.open bbs
rs.opensql、conn、1,1
rs.RecordCount = 0の場合
Response.Write <P> <Center>申し訳ありませんが、データベースに関連情報はありません! < /center> < /p>
それ以外
rs.pagesize = cint(pgsz) 'ページサイズのプロパティの値を設定します
Total = int(rs.RecordCount / PGSZ * -1) * -1 '表示できるページの総数を計算します
pageno = request(pageno)
pageno = thenの場合
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
Response.Write <Center>
位置= rs.pagesize*pageno
PageBegin = position-rs .Pagesize+1
位置<rs.RecordCountの場合
pagend = position
それ以外
pagend = rs.RecordCount
ifを終了します
Response.Write <P> <Font Color = 'Navy'> <b>データベースクエリ結果:< /b>
Response.write(条件、display&pagend& - &pagend&&pagend&&< /p>を満たす合計&rs.RecordCount&fieceの断片があります。
Response.Write <Table Width = 600 Border = 1 CellPadding = 4 CellSpacing = 0 BgColor =#ffffff>
respons.write <tr bgcolor =#5fb5e2> <font size = 2> <td> <b>テーマ< /b> < /td> <td> <b>ユーザー< /b> < /td> <td> < B>電子メール< /b> < /td> <td> <b>公開日< /b> < /td> < /font> <tr bgcolor =#ffffff>
そうでない間にします(rsは何もありません)
rowcount = rs.pagesize
rs.eofとrowcount> 0ではありません
n = 1の場合
Response.Write <TR BGCOLOR =#ffffff>
それ以外
respons.write <tr bgcolor =#eeeee>
ifを終了します
n = 1-n%>
<td> <span style = font-size:9pt> <a href = 'view.asp?key = <%= rs(id)%>'> <%= rs(subject)%> < /a> < / span> </td>
<td> <Span style = font-size:9pt> <%= rs(name)%> < /a> < /span> < /td>
<td> <span style = font-size:9pt> <a href = mailto:<%= rs(email)%>> <%= rs(email)%> < /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 = Nothingを設定します
conn =何も設定しません
%>
< /table>
<form method = getaction = list.asp>
<入力タイプ=非表示名= pageno値= <%= pageno%>>
<%
Pageno> 1の場合
Response.Write <入力タイプ=送信name = 'Scrollaction'値= '前のページ'>
ifを終了します
rowcount = 0およびpageno <>合計の場合
Response.Write <入力タイプ=送信name = 'Scrollaction' Value = 'Next Page'>
ifを終了します
Response.Write < /form>
ifを終了します
%>
<%end sub%>
誰もが上記のプログラムを完全に理解できるはずだと思うので、著者はここで詳細に説明しません。このプログラムでは小さなトリックが使用されたことは注目に値します<入力タイプ=隠された名前= pageno値= <%= pageno%>>は、ASPファイルが呼び出されるたびにデータを渡すために使用される秘密の通路です。プログラムに電話するたびに現在のページ番号を表すパラメーターを渡す必要があり、セッションの使用を考えることができますが、システムのリソースと普遍性の保存の観点から、このような隠されたフォームを使用してデータを渡すと、より良い結果が得られます。
さて、この記事にリストされているプログラムを完全に理解していない場合は、まだ質問がある場合は、最善を尽くしてください。 ;あなたがより良い提案があるなら、私に手紙を送ってください:)