アクセスカウンタ - 1.17 ADOはどのようにページを表示するには、データベースにアクセスする

。。。したがって、この問題から、私は"汎用する動的なWebサイトのデザイン - ASPの章を、"することを決めたの紹介とASPの実際の動作させるに回すと深化の基礎からASPの位置を調べる。要件をする必要があります友人、私は話でこの問題の焦点の全員を与える"データベースのページにアクセスするには、ADOを示してどのように"質問。
shinobi.jp - アクセス解析, ブログ, カウンター とかを提供しているNINJA TOOLSの別館的サイト
。これは、ヤフーやその他の検索エンジンは、クエリの結果を理解する場合は、データベースクエリのページを参照してくださいするには、理解していない場合が示している。
それでは、どのようにデータベースのクエリの結果ページにDOは、することができますそれを表示しますか?実際には、多くの方法が、主に次の二つの方法があります:
まず、すべてのデータベースレコードは、クエリは、メモリに格納されているし、ADO Recordsetオブジェクトを使用してプロパティを扱ういくつかの特殊なサポートページが用意されて、レコードセット一度に読み込まれます一致:PageSizeは(ページサイズ)、PageCountを(ページ数) 、およびAbsolutePageは(絶対ページ)ページング処理を管理する。
第二に、お客様の手順については、条件が読み込まれ、表示されるレコードの必要な数のクエリに一致するレコードされ、各時間に応じて。
2つの主な違いは、前者がすべてのレコードがメモリに読み込まれることをクリックし、指示に従い判断をすることですページングの影響を示して、分析を実現するために、指示に従って判断をする1つのことですレコードは、ページの表示が機能に直接、メモリに読み込まれ、一貫性のあるクエリを必要な数の。
データベース内のレコード数が数千人以上に到達するときにそれぞれ、すべての顧客クエリ]ページには、サーバに格納されているすべてのレコードが見つかりました条件を持っている場合ので、私たちは、明らかに、効率が大幅に番目の方法よりも低くなります最初のメソッドを感じることができるメモリは、その後のページング処理と他の治療中の行のクエリで、100以上の顧客があると同時に、そのASPアプリケーションの実行効率が大きく影響される場合。ただし、データベースサーバー内のレコード数ではなく、効率の実装の両方でほぼ同じですが、人々の数は、オンラインと同じに多くの時間とし、一般的に最初のメソッドにため、最初の方法のASPプログラミングは相対的な第二の方法を理解してはるかに簡単です。
私たちの一般的なASP BBSのプログラムをここにおいて、著者は、たとえば、データベースレコードに同時にアクセスすると、する人の数を我々は一般的にBBSのプログラムの数を使用しているため、ディスプレイの掲示板プログラムでページングを実装する方法についての分析を提供するあまりにもすることは、その例では、前の最初のページの表示方法で説明する次の手順を使用することです。
ページの図は、実際には、Recordsetのレコードが動作するときにデータベースにアクセスするADO。したがって、まずReordsetオブジェクトのプロパティとメソッドを理解する必要があります:


移動:レコードセット内のレコードにポインタを移動。
AbsolutePageの属性:ページAbsolutePositionプロパティが配置されている現在のレコードセットの位置:現在のところ、レコードセット内の位置インジケータ。

PageSizeはのプロパティ:表示Recordsetオブジェクトは、ページあたりのレコード数を示しています。
RecordCountプロパティは:Recordsetオブジェクトレコードの合計数を表示します。。




AのBOFおよびEOFプロパティ




< % if not rs.eof then ... %>
< % if not (rs.bof and rs.eof) %>
Recordsetオブジェクトのカレントレコードの位置は、最初の行の前にレコードは、転炉プロパティがtrueを返すが、それ以外の場合はfalseを返す場合場合。
Recordsetオブジェクト内の現在のレコードの位置は前回されている場合、行の後に、EOFプロパティはtrueを返しますが、それ以外の場合はfalseを返します。。

。EOFがTrueの場合:現在のインデックスは、レコードセット内の最後のレコードを参照して。

第二に、移動する方法
あなたがレコードセット内のレコードにポインタを移動するMoveメソッドを使用することができますは、次の構文は以下の通りです:
rs.Move NumRecords,Start

NumRecordsパラメータがゼロの場合、最後にカレントレコードの位置に移動を超える場合のRecordsetオブジェクトには、Moveメソッドのすべてのサポートしています。それは、ゼロより小さい先頭にカレントレコードの位置に移動されている場合、メソッドを移動すると呼ばれる空のRecordsetオブジェクト場合、エラーが生成されます。。

MoveLastメソッド:最後のレコードにカレントレコードの場所。
MoveNextメソッド:次のレコードにカレントレコードの場所。MovePreviousメソッド:カレントレコードの位置に移動上の1つのレコード。
0から数えてnは、最初のn個のレコードにポインタを移動:[n]はメソッドに移動。

AbsolutePageプロパティは、ページ番号はページの現在のレコード番号の位置に設定されます。論理ページに分割されてRecordsetオブジェクトのPageSizeプロパティを使用して、最後のものを除いてPAGESIZEのレコード番号(各ページには、数PageSizeはより少なくなることがありますレコード)の。これは、使用する場合は注意がそうではなく、すべてのデータプロバイダは、このプロパティをサポートすることに注意してください。
同じAbsolutePageプロパティを使用してAbsolutePositionプロパティは、開始、現在のレコードが最初の行のレコードがレコードセット、AbsolutePage 1の場合。AbsolutePageプロパティは、最初の行の特定のページの場所に移動するように設定できます。


1から数えて現在位置を最初に相対的にAbsolutePositionプロパティの値のインデックス、のAbsolutePosition 1の最初の。
レコードセットにアクセスするときに、レコードセットが毎回同じ順序を保証できないことに注意して。
のAbsolutePositionを有効にするには、クライアントカーソル(ポインタ)を使用するように設定する必要があります、ASPコードは以下の通りです:
rs2.CursorLocation = 3

。ここで、"ページ"は、データレコードのコレクションは、サイズがPageSizeはと等しいレコードをPAGESIZEの値未満の最後のページ番号は、PageCountがページの最後のページを考えることができる場合でも、属性が設定され。必要がないすべてのデータプロバイダは、このプロパティをサポートしていることに注意して。
VIのは、PageSizeプロパティ
ADOのPageSizeプロパティは、データベースページが表示されますにキーにアクセスするためにどのように論理的な"ページ"を形成して決めることができるレコードの数を使用して決定することです。。PageSizeプロパティは、いつでも設定することができます。
第VII、RecordCountプロパティ
これは非常に一般的で重要なプロパティは、我々を含む、オブジェクトレコードの数を調べるにはレコードセットのRecordCountプロパティを使用。
プロパティと、上記の方法を理解する上でRecordsetオブジェクトは、ページング表示の我々の目的を達成するためにそれらを使用する方法を考えなければならない。することができますし、レコードの合計数で割ったもの。レコードの合計数を決定し、RecordCountプロパティを、まず、行のページ番号の組成物の記録から削除するグループを指定してPageSizeプロパティの値を設定することができますPageSizeのページには、合計表示、最後に、属性が指定されたページにAbsolutePageへのアクセスを行うことができます。はい、それは複雑されていない場合、そのための手順を実装する方法を見て見てみましょう?
。"掲示板"などのデータベースのDSN。。次のように手順があります:
\ '----のBBSには、投稿ページ----に表示
< % Sub ShowList() %>
< %
PgSz = 20 \'に設定スイッチは、各ページ番号を示す記事を指定すると、既定値は20の記事です
Set Conn = Server.CreateObject("ADODB.Connection")
Set RS = Server.CreateObject("ADODB.RecordSet")
sql = "SELECT * FROM message order by ID DESC"

Conn.Open "bbs"
RS.open sql,Conn,1,1
If RS.RecordCount=0 then
"Response.Writeメソッド

申し訳ありませんが、データベース内の関連情報! "
else


PageNo=Request("pageno")
if PageNo="" Then
PageNo = 1
else
PageNo=PageNo+1
PageNo=PageNo-1
end if
ScrollAction = Request("ScrollAction")
場合ScrollAction ="前"それから
PageNo=PageNo-1
end if

PageNo=PageNo+1
end if
if PageNo < 1 Then
PageNo = 1
end if
n=1
RS.AbsolutePage = PageNo
Response.Write "< CENTER>"
position=RS.PageSize*PageNo
pagebegin=position-RS.PageSize+1
if position < RS.RecordCount then
pagend=position
else
pagend= RS.RecordCount
end if
のResponse.Write"

データベースクエリの結果: "
のResponse.Write"(の合計"&RS.RecordCount&"対象となる資料情報の表示"&pagebeginの&"-"&のpagend&") "
Response.Write "< TABLE WIDTH=600 BORDER=1 CELLPADDING=4 CELLSPACING=0 BGCOLOR=#FFFFFF>"
のResponse.Write" 件名 ユーザー Eメール 発売日 "
Do while not (RS is nothing)
RowCount = RS.PageSize
Do While Not RS.EOF and rowcount >0
If n=1 then
Response.Write "< TR BGCOLOR=#FFFFFF>"
ELSE
Response.Write "< TR BGCOLOR=#EEEEEE>"
End 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
Loop
set RS = RS.NextRecordSet
Loop
Conn.Close
set rs = nothing
set Conn = nothing
%>
< /TABLE>
< FORM METHOD=GET ACTION="list.asp">
< INPUT TYPE="HIDDEN" NAME="pageno" VALUE="< % =PageNo %>">
< %
if PageNo >1 Then
"Response.Writeメソッド "
end if
if RowCount = 0 and PageNo < >Total then
"Response.Writeメソッド "
end if
response.write "< /FORM>"
End if
%>
< % End Sub %>
私たちはすべて完全に上記のプログラムを理解することができるはずと信じて、著者らは、詳細に説明していません。それが注目されていることを、このプロセスは、トリックを使用中に
< INPUT TYPE="HIDDEN" NAME="pageno" VALUE="< % =PageNo %>">
、我々は現在のページ番号のパラメータを呼び出すたびに代わってプログラムを渡す必要があるため、どちらがASPファイルに"不正なチャンネルを、"データを転送する各呼び出しで使用されている、1つは、セッションを使用してのと思うかもしれませんしかし、システムリソースを節約から言えば、そのような非表示のフォームと共通する、より良い結果を達成するためにデータを渡すために。
あなたは完全に、オイルを追加する必要がありますVBScriptの構文を見てみましょう、この中で設定する手順を理解していない場合はまあ、もう一度、さよならを言うと、あなたはいくつかの質問がある場合は、"妹子"私は、私がしようとすることができます答えるために、あなたは任意のより良い提案も、私への書き込みに、オハイオ州を確認することがある場合:)