ในระบบการเขียนโปรแกรม ASP ของ Microsoft การสร้างออบเจ็กต์ ADO ทำให้ง่ายต่อการเข้าถึงฐานข้อมูลจากเว็บเพจ โดยเฉพาะอย่างยิ่ง ออบเจ็กต์ Recordset ของ ADO ช่วยให้ควบคุมเอาต์พุตและการแสดงข้อมูลได้สะดวกยิ่งขึ้น ใน Visual InterDev6.0 (ต่อไปนี้จะเรียกว่า VI6.0) เนื่องจากการเริ่มใช้โมเดลออบเจ็กต์ เช่น Script Object Model (ต่อไปนี้จะเรียกว่า SOM) การควบคุมเวลาออกแบบ (ต่อไปนี้จะเรียกว่า DTC) และ Data Environment Object โมเดล (ต่อไปนี้จะเรียกว่า DEOM) ทำให้การออกแบบการเข้าถึงฐานข้อมูลหน้าเว็บสะดวกยิ่งขึ้น
เนื่องจากหัวข้อที่เกี่ยวข้องกับการเชื่อมต่อฐานข้อมูล จึงมีเพียงโค้ดและความคิดเห็นสั้นๆ เท่านั้นที่ได้รับด้านล่าง และมุ่งเน้นไปที่วิธีการใช้วัตถุ Recordset (หรือตัวควบคุม) เพื่อให้เกิดการแสดงเพจของบันทึกข้อมูล ตามความเข้าใจของฉัน กุญแจสำคัญในการแสดงเพจอยู่ที่ความเชี่ยวชาญในคุณสมบัติและวิธีการของวัตถุชุดระเบียนของ ADO หรือตัวควบคุมชุดระเบียนของ DTC (การควบคุมเวลาออกแบบ)
อาวุธทั้งเจ็ดประเภทนี้ที่แสดงในหน้าสามารถสรุปได้เป็นสี่ประเภท:
ฉันเรียกวิธีที่หนึ่งและสองชั่วคราวว่าวิธี ASP บริสุทธิ์ ซึ่งเป็นวิธีที่ใช้บ่อยที่สุดบนเว็บไซต์ ASP ในประเทศ ความแตกต่างระหว่างวิธีเหล่านี้อยู่ที่เทคนิคการใช้งานเท่านั้น การใช้งานทั้งสองวิธีนี้เป็นวิธีที่เข้าใจง่ายที่สุด ใช้แนวคิดออบเจ็กต์น้อยที่สุด และมีข้อกำหนดขั้นต่ำสำหรับสภาพแวดล้อมการพัฒนา (เพียง Notepad เท่านั้นที่จะทำ) อาจกล่าวได้ว่าแก่นแท้ของทั้งสองวิธีนี้ยังคงเป็นแนวคิดการเขียนโปรแกรม CGI แต่มีการนำวัตถุ ADO เข้ามาในโปรแกรม
วิธี DHTML ที่สี่และห้ามีชื่อว่า SOM ชั่วคราว ทั้งสองวิธีนี้จำเป็นต้องใช้ Script Object Model ที่เสนอโดย Microsoft และคุณสมบัติการผูกฐานข้อมูลใหม่ของวัตถุ Table ใน DHTML ในสภาพแวดล้อม VI6.0 (หนังสือและบทความจำนวนมากแนะนำเฉพาะคุณสมบัติ CSS ของ DHTML เท่านั้น มันถูกใช้อย่างมีสไตล์ ออกแบบและละเว้นการแนะนำคุณสมบัติการผูกข้อมูล) เพื่อควบคุมการเปิดเพจในฝั่งไคลเอ็นต์ แต่กำหนดให้เบราว์เซอร์ของผู้ใช้ต้องรองรับ DHTML เช่น Microsoft Internet Explorer 4.0 ขึ้นไป
วิธีที่หกมีชื่อว่าวิธีฝั่งเซิร์ฟเวอร์ SOM ชั่วคราว จำเป็นต้องได้รับการพัฒนาในสภาพแวดล้อม VI6.0 โดยจะใช้การควบคุม DTC หลายอย่างใน Script Object Model ที่เสนอโดย Microsoft: Recordset, PageObject, Grid ฯลฯ เพื่อใช้การควบคุมการเปลี่ยนหน้าบนฝั่งเซิร์ฟเวอร์ (ไคลเอนต์) นี่เป็นวิธีการเขียนโปรแกรมใหม่ที่น่าตื่นเต้นซึ่งถือว่าเว็บเพจเป็นออบเจ็กต์ (โมเดลออบเจ็กต์นี้แตกต่างจากโมเดลออบเจ็กต์เอกสาร DOM แบบดั้งเดิม: DOM สามารถควบคุมได้เฉพาะไคลเอนต์เท่านั้น ในขณะที่ SOM สามารถควบคุมเซิร์ฟเวอร์และไคลเอนต์ได้) ทำให้ตระหนักถึงวัตถุอย่างแท้จริง การเขียนโปรแกรมเชิงมุ่งเน้นของหน้าเว็บ แต่น่าเสียดายที่อาจเป็นเพราะความสามารถส่วนตัวของฉันที่จำกัด โดยส่วนตัวแล้วฉันคิดว่าเทคโนโลยีนี้ยังไม่โตเต็มที่ ตัวอย่างเช่น การรวมเข้ากับเบราว์เซอร์ยังไม่ดีนักซึ่งจะอธิบายรายละเอียดในภายหลัง
วิธีที่เจ็ดมีชื่อว่าวิธี DEOM ชั่วคราว นอกจากนี้ยังใช้ Data Environment Object Model ที่สร้างขึ้นใน VI6.0 เพื่อสร้างอ็อบเจ็กต์ชุดระเบียน นี่เป็นวิธีการที่ค่อนข้างใหม่ในการเขียนโปรแกรมเว็บ เมื่อเปรียบเทียบกับโมเดล SOM แล้ว จะมีข้อดีในตัวเอง ซึ่งจะกล่าวถึงรายละเอียดในภายหลัง
ซอร์สโค้ดตัวอย่างทั้งหมดที่อ้างถึงด้านล่างสามารถคัดลอกและใช้งานได้โดยตรง คุณไม่จำเป็นต้องเข้าใจหลักการด้วยซ้ำ เพียงแทนที่ส่วนที่เป็นตัวหนาและตัวเอียงด้วยชื่อฐานข้อมูลหรือชื่อฟิลด์ที่เกี่ยวข้อง
ก่อนที่จะเริ่มแนะนำวิธีการเพจต่างๆ อย่างละเอียด ให้เราสร้างฐานข้อมูลก่อน: ใช้การเข้าถึงใน Office97 เพื่อสร้าง Employee.mdb สร้างตาราง emp ในนั้น และตั้งค่าเพียงสามฟิลด์: emp ID นามสกุล และชื่อ เหตุใดจึงง่ายมากเพราะเราใส่ใจเกี่ยวกับวิธีการประมวลผลผลลัพธ์ของชุดระเบียน
วิธีแรก: วิธีการทดแทนพารามิเตอร์โดยตรง
วิธีนี้คือการสร้างวัตถุ Recordset ด้วยตนเอง และใช้คุณสมบัติขนาดหน้า (จำนวนที่ระบุของบันทึกที่แสดงต่อหน้า) จำนวนหน้า (หมายเลขหน้าทั้งหมด) และคุณสมบัติหน้าสัมบูรณ์ (หมายเลขหน้าปัจจุบัน) เพื่อควบคุมเอาต์พุตการเพจ เพจจิ้งใช้ <href> เพื่อรับพารามิเตอร์หมายเลขหน้าโดยตรงเพื่อควบคุมการเปลี่ยนหน้า ชื่อของเว็บเพจคือ emp1.asp ซอร์สโค้ดมีดังนี้:
<%//สร้างการเชื่อมต่อกับฐานข้อมูล Employee.mdb
ตั้งค่า conn = Server.CreateObject (ADODB.Connection)
conn.Open driver={ไดรเวอร์ Microsoft Access (*.mdb)};dbq=employee.mdb
//สร้างอินสแตนซ์วัตถุ Recordset rs ของตาราง emp
ตั้ง rs = Server.CreateObject (ADODB.Recordset)
rs.เปิด emp, conn, 3
PageSize = 10 //แอตทริบิวต์ pagesize ระบุจำนวนระเบียนที่จะแสดงในแต่ละหน้า
Page = CLng(Request(Page)) 'แปลงประเภทสตริงเป็นประเภทยาว
ถ้าหน้า < 1 แล้ว หน้า = 1
ถ้าเพจ > rs.PageCount แล้ว Page = rs.PageCount
ถ้าหน้า <> 1 แล้ว
Response.Write <A HREF=emp1.asp?Page=1><หน้าแรก</A>
Response.Write <A HREF=emp1.asp?Page= & (หน้า-1) & >หน้าก่อนหน้า</A><
สิ้นสุดถ้า
ถ้าหน้า <> rs.PageCount แล้ว
Response.Write <A HREF=emp1.asp?Page= & (หน้า+1) & ><หน้าถัดไป </A>
Response.Write <A HREF=emp1.asp?Page=&rs.PageCount & ><หน้าสุดท้าย</A>
สิ้นสุดถ้า
หมายเลขหน้า Response.write: & หน้า & / & rs.PageCount & </font>
//แสดงแต่ละหน้า
//แสดงส่วนหัว
การตอบสนองเขียน <CENTER"> <TABLE BORDER=1>
Response.WRITE <TR><TD> & rs.Fields(emp ID).ชื่อ & </TD>
Response.WRITE <TD>< & rs.Fields(นามสกุล).ชื่อ & </TD>
Response.เขียน <TD>< & rs.Fields(ชื่อ).ชื่อ & </TD></TR>
//วนซ้ำเพื่อแสดงแต่ละเรคคอร์ด
rs.AbsolutePage = Page //กำหนดหมายเลขหน้าให้กับแอตทริบิวต์ Absolutepage เพื่อทราบหมายเลขบันทึกแรกของหน้าปัจจุบัน
สำหรับ iPage = 1 ถึง rs.PageSize //
Response.WRITE <TR><TD> & rs.Fields(emp ID).Value & </TD>
Response.WRITE <TD>< & rs.Fields(ชื่อ).Value & </TD>
Response.WRITE <TD>< & rs.Fields(นามสกุล).Value & </TD><</TR>
rs.MoveNext
ถ้า rs.EOF ให้ออกเพื่อ
ต่อไป
การตอบสนองเขียน </TABLE><</CENTER>%>
ประเภทที่สอง: วิธีการส่งพารามิเตอร์รูปแบบ
วิธีนี้จะเหมือนกับวิธีแรกเมื่อสร้างอ็อบเจ็กต์ Recordset ยกเว้นว่าเมื่อควบคุมการเปลี่ยนหน้า จะใช้ <input> และคำสั่ง case เพื่อรับรู้ถึงการเปลี่ยนหน้า ชื่อของหน้าเว็บคือ: emp2.asp วิธีนี้มีข้อบกพร่องในตรรกะการเขียนโปรแกรม: หลังจากกดปุ่มหน้าก่อนหน้าหรือหน้าถัดไปแล้วกดปุ่มรีเฟรชบนเบราว์เซอร์ หน้าจะเปิดโดยอัตโนมัติ ซอร์สโค้ดมีดังนี้:
ถ้า Pagenum = ดังนั้น Pagenum = 1 //เริ่มแสดงตั้งแต่หน้าแรก
//สร้างการเชื่อมต่อฐานข้อมูลและอินสแตนซ์วัตถุชุดระเบียน rs
เช่นเดียวกับวิธีแรก ข้ามที่นี่
RS.Pagesize = 10 'กำหนดจำนวนเรคคอร์ดที่แสดงในหนึ่งหน้าเป็น 10
// กำหนดการดำเนินการเปลี่ยนหน้า
เลือกคำขอกรณี (NAV)
กรณี
เซสชั่น(หน้า) = 1
กรณีแรก ' บันทึกครั้งแรก
เซสชั่น(หน้า) = 1
case Prev ' บันทึกก่อนหน้า
ถ้า session(Pagenum) > 1 แล้ว
เซสชัน (หน้า) = เซสชัน (หน้า) - 1
สิ้นสุดถ้า
case Next ' บันทึกถัดไป
ถ้า session(Pagenum)<RS.PageCount แล้ว
เซสชัน (หน้า) = เซสชัน (หน้า) + 1
จบถ้า
กรณี Last ' Last Record
session(Pagenum) = RS.PageCount
สิ้นสุดการเลือก
RS.Absolutepage = Clng(session(Pagenum)) //กำหนดหมายเลขบันทึกแรกของหน้าปัจจุบัน
//แสดงหน้าปัจจุบัน
เช่นเดียวกับวิธีแรก ข้ามที่นี่
// การตั้งค่าปุ่มหน้า Nav
<รูปแบบวิธีการ=รับการกระทำ=emp2.asp>
<ประเภทอินพุต=ชื่อส่ง=ค่า NAV=โฮมเพจ>
<ประเภทอินพุต=ค่าส่ง=ชื่อหน้าก่อนหน้า=NAV>
<ประเภทอินพุต=ค่าส่ง=ชื่อหน้าถัดไป=NAV>
<ประเภทอินพุต=ค่าส่ง=ชื่อหน้าสุดท้าย=NAV></แบบฟอร์ม>
ประเภทที่สาม: ใช้การควบคุมตารางเพื่อออกแบบเพจ
ในบรรดาวิธีการทั้งหมด นี่เป็นวิธีที่ง่ายที่สุด คุณเพียงแค่ต้องลากตัวควบคุมชุดระเบียนและตัวควบคุมกริดใน DTC ไปยังหน้าเว็บ asp นอกจากนี้คุณยังสามารถเลือกได้ว่าจะควบคุมการเปิดเพจบนแพลตฟอร์มเซิร์ฟเวอร์หรือแพลตฟอร์มไคลเอนต์ ข้อเสียคือคุณต้องแสดงในรูปแบบที่กำหนด และคุณไม่สามารถควบคุมรูปแบบการแสดงผลของตารางได้อย่างอิสระด้วยตนเอง
มีวิธีดังนี้:
สร้างโปรเจ็กต์ emp.vip ใน VI6.0 จากนั้นเพิ่มเว็บเพจ asp ในโครงการ: emp3.asp
ขั้นตอนที่ 1: เลือกเพิ่มการเชื่อมต่อข้อมูล... บนแถบเมนูของ VI6.0 และปฏิบัติตามคำแนะนำการนำทางของเครื่องมือการพัฒนา คุณสามารถสร้างการเชื่อมต่อกับฐานข้อมูล Employee.mdb ได้อย่างง่ายดาย ลากตัวควบคุมชุดระเบียนจากแถบเครื่องมือ DTC ไปยังเว็บเพจและตั้งค่าคุณสมบัติ ดังแสดงในรูป:
เมื่อคุณลากตัวควบคุมไปยังเว็บเพจ VI6.0 จะแจ้งให้คุณทราบโดยอัตโนมัติว่าจะใช้โมเดลอ็อบเจ็กต์การเขียนสคริปต์หรือไม่ กดใช่
ขั้นตอนที่ 3: ลากตัวควบคุมตารางจากแถบเครื่องมือ DTC ไปยังหน้าเว็บ จากนั้นคลิกขวาที่เมาส์และตั้งค่าคุณสมบัติ เช่น: เลือกชื่อของตัวควบคุมชุดระเบียนที่สร้างในขั้นตอนที่สอง เลือกฟิลด์ในตาราง emp แต่ละหน้า มีการแสดงกี่บันทึกและรูปแบบการแสดง เป็นต้น มันง่ายและสะดวกมาก เพียงทำตามคำแนะนำในการนำทาง
วิธีที่สี่: DHTML วิธีที่หนึ่ง
บันทึกข้อมูลจะแสดงในตาราง HTML ใช้คุณสมบัติการผูกข้อมูลของตารางใน DHTML เพื่อควบคุมการแสดงเพจของเรคคอร์ด ข้อเสียคือวิธีการเปลี่ยนหน้าของคุณจะถูกจำกัดอยู่เพียงวิธีเฉพาะ: เฉพาะหน้าก่อนหน้าและหน้าถัดไป แต่ไม่ใช่หน้าแรกและหน้าสุดท้าย เนื่องจากการพลิกหน้าถูกควบคุมในฝั่งไคลเอ็นต์ วิธีนี้และวิธีที่ห้าจึงเป็นวิธีที่เร็วที่สุด แต่น่าเสียดายที่สามารถใช้ได้บนเบราว์เซอร์ที่รองรับ DHTML เท่านั้น
ใน DHTML คุณลักษณะ DATASRC ของ <TABLE> จะเปิดใช้งานตารางเพื่อเชื่อมโยงกับแหล่งข้อมูล และแอตทริบิวต์อื่น DATAPAGESIZE ระบุจำนวนเรกคอร์ดที่แสดงบนเพจในครั้งเดียว
ลองดูตัวอย่างต่อไปนี้:
ขั้นตอนที่ 1: ลากตัวควบคุมชุดระเบียนไปยังเว็บเพจที่สร้างขึ้นใหม่ emp4.htm และตั้งค่าคุณสมบัติ วิธีการจะเหมือนกับวิธีที่สาม ซึ่งจะละไว้ที่นี่
ขั้นตอนที่ 2: ป้อนรหัสต่อไปนี้:
<TABLE ID=Table1 DATASRC=#Recordset1_RDS DATAPAGESIZE=5> //สมมติว่าตัวควบคุมชุดระเบียนมีชื่อว่า Recordset1 ก่อนหน้านี้ แสดง 5 บันทึกต่อหน้า
<หัว>
<TH ALIGN=ซ้าย WIDTH=150><Emp ID</TH> //ส่วนหัวของเอาต์พุต
<TH ALIGN=ซ้าย WIDTH=200><นามสกุล</TH>
<TH ALIGN=ซ้าย WIDTH=200><ชื่อจริง</TH>
</หัว>
<TR>
<TD><<DIV DATAFLD=Emp ID><</DIV></TD> //ส่งออกเนื้อหาตาราง
<TD><<ข้อมูล DATAFLD=นามสกุล></DIV></TD>
<TD><ข้อมูล DATAFLD=ชื่อ></DIV><</TD>
</TR><
</ตาราง><
ขั้นตอนที่ 3: จากนั้นเพิ่มปุ่มควบคุมปุ่ม DTC หนึ่งคู่สำหรับการนำทางหน้า หนึ่งชื่อ btnPrevious (หน้าก่อนหน้า) และอีกอันชื่อ btnNext (หน้าถัดไป) สคริปต์ที่เกี่ยวข้องมีดังนี้:
<ภาษาสคริปต์=VBScript>
ฟังก์ชั่น btnPrevious_onclick()
Table1.previousPage()
ฟังก์ชันสิ้นสุด
ฟังก์ชั่น btnNext_onclick()
Table1.หน้าถัดไป()
ฟังก์ชันสิ้นสุด
</สคริปต์>
วิธีที่ห้า: DHTML วิธีที่สอง
วิธีนี้เป็นการปรับปรุงวิธีที่สี่ โดยใช้วิธีการเขียนสคริปต์ด้วยตนเอง เราสามารถสร้างปุ่มนำทางหน้าแรกและหน้าสุดท้าย และกำหนดตำแหน่ง (หมายเลขบันทึก) ของแต่ละบันทึกได้ เนื่องจากข้อจำกัดด้านพื้นที่ ฉันจะแนะนำเฉพาะตัวอย่างด้านล่างเท่านั้นและให้คำอธิบายสั้นๆ สำหรับคุณสมบัติและวิธีการอื่นๆ เกี่ยวกับการควบคุม DHTML และ Recordset โปรดดูหนังสือที่เกี่ยวข้อง สิ่งที่ต้องสังเกตที่นี่คือตัวควบคุมชุดระเบียนค่อนข้างแตกต่างจากวัตถุชุดระเบียน ADO ที่นำมาใช้ในวิธีแรกและวิธีที่สอง: ตัวควบคุมชุดระเบียนไม่ได้ให้คุณสมบัติโดยตรง เช่น ขนาดหน้าและจำนวนหน้า และจำเป็นต้องคำนวณโดยใช้วิธีที่อธิบายไว้ ด้านล่าง.
ขั้นตอนที่ 1: ลากตัวควบคุม Recordset ไปยังเว็บเพจที่สร้างขึ้นใหม่ emp5.htm ตั้งชื่อเป็น Recordset1 และตั้งค่าคุณสมบัติ วิธีการจะเหมือนกับวิธีที่สาม ซึ่งจะละไว้ที่นี่
ขั้นตอนที่ 2: กำหนดตัวแปรส่วนกลางสามตัวแปรและเขียนสคริปต์ ondatasetcomplete (การตั้งค่าข้อมูลเสร็จสมบูรณ์) ของ Recordset1
Dim gCurrentPageNumber // หมายเลขหน้าปัจจุบัน
Dim gMaxPageNumber // จำนวนหน้าสูงสุด
Dim gRecordsPerPage //แสดงจำนวนบันทึกต่อหน้า
gRecordsPerPage = 5 //กำหนดจำนวนเรคคอร์ดที่แสดงต่อหน้าเป็น 5 เรคคอร์ด
ฟังก์ชั่น Recordset1_ondatasetcomplete()
TotalRecordCount = Recordset1.getCount() //จำนวนบันทึกทั้งหมด
gMaxPageNumber = Int(totalRecordCount / gRecordsPerPage) // รับจำนวนหน้าสูงสุด
ถ้า (totalRecordCount Mod gRecordsPerPage) > 0 แล้ว
gMaxPageNumber = gMaxPageNumber + 1
สิ้นสุดถ้า
ฟังก์ชันสิ้นสุด
ขั้นตอนที่ 3: สร้างปุ่มนำทางหน้า
ฟังก์ชั่น btnFirst_onclick() 'หันไปที่หน้าแรก'
gCurrentPageNumber = 1
ข้อมูลการแสดงผล()
ฟังก์ชันสิ้นสุด
ฟังก์ชั่น btnPrevious_onclick() 'ไปที่หน้าก่อนหน้า
ถ้า gCurrentPageNumber > 1 แล้ว
gCurrentPageNumber = gCurrentPageNumber - 1
ข้อมูลการแสดงผล()
สิ้นสุดถ้า
ฟังก์ชันสิ้นสุด
ฟังก์ชั่น btnNext_onclick() 'ไปที่หน้าถัดไป'
ถ้า gCurrentPageNumber < gMaxPageNumber แล้ว
gCurrentPageNumber = gCurrentPageNumber + 1
ข้อมูลการแสดงผล()
สิ้นสุดถ้า
ฟังก์ชันสิ้นสุด
ฟังก์ชั่น btnLast_onclick() 'หันไปที่หน้าสุดท้าย'
gCurrentPageNumber = gMaxPageNumber
ข้อมูลการแสดงผล()
ฟังก์ชันสิ้นสุด
ขั้นตอนที่ 4: เขียนฟังก์ชันเพื่อแสดงแต่ละหน้า มีการใช้แอตทริบิวต์และวิธีการ DHTML มากมาย ผู้อ่านควรอ้างอิงถึงหนังสือที่เกี่ยวข้อง
ข้อมูลการแสดงผลย่อย()
startRecord = ((gCurrentPageNumber - 1) * gRecordsPerPage) + 1 //คำนวณจำนวนบันทึก (ตำแหน่ง, หมายเลข) ที่แสดงที่จุดเริ่มต้นของแต่ละหน้า
แถวCtr = 1
lblPageNumber.innerHTML = gCurrentPageNumber & / & gMaxPageNumber
สำหรับ recordPtr = startRecord To (startRecord + gRecordsPerPage - 1) //วนซ้ำเพื่อแสดงแต่ละบันทึกของเพจ
ถ้า recordPtr > Recordset1.getCount() จากนั้น //แสดงตารางว่าง
Table1.rows(rowCtr).cells(0).innerHTML = <P>< </P>
Table1.rows(rowCtr).cells(1).innerHTML = <P>< </P>
Table1.rows(rowCtr).cells(2).innerHTML = <P>< </P>
Table1.rows(rowCtr).cells(3).innerHTML = <P>< </P>
Else // แสดงแต่ละหน้าโดยเฉพาะ
Recordset1.moveAbsolute(recordPtr) // ย้ายตัวชี้บันทึก
empID = Recordset1.fields.getValue (รหัส emp)
empLName = Recordset1.fields.getValue (ชื่อ)
empFName = Recordset1.fields.getValue (นามสกุล)
Table1.rows(rowCtr).cells(0).innerText = recordPtr ' ตัวนับ
Table1.rows(rowCtr).cells(1).innerText = empID
Table1.rows(rowCtr).cells(2).innerText = empLName
Table1.rows(rowCtr).cells(3).innerText = empFName
สิ้นสุดถ้า
rowCtr = แถว Ctr + 1
ต่อไป
จบหมวดย่อย
นอกจากนี้ เรายังจำเป็นต้องเขียนสคริปต์ต่อไปนี้ในเหตุการณ์ onload ของวัตถุหน้าต่าง:
สำหรับ rowCtr = 1 ถึง gRecordsPerPage
Table1.insertRow(rowCtr) 'แทรกคอลัมน์ใหม่
สำหรับ cellCtr = 0 ถึง 3
Table1.rows(rowCtr).insertCell()
ต่อไป
ต่อไป
วิธีที่หก: วิธีการเปลี่ยนหน้าควบคุมฝั่งเซิร์ฟเวอร์
หากเราแบ่งหน้าข้อมูลบนฝั่งเซิร์ฟเวอร์เพื่อสร้างคำสั่ง HTML แล้วส่งออกไปยังไคลเอนต์ จะไม่มีปัญหาที่เบราว์เซอร์ไม่รองรับ DHTML อย่างไรก็ตาม การใช้วิธีฝั่งเซิร์ฟเวอร์จำเป็นต้องสร้างตัวควบคุม Recordset ใหม่ทุกครั้งที่เปิดหน้า ดังนั้นความเร็วจึงช้ากว่าการใช้วิธี DHTML อย่างแน่นอน แต่ถ้าเซิร์ฟเวอร์เร็วพอ ไคลเอนต์ที่ช้านี้จะไม่สังเกตเห็นมัน
ในตัวอย่างต่อไปนี้ ฉันจะแนะนำตัวควบคุม DTC ใหม่: PageObject การควบคุมนี้ทำให้เว็บเพจที่ระบุกลายเป็นออบเจ็กต์เว็บเพจ และรูทีนย่อยและฟังก์ชันที่จัดโดยผู้ใช้ในสคริปต์เซิร์ฟเวอร์ของเว็บเพจนี้ถือได้ว่าเป็นวิธีการของออบเจ็กต์เว็บเพจ โดยให้วิธีการขั้นสูงในการจัดการข้อมูลสถานะ: ออบเจ็กต์หน้าเว็บมีคุณสมบัติบางอย่าง (ตัวแปร) และผู้ใช้สามารถกำหนดอายุการใช้งานของคุณสมบัติเหล่านี้ได้ เนื่องจากคุณสมบัติข้างต้น จึงสะดวกมากสำหรับเราในการรวบรวมสคริปต์เปลี่ยนหน้า
แต่ข้อเสียของวิธีนี้คือหลังจากกดปุ่มหน้าก่อนหน้าหรือหน้าถัดไปแล้วกดปุ่มรีเฟรชบนเบราว์เซอร์หน้าเว็บจะเปิดขึ้นโดยอัตโนมัติ นอกจากนี้ หากคุณกดปุ่มย้อนกลับบนเบราว์เซอร์แล้วกดปุ่มเปลี่ยนหน้า อาจเกิดการสุ่มหน้าได้ ทั้งหมดนี้เกิดจากคุณสมบัติของวัตถุหน้าเว็บ (ตัวแปรส่วนกลาง)
ขั้นตอนที่ 1: ลากตัวควบคุม Recordset ไปยังเว็บเพจที่สร้างขึ้นใหม่ emp6.asp ตั้งชื่อเป็น Recordset1 และตั้งค่าคุณสมบัติ วิธีการจะเหมือนกับวิธีที่สาม ซึ่งจะละไว้ที่นี่
ขั้นตอนที่ 2: ลากตัวควบคุม PageObject ไปยังเว็บเพจและตั้งชื่อเป็น emplist จากนั้นคลิกขวาที่ตัวควบคุมนี้เพื่อเปิดเพจคุณสมบัติและตั้งค่าคุณสมบัติสามรายการ (ตัวแปรส่วนกลาง) ของ MaxPageNumber, RecordsPerPage และ CurrentPageNumber VI6.0 สามารถใช้วิธีรับและตั้งค่าเพื่ออ่านและเขียนค่าได้ โปรดดูข้อมูลที่เกี่ยวข้องสำหรับการใช้งานเฉพาะ
ขั้นตอนที่ 3: เขียนเหตุการณ์ ondatasetcomplete ของ Recordset1
ฟังก์ชั่น Recordset1_ondatasetcomplete()
บันทึก PerPage = 5
empList.setRecordsPerPage(recordsPerPage)//ตั้งค่าจำนวนบันทึกต่อแอตทริบิวต์เพจของออบเจ็กต์หน้าเว็บเป็น 5
TotalRecordCount = Recordset1.getCount()//รับจำนวนเรคคอร์ดทั้งหมดในชุดเรคคอร์ด
mpn = Int(totalRecordCount / recordsPerPage) //คำนวณ mpn เป็นจำนวนหน้าทั้งหมด
ถ้า (totalRecordCount Mod recordsPerPage) > 0 แล้ว
MPN = MPN + 1
สิ้นสุดถ้า
empList.setMaxPageNumber(mpn)
ฟังก์ชันสิ้นสุด
ขั้นตอนที่ 4: ลากปุ่มควบคุมสี่ปุ่มไปที่หน้าเว็บและเขียนสคริปต์ควบคุมการเปลี่ยนหน้า เราบรรลุการเปลี่ยนหน้าเป็นหลักโดยการเปลี่ยนค่าของคุณสมบัติ CurrentPageNumber ของออบเจ็กต์หน้าเว็บ
ฟังก์ชั่น btnFirst_onclick() 'หันไปที่หน้าแรก'
empList.setCurrentPageNumber(1)
ฟังก์ชันสิ้นสุด
ฟังก์ชั่น btnPrevious_onclick() 'ไปที่หน้าก่อนหน้า
cpn = empList.getCurrentPageNumber()
ถ้า cpn > 1 แล้ว
empList.setCurrentPageNumber (cpn - 1)
สิ้นสุดถ้า
ฟังก์ชันสิ้นสุด
ฟังก์ชั่น btnNext_onclick() 'ไปที่หน้าถัดไป'
cpn = empList.getCurrentPageNumber()
ถ้า cpn < empList.getMaxPageNumber() แล้ว
empList.setCurrentPageNumber(cpn + 1)
สิ้นสุดถ้า
ฟังก์ชันสิ้นสุด
ฟังก์ชั่น btnLast_onclick() 'หันไปที่หน้าสุดท้าย'
empList.setCurrentPageNumber( empList.getMaxPageNumber() )
ฟังก์ชันสิ้นสุด
เพื่อให้แน่ใจว่าหน้าแรกจะแสดงเมื่อเข้าสู่เพจเป็นครั้งแรก เราต้องเขียนเหตุการณ์ onEnter ของออบเจ็กต์หน้าเว็บด้วย
ฟังก์ชัน empList_onEnter()
ถ้า empList.firstEntered แล้ว
empList.setCurrentPageNumber(1)
สิ้นสุดถ้า
ฟังก์ชันสิ้นสุด
ขั้นตอนที่ 5: เขียนสคริปต์ที่แสดงแต่ละหน้า
<HR><<TABLE BORDER=0><TR><//แสดงส่วนหัว
<TH ALIGN=ซ้าย WIDTH=35></TH>
<TH ALIGN=ซ้าย WIDTH=150><Emp ID</TH>
<TH ALIGN=ซ้าย WIDTH=200><นามสกุล</TH>
<TH ALIGN=ซ้าย WIDTH=200><ชื่อจริง</TH></TR>
-
pageNumber = empList.getCurrentPageNumber()//คำนวณพารามิเตอร์ต่างๆ ที่จำเป็นสำหรับการเปลี่ยนหน้า เช่นเดียวกับวิธี DHTML 2
recordsPerPage = empList.getRecordsPerPage()
startRecord = ((หมายเลขหน้า - 1) * บันทึก PerPage) + 1
LastRecord = Recordset1.getCount()
สำหรับ recordPtr = startRecord To (startRecord + recordsPerPage - 1)%>
<%ถ้า Recordset1.EOF = True แล้ว%>
<TR>
<ทีดี> </ทีดี>
<ทีดี> </ทีดี>
<ทีดี> </ทีดี>
<ทีดี> </ทีดี>
</TR><
<%อื่น ๆ%>
<%Recordset1.moveAbsolute(recordPtr)%>
<TR>
<% ถ้า recordPtr <= LastRecord แล้ว %><
<TD><<%=บันทึก%></TD>
<%อื่น ๆ%>
<ทีดี> </ทีดี>
<%สิ้นสุดถ้า %>
<TD><%=Recordset1.fields.getValue(emp ID)%></TD>
<TD><%=Recordset1.fields.getValue(นามสกุล)%></TD>
<TD><<%=Recordset1.fields.getValue(ชื่อ)%></TD>
</TR><
<%สิ้นสุดถ้า%">
<%ถัดไป%>
</ตาราง><ทรัพยากรบุคคล>
วิธีที่เจ็ด: Data Environment Object Model (รูปแบบวัตถุสภาพแวดล้อมข้อมูล) วิธีการ
โมเดลออบเจ็กต์สภาพแวดล้อมข้อมูลจะสรุปโมเดลออบเจ็กต์ ADO และออบเจ็กต์ต่างๆ ได้แก่ การเชื่อมต่อ คำสั่ง ชุดระเบียน ฟิลด์ และพารามิเตอร์ ให้อยู่ในรูปแบบที่เรียบง่ายกว่า Data Environment Object Model เปิดเผยคำสั่งเป็นวิธีการ ผู้ใช้สามารถเรียกใช้เมธอดเหล่านี้ ซึ่งดำเนินการคำสั่งและส่งกลับชุดระเบียนผลลัพธ์ สำหรับข้อมูลโดยละเอียดเกี่ยวกับโมเดลวัตถุ DEOM โปรดดูหนังสือที่เกี่ยวข้อง ลองดูตัวอย่างหน้าเว็บ emp7.asp ต่อไปนี้:
ขั้นตอนที่ 1: คลิกขวาที่โปรเจ็กต์ในหน้าต่าง Project Explorer ของ VI6.0 และเลือกเพิ่มการเชื่อมต่อข้อมูลจากเมนูป๊อปอัป หลังจากสร้างการเชื่อมต่อกับฐานข้อมูลตามพร้อมท์การนำทางที่กำหนดโดย VI ผู้ใช้จะเพิ่มคำสั่งข้อมูลเพื่อเข้าถึงฐานข้อมูลจากแอปพลิเคชัน ASP ในเวลาเดียวกัน คุณจะเห็นออบเจ็กต์ Data Environment ใต้ไฟล์ global.asa ในหน้าต่าง Project Explorer
ขั้นตอนที่ 2: คลิกขวาที่ออบเจ็กต์ Data Environment และเลือกตัวเลือกเพิ่มคำสั่งข้อมูลจากเมนูป๊อปอัปเพื่อเพิ่มคำสั่งข้อมูล Command1 ตามพร้อมต์การนำทางของ VI6.0 คุณสามารถเลือกคำสั่ง SQL ในเพจ Genetal ของหน้าต่างป๊อปอัป Command1 Properties และป้อน: select * from emp กดตกลงเพื่อกลับ
ขั้นตอนที่ 3: หลังจากที่คุณสร้างคำสั่ง data คุณได้สร้างวิธีการสำหรับวัตถุสภาพแวดล้อมข้อมูลแล้ว คุณสามารถเรียกวิธีการนี้จากสคริปต์ และวิธีการจะส่งกลับชุดระเบียนให้กับผู้ใช้
thisPage.createDE() //ในโหมด SOM thisPage แสดงถึงออบเจ็กต์หน้าเว็บปัจจุบัน และเมธอด createDE() จะสร้างออบเจ็กต์ DE
DE.Command1//ดำเนินการคำสั่งของวัตถุ DE ซึ่งสามารถตามด้วยพารามิเตอร์ได้ ซึ่งมีประโยชน์มากเมื่อทำการสืบค้นแบบมีเงื่อนไข
ตั้งค่า rs=DE.rsCommand1//DE.rscommand1 ทำให้วัตถุ rs เทียบเท่ากับวัตถุ ADO Recordset อย่างสมบูรณ์
ขั้นตอนที่ 4: เนื่องจาก rs เป็นออบเจ็กต์ ADO การเปลี่ยนโค้ดหน้าต่อไปนี้จึงอ้างอิงถึงวิธีการต่างๆ ที่แนะนำข้างต้นโดยสมบูรณ์ และถูกข้ามที่นี่
วิธีอื่นๆ รวมถึงวิธีการที่นำมาใช้ในการนำทางฐานข้อมูลของ FrontPage2000 เป็นต้น เนื่องจากไม่เกี่ยวข้องกับหัวข้อนี้ จึงละไว้ที่นี่
โดยสรุป แต่ละวิธีที่นำมาใช้ก่อนหน้านี้มีเทคโนโลยีใหม่ๆ มากมาย ซึ่งไม่สามารถพูดคุยในเชิงลึกได้เนื่องจากข้อจำกัดด้านพื้นที่ บทความนี้เพียงต้องการแนะนำวิธีการต่างๆ ของการเขียนโปรแกรมหน้าเว็บ ASP ผ่านตัวอย่างเฉพาะของการเปลี่ยนหน้า ให้ทุกคนได้สัมผัสกับฟังก์ชันอันทรงพลังของ VI6.0 ในการเตรียมหน้าเว็บ ทำความเข้าใจและคุ้นเคยกับ ADO วิธีใช้ DHTML และการควบคุม DTC , โมเดลออบเจ็กต์ SOM และโมเดลออบเจ็กต์ DEOM ฉันหวังว่ามันจะให้ทางเลือกและการอ้างอิงเพิ่มเติมแก่คุณเมื่อรวบรวมหน้าเว็บ