この記事では、主にASPにページネーションディスプレイを実装することができます。
MicrosoftのASPプログラミングシステムでは、ADOオブジェクトの確立により、Webページからのデータベースへのアクセスが簡単なタスクになります。特にADO Recordsetオブジェクトにより、コントロールデータの出力をより便利にし、無料で表示できます。 Visual Interdev6.0(以下、VI6.0と呼ばれる)では、スクリプトオブジェクトモデル(以下SOMと呼ばれる)、設計時間制御(以下DTCと呼ばれる)、データ環境などのオブジェクトモデルの導入によりオブジェクトモデル(以下ではDeomと呼ばれます)は、データベースにアクセスするためにWebページをより便利にします。
データベース接続に関するトピックのため、以下はコードと簡単なコメントのみを提供し、レコードセットオブジェクト(またはコントロール)を使用してデータレコードのページネーションディスプレイを実装する方法に焦点を当てています。私の理解によれば、ページネーションディスプレイの鍵は、ADOのRecordSetオブジェクトまたはDTC(設計時間制御)のプロパティと方法をマスターすることです。
ページに表示されるこれらの7つの武器は、4つのカテゴリにまとめられています。一時的に純粋なASPメソッドと一時的に呼ばれます。
これは、国内のASP Webサイトで最も一般的に使用される方法でもあります。これらの2つの方法の実装は、最も簡単に理解しやすく、最小オブジェクトの概念が使用され、開発環境の最小要件(ちょうどメモ帳)です。これらの2つの方法の本質は、ADOオブジェクトをプログラムに導入するだけのCGIのプログラミングアイデアであると言えます。
4番目と5番目のDHTMLメソッドは、一時的にSOMと名付けられました。
これらの2つの方法では、Microsoftのスクリプトオブジェクトモデル(スクリプトオブジェクトモデル)の使用とVI6.0のDHTMLのテーブルオブジェクトのデータベースバインディングの新しい機能が必要です(多くの書籍と記事では、DHTMLのCSS機能がスタイルデザインのアプリケーションのみを紹介します。データ結合特性の導入を無視し、クライアント側のページのターンオーバーを実現します。ただし、Microsoft Internet Explorer 4.0以降など、ユーザーのブラウザがDHTMLをサポートする必要があります。
6番目の方法は、一時的にSOMサーバー側のメソッドと呼ばれます。
Microsoft、Recordset、PageObject、Gridなどが提案するスクリプトオブジェクトモデルでいくつかのDTCコントロールを使用するVI6.0環境での開発が必要です。これは、Webページをオブジェクトとして扱うエキサイティングで新しいプログラミング方法です(このオブジェクトモデルは従来のDOMとは異なります---ドキュメントオブジェクトモデル:DOMはクライアントのみを制御できますが、SOMはサーバー側とクライアント側を制御できます)、これは、Webページのオブジェクト指向プログラミングを真に実装しています。しかし、残念ながら、私の個人的な能力は限られている可能性があります。たとえば、このテクノロジーはまだあまり成熟していないと思います。
7番目の方法は、一時的にDEOMメソッドと名付けられています。
また、VI6.0に確立されたデータ環境オブジェクトモデルを使用して、レコードセットオブジェクトを作成します。これは、SOMモデルと比較して比較的まれな新しい方法であり、後で詳細に説明されます。
後で言及したすべてのソースコードは、直接コピーできます。
さまざまなページングメソッドの詳細を詳細に導入する前に、データベースを作成します。Office97でアクセスを使用してEmploy EMPを作成し、EMP ID、姓、名の3つのフィールドのみを設定します。なぜそれが簡単なのですか?
パラメーターを直接置き換える最初の方法
この方法は、レコードセットオブジェクトを手動で作成し、そのページサイズ(ページごとに表示されるレコードの数を指定)、PageCount(合計ページ番号)、および絶対対象(現在のページ番号)プロパティを使用して、ページの出力を制御します。ページページは、パラメーターを直接ページ番号付けする方法を使用して、ページのターンオーバーを制御します。 Webページの名前はEmp1.aspです。ソースコードは次のとおりです。
- <%// Employee.mdbデータベースへの接続を確立します。
- setConn = server.createObject(adodb.Connection)
- conn.opendriver = {microsoft AccessDriver(*。MDB)}; dbq = Employee.mdb
- // EMPテーブルのレコードセットオブジェクトのインスタンスを作成します。
- setrs = server.createObject(adodb.Recordset)
- rs.openemp、conn、3
- Pagesize = 10 // Pagesize属性各ページに表示されるレコードの数を指定します。
- page = clng(request(page)) '文字列タイプが長いタイプに変換されました
- ifpage <1thenpage = 1
- ifpage> rs.PageCountThenPage = rs.PageCount
- ifpage <> 1 then
- Response.Write
- Response.Write
- endif
- ifpage <>rs.pagecountthen
- Response.Write
- Response.Write
- endif
- Response.Writeページ番号:&/&rs.PageCount&</font>
- //各ページの表示
- //ヘッダーを表示します
- Response.Write <センター>< Tableborder = 1>
- Response.Write
- respons.write
- Response.Write
- //各レコードの表示をサイクリングします
- rs.absolutepage = page //ページ番号をAbsolutePage属性に割り当てて、現在のページの最初のレコード番号を知る
- foripage = 1tors.pagesize //
- Response.Write
- Response.Write
- Response.Write
- rs.movenext
- IFRS.EOFTTHENEXITFOR
- 次
- Response.Write
2番目のタイプ:フォーム転送パラメーターメソッド
この方法は、レコードセットオブジェクトを作成するときの最初の方法と同じですが、ページターニングコントロールの場合、ケースステートメントを使用してページターニングを達成します。 Webページの名前は次のとおりです。Emp2.asp。この方法には、プログラミングロジックに不利な点があります。前のページまたは次のページボタンを押してから、ブラウザの更新ボタンを押した後、ページを自動的にターンします。ソースコードは次のとおりです。
- ifpagenum = thenpagenum = 1 //最初のページから表示します
- //データベース接続を作成し、オブジェクトインスタンスを記録しますRs。
- 最初の方法と同じ、ここでスキップしました。
- rs.Pagesize = 10'ページに表示されるレコードの数を10までセット
- //ページターンアクションを確認します
- selectcaserequest(nav)
- 場合
- セッション(Pagenum)= 1
- casefirst'firstrecord
- セッション(Pagenum)= 1
- Caseprev'PreviousRecord
- ifsession(pagenum)> 1then
- セッション(Pagenum)= session(pagenum)-1
- endif
- casenext'nextrecord
- ifsession(pagenum)<rs.pagecountthen
- セッション(Pagenum)= session(pagenum)+1
- endif
- caselast'lastrecord
- セッション(Pagenum)= rs.PageCount
- EndSelect
- rs.absolutepage = clng(session(pagenum))//現在のページの最初のレコード番号を決定します
- //現在のページを表示します
- 最初の方法と同じように、ここでスキップします。
- // navページターンボタン設定
- <formmethod = getaction = emp2.asp>
- <inupttype = submitname = navvalue = home>
- <inupttype = submitValue =前のページname = nav>
- <inupttype = submitvalue =次のページname = nav>
- <inupttype = submitvalue = lastページ名= nav ></form>
3番目のタイプ:グリッドコントロールを使用してページングを設計します
すべての方法の中で、この方法は最も簡単です。 DTCのレコードセットコントロールとグリッドコントロールをASP Webページにドラッグするだけです。さらに、サーバープラットフォームでのページのターンオーバーを制御するのか、クライアントプラットフォームでページのターンオーバーを制御するかを選択することもできます。不利な点は、それによって与えられた形式で表示する必要があり、テーブルの表示形式を自分で制御できないことです。
この方法は次のとおりです。
VI6.0でプロジェクトEMP.VIPを構築します。次に、プロジェクトにASP Webページを追加します:EMP3.asp。
ステップ1:VI6.0メニューバーのデータ接続の追加を選択し、開発ツールのナビゲーションプロンプトに従うと、従業員への接続を簡単に確立できます。MDBデータベース。レコードセットコントロールをDTCツールバーからWebページにドラッグし、そのプロパティを設定します。写真に示すように具体的:
コントロールをWebページにドラッグすると、VI6.0はScriptingオブジェクトモデルを使用してYESを押すかどうかを自動的に促します。
ステップ3:DTCツールバーからグリッドコントロールをWebページにドラッグし、次のようなプロパティを右クリックして、次のようなプロパティを設定します。表示されているレコードの数と表示形式など。非常にシンプルで便利です。ナビゲーションプロンプトに従ってください。
4番目のタイプ:DHTMLメソッド1。
データレコードはHTMLテーブルに表示されます。 DHTMLのテーブルのデータ結合特性を使用して、レコードのページネーション表示を制御します。欠点は、ページターン方法が特定の方法に制限されることです。前のページと次のページのみですが、ホームページと最後のページではありません。クライアント側で制御されるため、これと5番目の方法は最速ですが、残念ながらDHTMLをサポートするブラウザでのみ使用できます。
DHTMLで、
DataSRCプロパティを使用すると、テーブルをデータソースにバインドでき、他のプロパティDataPagesizeは、一度にページに表示されるレコードの数を指定します。
次の例を見てみましょう。
ステップ1:RecordSetコントロールを新しく作成したWebページEMP4.htmにドラッグし、このメソッドを3番目のプロパティと同じです。
ステップ2:次のコードを入力します。
- tableId = table1datasrc =#recordset1_rdsdatapagesize = 5> // recordsetコントロール名がrecordset1が設定されると仮定します。ページごとに5つのレコードが表示されます。
- thead>
- <thalign = leftwidth = 150
- <thalign = leftwidth = 200> lastname </th>
- <thalign = leftwidth = 200 >firstName </th>
- </thead>
- <tr>
- <TD >< divdatafld = empid ></div></td> //出力テーブルコンテンツ
- <td >< divdatafld = lastname
- <td >< divdatafld = firstname ></div ></td>
- </tr>
- </表>
ステップ3:次に、DTCSボタンボタンコントロールのペアを追加して、ページターンナビゲーションを実行します。対応するスクリプトは次のとおりです。
- <scriptlanguage = vbscript>
- functionbtnprevious_onclick()
- 表1.PreviousPage()
- エンド機能
- functionbtnnext_onclick()
- Table1.nextPage()
- エンド機能
- </スクリプト>
5番目のタイプ:DHTMLメソッド2
この方法は、4番目の方法の完全性です。マニュアルスクリプト方法により、ホームページと最後のページターンナビゲーションボタンを作成し、各レコードの場所を決定できます(レコード番号)。長さのため、以下に具体的な例を1つ紹介し、簡単な説明をします。 DHTMLおよびRecordset Controlsの他のプロパティと方法については、自分で関連する本を参照してください。ここでは、レコードセット制御は、最初と2番目の方法で導入されたADOレコードセットオブジェクトとは多少異なることに注意してください。レコードセットコントロールは、PagesizeやPageCountなどのプロパティを直接与えず、以下に紹介した方法を使用して計算する必要があります。
ステップ1:RecordSetコントロールを新しく作成したWebページEMP5.htmにドラッグし、そのメソッドは3番目のものと同じです。
ステップ2:3つのグローバル変数を定義し、RecordSet1のOnDataSetCompleteスクリプトを記述します。
- dimgcurrentpageNumber //現在のページ番号
- dimgmaxpageNumber //ページの最大数
- dimgrecordsperpage //ページごとに表示されるレコードの数
- Grecordsperpage = 5 //ページごとに表示されるレコードの数を5つのレコードに設定します。
- functionrecordset1_ondatasetcomplete()
- TotalRecordCount = RecordSet1.GetCount()//レコードの総数
- gmaxpageNumber = int(totalRecordCount/grecordsperpage)//ページの最大数を取得します
- if(totalRecordCountModGrecordSperpage)>0then
- gmaxpagenumber = gmaxpagenumber+1
- endif
- エンド機能
ステップ3:ページターンナビゲーションボタンを作成します。
- functionbtnfirst_onclick() 'ホームページにフリップします
- GcurrentPageNumber = 1
- displaydata()
- エンド機能
- functionbtnprevious_onclick() ''前のページにフリップします
- ifgcurrentpageNumber> 1then
- gcurrentPageNumber = gcurrentPagenumber-1
- displaydata()
- endif
- エンド機能
- functionbtnnext_onclick() ''次のページにフリップします
- ifgcurrentPageNumber
- gcurrentPageNumber = gcurrentPagenumber+1
- displaydata()
- endif
- エンド機能
- functionbtnlast_onclick() ''最後のページにフリップします
- gcurrentpageNumber = gmaxpagenumber
- displaydata()
- エンド機能
ステップ4:各ページを表示する関数を書き込みます。多くのDHTMLプロパティと方法が使用されています。関連する本を自分で参照してください。
- subdisplaydata()
- startrecord =((gcurrentpagenumber-1)*grecordsperpage)+1 //各ページの先頭に表示されるレコードの数を計算します(位置、どのアイテム)
- rowctr = 1
- lblpageNumber.innerhtml = gcurrentpagenumber&/&gmaxpagenumber
- forrecordptr = startrecordto(startrecord+grecordsperpage-1)//ページに各レコードを表示するためのサイクリング
- ifrecordptr> recordset1.getCount()then //空のテーブルを表示します
- 表1.Rows(rowctr).cells(0).innerhtml = <p ></p>
- 表1.Rows(rowctr).cells(1).innerhtml = <p ></p>
- 表1.Rows(rowctr).cells(2).innerhtml = <p ></p>
- 表1.Rows(rowctr).cells(3).innerhtml = <p ></p>
- else //各ページを指定します
- RecordSet1.MoveAbsolute(RecordPtr)//レコードポインターを移動します。
- empid = recordset1.fields.getvalue(empid)
- emplname = recordset1.fields.getValue(firstName)
- empfname = recordset1.fields.getValue(lastName)
- 表1.Rows(rowctr).cells(0).innertext = RecordPtr'Counter
- 表1.Rows(rowctr).cells(1).innertext = empid
- 表1.Rows(rowctr).cells(2).innertext = emplname
- 表1.Rows(rowctr).cells(3).innertext = empfname
- endif
- rowctr = rowctr+1
- 次
- Endingub
さらに、ウィンドウオブジェクトのオンロードイベントに次のスクリプトを記述する必要があります。
- forrowctr = 1togrecordsperpage
- 表1.Insertrow(rowctr) '新しい列を挿入します
- forcellctr = 0to3
- 表1.rows(rowctr).insertcell()
- 次
- 次
6番目の方法:サーバー側の制御ページのターンオーバー。
サーバー上のデータをページングしてからクライアントに出力すると、ブラウザがDHTMLをサポートしていないことに問題はありません。ただし、サーバー側の方法を使用すると、ページをターンするたびにレコードセット制御を再生する必要があるため、DHTMLメソッドを使用するよりも速度が確実に遅くなります。しかし、サーバーが十分に速い場合、顧客の遅さは気付かないでしょう。
次の例では、新しいDTCコントロールを紹介します:PageObject。このコントロールにより、指定されたWebページがオブジェクトになり、Webページのサーバースクリプトでユーザーが編成するサブルーチンと関数は、Webページオブジェクトのメソッドと見なすことができます。状態情報を管理するための高度な方法を提供します。Webオブジェクトには、ユーザーがこれらのプロパティの寿命を定義できるプロパティ(変数)があります。上記の機能のため、ページ旋回スクリプトをコンパイルするのが非常に便利です。
ただし、このメソッドの欠点は次のとおりです。前のページまたは次のページボタンを押して、ブラウザの更新ボタンを押すと、Webページはページを自動的にターンします。さらに、ブラウザのフォールバックボタンを押してから、ページターンボタンを押すと、ランダムに回転することができます。これはすべて、Webオブジェクトプロパティ(グローバル変数)によって引き起こされます。
ステップ1:RecordSetコントロールを、新しく作成したWebページEMP6.aspにドラッグし、そのメソッドは3番目のものと同じです。
ステップ2:PageObjectコントロールをWebページにドラッグして、件名を付けます。次に、このコントロールを右クリックしてプロパティページを開き、MaxPageNumber、RecordSperPage、およびCurrentPageNumberの3つのプロパティ(グローバル変数)を設定します。 VI6.0は、特定の使用法を読み取り、書き込む方法を使用できます。関連する情報を参照してください。
ステップ3:RecordSet1のOnDataSetCompleteイベントを書きます。
- functionrecordset1_ondatasetcomplete()
- RecordSperPage = 5
- emplist.setRecordSperPage(RecordSperPage)// Webページオブジェクトを設定するページごとの録音番号を5に設定
- TotalRecordCount = RecordSet1.getCount()//レコードセットの総数を取得します
- mpn = int(TotalRecordCount/RecordSperPage)// MPNをページの総数として計算します
- if(totalRecordCountModRecordSperpage)>0then
- mpn = mpn+1
- endif
- emplist.setmaxpageNumber(mpn)
- エンド機能
ステップ4:4つのボタンコントロールをWebページにドラッグし、ページターンコントロールスクリプトを書き込みます。主に、WebページオブジェクトのCurrentPageNumberプロパティの値を変更することにより、ページターンを実現します。
- functionbtnfirst_onclick() 'ホームページにフリップします
- emplist.setCurrentPageNumber(1)
- エンド機能
- functionbtnprevious_onclick() ''前のページにフリップします
- cpn = emplist.getCurrentPagenumber()
- ifcpn >1then
- emplist.setCurrentPageNumber(CPN-1)
- endif
- エンド機能
- functionbtnnext_onclick() ''次のページにフリップします
- cpn = emplist.getCurrentPagenumber()
- ifcpn <mplist.getMaxPagEnumber()Then
- emplist.setCurrentPageNumber(CPN+1)
- endif
- エンド機能
- functionbtnlast_onclick() ''最後のページにフリップします
- emplist.setCurrentPageNumber(emplist.getMaxPageNumber())
- エンド機能
初めてページに入力するときに最初のページが表示されるようにするには、WebページオブジェクトのOnenterイベントを書く必要があります。
- functionemplist_enenter()
- ifemplist.firstenteredthen
- emplist.setCurrentPageNumber(1)
- endif
- エンド機能
- ステップ5:各ページを表示するスクリプトを書きます。
- <HR >< Tableborder = 0 ><Tr> //ヘッダーを表示します
- <thalign = leftwidth = 35></th>
- <thalign = leftwidth = 150
- <thalign = leftwidth = 200> lastname </th>
- <thalign = leftwidth = 200 >firstName </th ></tr>
- <%
- pageNumber = emplist.getCurrentPagenumber()//ページターンに必要なさまざまなパラメーターを計算します。
- recordsperpage = emplist.getRecordsperpage()
- startrecord =((pageNumber-1)*RecordSperPage)+1
- LastRecord = RecordSet1.GetCount()
- forrecordptr = startrecordto(startrecord+recordsperpage-1)%>
- <%ifrecordset1.eof = truethen%>
- <tr>
- <TD ></TD>
- <TD ></TD>
- <TD ></TD>
- <TD ></TD>
- </tr>
- <%else%>
- <%RecordSet1.Moveabsolute(RecordPtr)%>
- <tr>
- <%ifrecordptr
- <TD ><%= RecordPtr%></TD>
- <%else%>
- <TD ></TD>
- <%endif%>
- <TD ><%= RecordSet1.Fields.GetValue(Empid)%></TD>
- <TD ><%= RecordSet1.Fields.getValue(lastName)%></td>
- <TD ><%= RecordSet1.Fields.GetValue(FirstName)%></TD>
- </tr>
- <%endif%>
- <%next%>
- </テーブルhr>
7番目のタイプ:データ環境オブジェクトモデルメソッド
データ環境オブジェクトモデルは、ADOオブジェクトモデルとそのオブジェクト - 接続、コマンド、レコードセット、フィールド、パラメーターオブジェクトをより簡単な形に抽象化します。データ環境オブジェクトモデルは、メソッドとしてコマンドを明らかにします。ユーザーはこれらのメソッドを呼び出して、これらのコマンドを実行し、結果のレコードセットを返すことができます。 Deom Object Modelの詳細については、関連する本を参照してください。 Emp7.aspの次の例を見てみましょう。
ステップ1:VI6.0のプロジェクトエクスプローラーウィンドウのプロジェクトのマウスを右クリックし、[ポップアップ]メニューから[データ接続の追加]を選択します。 VIから指定されたナビゲーションプロンプトに従ってデータベースへの接続を確立した後、ユーザーはASPアプリケーションからデータベースにアクセスするためにデータコマンドを追加します。同時に、Project ExplorerウィンドウのGlobal.ASAファイルの下にデータ環境オブジェクトが表示されます。
ステップ2:データ環境オブジェクトを右クリックし、[ポップアップ]メニューから[データコマンドの追加]オプションを選択して、データコマンドコマンドを追加します1。 VI6.0のナビゲーションプロンプトによると、command1 Propertiesポップアップウィンドウの遺伝的ページでSQLステートメントを選択し、EMPから[SELECT *]を入力できます。 OKを押して戻ります。
ステップ3:このデータコマンドを作成した後、データ環境オブジェクトのメソッドを作成し、スクリプトからこのメソッドを呼び出すことができ、メソッドはユーザーにレコードセットを返します。
thispage.createde()// SOMモードでは、このページは現在のWebページオブジェクトを表し、createde()メソッドはDEオブジェクトを作成します。
de.Command1 // DEオブジェクトのコマンドを実行します。これは後でパラメーターとして使用できます。これは、条件付きクエリを実行するときに非常に便利です。
rs = de.rscommand1 // de.rscommand1を設定すると、RSオブジェクトはADOレコードセットオブジェクトに完全に等しいようになります。
ステップ4:RSはADOオブジェクトであるため、次の実装ページターンコードは上記のメソッドを完全に指し、ここでスキップされます。
FrontPage2000のデータベースナビゲーションに実装されているような他のメソッドは、このトピックに関連していないため、省略されています。
要約すると、上記で導入された各方法には、長さのために浸透することはできません。この記事は、ページターニングの具体的な例を介してASP Webプログラミングのさまざまな方法を紹介したいと考えています。ページプログラミング。DHTML、DTCコントロール、SOMオブジェクトモデル、DEOMオブジェクトモデルを使用する方法。