推奨:ASPを使用して、データベースのビューとストアドプロシージャを呼び出します1。序文ASP(Active Server Pages)は、MicrosoftのIIS3.0以上でサポートされているサーバー側のスクリプト環境です。動的なWebページを作成したり、強力なWebアプリケーションを生成したりするために使用できます。 ASPページには、HTMLタグ、テキスト、および
ADOがデータベースにアクセスするとき、ページネーションディスプレイとは何ですか?現在、多くのWebサイトで電子掲示板プログラムを使用している場合は、ページの読み取り速度を改善するために、電子掲示板プログラムは一般にすべての投稿を1ページにリストするのではなく、複数のページに分割して、20の投稿などのページごとの特定の投稿を表示することを知っておく必要があります。これは、データベースクエリのページネーションディスプレイです。まだ理解していない場合は、Yahooなどの検索エンジンのクエリ結果を調べて理解できます。
では、どのようにしてデータベースのクエリ結果をページングできますか?実際には多くの方法がありますが、2つの主な方法があります。
1.クエリ条件を満たしているデータベース内のすべてのレコードを一度にレコードセットに読み取り、メモリに保存します。次に、ページサイズ(ページサイズ)、PageCount(ページ番号)、AbsolutePage(Absolute Page)を特別にサポートするADO Recordsetオブジェクトによって提供されるいくつかの属性を介してページング処理を管理します。
2。顧客の指示によると、指定された記録の数は、毎回クエリ条件を満たすレコードから読み上げられて表示されます。
2つの主な違いは、前者が一度にすべてのレコードをメモリに読み取り、ページネーションディスプレイの効果を達成するための指示に従って判断と分析を行うことです。一方、後者は指示に基づいて判断を下し、クエリ条件をメモリに満たす記録の指定数を読み取り、それによってページネーションディスプレイの機能を直接達成します。
データベース内のレコードの数が数万以上に達すると、最初の方法の実行効率は2番目の方法の実行効率よりも大幅に低くなるとはっきりと感じることができます。なぜなら、各顧客がページを照会すると、基準を満たすすべてのレコードをサーバーメモリに保存し、その後ページとページと他の処理が実行されるからです。 100人以上の顧客が同時にオンラインでクエリをする場合、ASPアプリケーションの実行効率が大きく影響を受けます。ただし、サーバー上のレコードの数と同時にオンラインでの人の数がそれほど大きくない場合、2つの実行効率はほぼ同じです。この時点では、最初の方法のASPプログラム執筆は2番目の方法よりもはるかにシンプルで明確であるため、最初の方法が一般的に採用されています。
ここで、著者は、BBSプログラムでページネーションディスプレイ機能を実装する方法を分析するための例として、共通のASP BBSプログラムを採用します。データベースレコードの数と、一般的に使用するBBSプログラムで同時にアクセスする人の数は多すぎるため、以前に紹介した最初のページネーションディスプレイ方法です。
ADOがデータベースにアクセスするときのページネーションディスプレイは、実際にはレコードセットのレコードを操作するためです。したがって、最初にreodsetオブジェクトのプロパティと方法を理解する必要があります。
BOF属性:現在のインジケータは、レコードセットへの最初のトランザクションを指します。
EOF属性:現在のインジケータは、レコードセットへの最後のトランザクションを指します。
移動方法:メトリックをレコードセットのレコードに移動します。
AbsolutePageプロパティ:ページが配置されているレコードの現在の場所を設定します。絶対堆積プロパティ:レコードセット内のメトリックの現在の位置。
PageCountプロパティ:レコードセットオブジェクトに含まれるデータの数を表示します。
Pagesizeプロパティ:RecordSetオブジェクトの各ページに表示されるレコードの数を表示します。
RecordCountプロパティ:RecordSetオブジェクトのレコードの総数を表示します。
これらの重要な属性と方法を詳しく見てみましょう。
1。BOFおよびEOF属性
通常、BOFおよびEOF属性をチェックするASPプログラムにコードを書き、現在のインジケータが指すレコードセットの位置を知ることができます。 BOFおよびEOF属性を使用して、RecordSetオブジェクトにレコードが含まれているかどうか、または移動するレコードラインがレコードセットオブジェクトの範囲を超えたかどうかを知ることができます。
のように:
<%rs.eofではない場合...%>
<%ではない場合(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は、現在のレコード位置の動きの数を設定する正と負の数の計算式です。 Startは、レコードの開始時にラベルを指定するオプションのアイテムです。
すべてのレコードセットオブジェクトは、移動方法をサポートしています。 NumRecordsパラメーターがゼロより大きい場合、現在のレコード位置は最後まで移動します。ゼロ未満の場合、現在のレコード位置は最初に移動します。空のレコードセットオブジェクトが移動メソッドを呼び出す場合、エラーが生成されます。
MoveFirstメソッド:現在のレコード位置を最初のレコードに移動します。
Movelastメソッド:現在のレコード位置を最後のレコードに移動します。
movenextメソッド:現在のレコード位置を次のレコードに移動します。移動中心の方法:現在のレコード位置を前のレコードに移動します。
[n]メソッドの移動:インデックスをn番目のペンレコードに移動し、nは0から始まります。
3。絶対属性
AbsolutePageプロパティは、現在のレコードが配置されているページ上のページのページ番号を設定します。 Pagesizeプロパティを使用して、Recordsetオブジェクトを論理ページに分割すると、各ページのレコードの数はPagesizeです(ページサイズのレコードよりも少ない最後のページを除く)。ここでは、すべてのデータプロバイダーがこのプロパティをサポートしているわけではないことに注意する必要があるため、使用する場合は注意してください。
絶対的なプロパティと同じように、絶対配分プロパティは1から始まります。現在のレコードがレコードセットの最初の行である場合、絶対配分は1です。絶対断言プロパティは、指定されたページの最初の行レコード位置に移動するように設定できます。
4。絶対堆積プロパティ
レコードセット内のメトリックの現在の位置を決定する必要がある場合は、絶対的なプロパティを使用できます。
絶対堆積プロパティの値は、最初のトランザクションに対する現在のインジケーターの位置であり、1から始まります。つまり、最初のトランザクションの絶対的なものは1です。
レコードセットにアクセスするとき、レコードセットが毎回同じ順序で表示されるという保証はないことに注意してください。
絶対的な配置を有効にするには、最初にユーザーカーソル(ポインター)を使用するように設定する必要があります。ASPコードは次のとおりです。
rs2.cursorlocation = 3
5。PageCountプロパティ
PageCountプロパティを使用して、レコードセットオブジェクトに含まれるデータの数を決定します。ここのページはデータレコードのコレクションであり、そのサイズはページサイズプロパティの設定に等しくなります。最後のページのレコードの数がページサイズの値よりも少ない場合でも、最後のページはPageCountのページと見なされます。すべてのデータプロバイダーがこのプロパティをサポートしているわけではないことに注意する必要があります。
6。ページサイズの属性
Pagesizeプロパティは、データベースにアクセスする際のADOがどのようにパジネートするかを判断するための鍵です。それを使用して、論理ページを形成するレコードの数を決定できます。ページサイズを設定して作成し、AbsoluatePageプロパティを他の論理ページの最初のレコードに移動できるようにします。 Pagesizeプロパティはいつでも設定できます。
7。RecordCountプロパティ
これも非常に一般的で重要な特性です。 RecordCountプロパティを使用して、RecordSetオブジェクトに含まれるレコードの数を確認します。たとえば、<%totle = rs.RecordCount%>上記のプロパティとメソッドを理解した後、それらを使用してページネーションディスプレイの目的を達成する方法を考えてみましょう。まず、Pagesizeプロパティの値を設定し、それにより、レコードグループから取得したページを構成する行の数を指定できます。次に、RecordCountプロパティを使用して、レコードの総数を決定します。次に、レコードの総数をPageizeで除算して、表示されるページの総数を取得します。最後に、指定されたページへのアクセスは、AbsoluatePageプロパティを介して完了できます。それはあまり複雑ではないようです。プログラムの実装方法を見てみましょう。
このようなシンプルなBBSアプリケーションを構築しました。このアプリケーションには、データベースに次の5つのフィールドがあります。ID、各投稿の自動番号。主題、各投稿の主題。名前、投稿を追加したユーザーの名前。電子メール、ユーザーのメールアドレス。ポストデート、投稿を追加する時間。データベースの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.open sql、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。ページズ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>公開された日付 そうでない間にします(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 = get action = list.asp> <入力タイプ=非表示名= pageno値= <%= pageno%>> <% Pageno> 1の場合 Response.Write <入力タイプ= name =/'scrollaction/' value =/'前のページ/'> ifを終了します rowcount = 0およびpageno <>合計の場合 Response.Write <入力タイプ= submit name =/'scrollaction/' value =/'Next Page/'> ifを終了します Response.Write < /form> ifを終了します %> <%end sub%> |
誰もが上記のプログラムを完全に理解できるはずだと思うので、著者はここで詳細に説明しません。このプログラムでは小さなトリックが使用されていることは注目に値します。プログラムが呼び出されるたびに現在のページ番号を表すパラメーターを渡す必要があるため、セッションを使用することを考えることができますが、システムのリソースと普遍性を保存することで、このような隠されたフォームを使用してデータを渡すと、より良い結果が得られます。
さて、もう一度別れを告げる時が来ました。この記事にリストされているプログラムを完全に理解していない場合は、VBScriptの文法に燃料を追加する必要があります。質問がある場合は、それらに答えるために最善を尽くすことができます。より良い提案がある場合は、手紙を送ってください。
共有:タグを交換して静的Webページを生成しますHTMLの静的Webページは、検索エンジンによってインデックス化される可能性が高いことを誰もが知っています。 HTML Webページを動的に生成すると、Webサイト上のWebページの数も増加する可能性があり、検索エンジンにはさらに多くが含まれる場合があります。 Webページの品質を改善するポイントは何ですか?誰もがそれを知っていると思います。のために