ฟังก์ชั่นการใช้งานโปรแกรม: การแสดงเพจข้อมูลในตารางข้อมูลสอง
ตาราง ฉันพบข้อกำหนดที่ค่อนข้างหายาก ฉันสงสัยว่าคุณประสบปัญหาดังกล่าวหรือไม่ ดังนั้นฉันจึงอยากจะแบ่งปันกับคุณ
ความต้องการของลูกค้า: ข้อมูลสองส่วน สอง จากตำแหน่งที่แตกต่างกัน ทั้งสองตารางในฐานข้อมูลถูกกำหนดให้เป็นฐานข้อมูล DB1 และ DB2 และตาราง Table1 และ Tabel2 ข้อมูลของทั้งสองตารางควรแสดงในส่วนบนและล่างของหน้าตามลำดับและควรแสดงหมายเลขเพจเดียวกัน นำมาใช้ เช่น ข้อมูลส่วนแรก หากไม่เพียงพอ ข้อมูลส่วนที่สองจะถูกกรอกใน
'/*code*/
<%
Set objConn1=Server.CreateObject("ADODB.Recordset")
ตั้งค่า objConn2=Server.CreateObject("ADODB.Recordset")
objConn1.Open "PROVIDER=SQLOLEDB;แหล่งข้อมูล=localhost;UID=sa;PWD=123;ฐานข้อมูล=DB1"
objConn2.Open "PROVIDER=SQLOLEDB;แหล่งข้อมูล=localhost;UID=sa;PWD=123;DATABASE=DB2"
หน้า=CLng(Request.QueryString("หน้า"))
ถ้าหน้า = "" แล้ว
หน้า=1
สิ้นสุดถ้า
StrSQL1="select * จาก Table1 เรียงลำดับตาม ID desc"
StrSQL2="select * from Table2 order by ID desc"
record_count1=Clng(objConn1.execute(StrSQL1)(0)) 'รับจำนวนเรคคอร์ดในตารางแรก
record_count2=Clng(objConn2.execute(StrSQL2)(0))'รับจำนวนเรคคอร์ดในตารางที่สอง
record_count=record_count1+record_count2 'รับจำนวนระเบียนในสองตารางและ
If record_count>0 จากนั้น
page_size1=5 'จำนวนเริ่มต้นของส่วนที่แสดงของข้อมูลในตารางแรกต่อหน้า
page_size2=5 'ค่าเริ่มต้นที่แสดงจำนวนข้อมูลบางส่วนในตารางที่สองต่อหน้า
page_count1=CInt(record_count1/page_size1)
ถ้า (record_count1 Mod page_size1)<(page_size1/2) ดังนั้น page_count1=page_count1+1 'รับหมายเลขหน้าของส่วนแรกของข้อมูล
page_count2=CInt(record_count2/page_size2)
ถ้า (record_count2 Mod page_size2)<(page_size2/2) จากนั้น page_count2=page_count2+1'รับหมายเลขหน้าของส่วนที่สองของข้อมูล
ถ้า Cint(page_count2)=cint(page) จากนั้น 'สมมติว่าส่วนที่สองของข้อมูล ต้องน้อยกว่านี้ ให้พิจารณาว่า หน้าปัจจุบันเป็นหน้าสุดท้ายที่มีข้อมูลน้อย
thepageRecordcount=record_count2-(page-1)*5 'จำนวนข้อมูลที่แสดงบนหน้าสุดท้ายของส่วนที่สองของข้อมูล
page_size1=10-cint(thepageRecordcount) 'จำนวนรายการที่แสดงในหน้าสุดท้ายของส่วนที่สองของส่วนแรกของข้อมูล'
page_size1=cint(thepageRecordcount) 'รับจำนวนรายการที่แสดงในส่วนแรกของหน้านี้
elseif cint(page)>cint(page_count2) จากนั้น 'หลังจากนี้ ข้อมูลส่วนแรกทั้งหมดจะเป็น
page_size1=10
page_size2=0
สิ้นสุดถ้า
page_count=CInt(record_count/(page_size1+page_size2) 'จำนวนหน้าในทั้งสองหมวดหมู่รวมกัน
ถ้า (record_count Mod (page_size1+page_size2))<((page_size1+page_size2)/2) ดังนั้น page_count=page_count+1
ถ้าหน้า < 1 แล้ว
หน้า=1
สิ้นสุดถ้า
ถ้าเพจ > page_count แล้ว
หน้า = page_count
สิ้นสุดถ้า
Dim Pagefrom,Pageto
Pagefrom=หน้า-10
Pageto=page+10
ถ้า Pagefrom<1 แล้ว
เพจจาก=1
สิ้นสุดถ้า
ถ้า Pageto>record_count แล้ว
Pageto=page_count
สิ้นสุดถ้า
สิ้นสุดถ้า
ถ้าหน้า<=1 จากนั้น 'แสดงคำค้นหาในหน้าแรก
StrSQL1="เลือกด้านบน "&page_size1&" * จาก Table1 "
StrSQL1=StrSQL1&" เรียงลำดับตาม ID คำอธิบาย"
StrSQl2="เลือกด้านบน "&page_size1&" * จาก Table2 "
StrSQL2=StrSQL2&" เรียงลำดับตาม id desc"
อื่น 'แสดงคำค้นหาในหน้า N
StrSQL1="เลือกยอดนิยม "&(Page-1)*page_size1&" ID จาก Table1 "
StrSQL1=StrSQL1&" เรียงลำดับตาม id Desc"
StrSQL1="เลือก 1 ID ยอดนิยมจาก ("&StrSQL1&") DERIVEDTBL สั่งซื้อตาม id "
'การตอบสนองเขียน (SQL)
id =ตัดแต่ง(objConn1.execute(StrSQL1)(0))
StrSQL1="เลือกด้านบน "&page_size1&" * จาก Table1"
StrSQL1=StrSQL1&" โดยที่ id<'"&id&"'"
StrSQL1=StrSQL1&" เรียงลำดับตาม id Desc"
StrSQL2="เลือกด้านบน "&(Page-1)*page_size2&" id จาก Table2 "
StrSQL2=StrSQL2&" เรียงลำดับตาม id Desc"
StrSQL2="SELECT Top 1 id From ("&StrSQL2&") DERIVEDTBL สั่งซื้อตาม id "
id =Trim(objconn2.execute(StrSQL2)(0))
StrSQL2="เลือกด้านบน "&page_size2&" * จาก Table2 "
StrSQL2=StrSQL2&" โดยที่ id<'"&id &"'"
StrSQL2=StrSQL2&" เรียงลำดับตาม id Desc"
สิ้นสุดถ้า
%>
<%
ถ้า record_count>0 แล้ว
%>
-
ตั้งค่า Rs1=Server.CreateObject("Adodb.Recordset")
rs1.openStrSQL1,objconn1
สำหรับ n = 1 ถึง page_size1
ถ้า rs1.Eof ให้ออกเพื่อ
-
<!--ส่วนแรกของเนื้อหาที่แสดงจะวนซ้ำ-->
-
rs1.MoveNext
ถ้า rs1.EOF ให้ออกเพื่อ
ต่อไป
rs1.ปิด
ตั้งค่า rs1=ไม่มีอะไร
-
-
ตั้งค่า Rs2=Server.CreateObject("Adodb.Recordset")
rs2.openStrSQL2,objconn2
สำหรับ n = 1 ถึง page_size2
ถ้า rs2.Eof ให้ออกเพื่อ
-
<!--ส่วนที่สองของเนื้อหาที่แสดงจะวนซ้ำ-->
-
rs2.MoveNext
ถ้า rs2.EOF ให้ออกเพื่อ
ต่อไป
rs2.ปิด
ตั้งค่า rs2=ไม่มีอะไร
%>
<!--หมายเลขหน้าผลลัพธ์-->
<%if page<>"1" then%><a href=?page=<%=Cint(page-1)%>>หน้าก่อนหน้า</a> <%end if%>
<% 'ใช้ for loop เพื่อเขียนการเชื่อมต่อหมายเลขหน้า
สำหรับ i=Pagefrom ถึง Pageto
ถ้า i=0 แล้ว
ผม=1
สิ้นสุด
ถ้า i<>Cint(page) แล้ว
strurl="<a href=?page="&i&"><font color=#000000>"&i&"</font></a>"
อื่น ๆ
strurl="<b><font color=#ce0031>"&i&"</font></b>"
สิ้นสุดถ้า
response.write strurl
ตอบกลับเขียน " "
ต่อไป
-
<%ถ้า page_count =1 หรือ (page_count-Cint(page))=0 ดังนั้น
การตอบสนองเขียน ("")
อื่น
ตอบกลับเขียน "<a href=?page="&Cint(page+1)&">หน้าถัดไป</a>"
สิ้นสุดถ้า
-
<!--หมายเลขหน้าผลลัพธ์-->
'/*สิ้นสุดโค้ด*/
ระดับของฉันมีจำกัด โปรแกรมค่อนข้างหยาบ อาจมีข้อบกพร่อง~ฉันหวังว่าคุณจะสามารถวิพากษ์วิจารณ์และแก้ไขฉันได้~