在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
在微软的ASP编程体系中,ADO对象的建立,使得从网页访问数据库成为一件易事,特别是ADO的Recordset对象使得控制数据的输出显示更为方便、自由。而在Visual InterDev6.0(以下简称VI6.0)中,由于Script Object Model(以下简称SOM)、Design-Time Control(以下简称DTC)以及Data Environment Object Model(以下简称DEOM)等对象模型的引入,使网页对数据库的访问设计显得更为方便。 <%//建立与employee.mdb数据库的连接。 Set conn = Server.CreateObject("ADODB.Connection") conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=employee.mdb" //建立emp表的Recordset对象实例rs。 Set rs = Server.CreateObject("ADODB.Recordset") rs.Open "emp", conn, 3 PageSize = 10 //pagesize属性指定了每页要显示的记录条数 Page = CLng(Request("Page")) 'string型转化为long型 If Page < 1 Then Page = 1 If Page > rs.PageCount Then Page = rs.PageCount If Page <> 1 Then Response.Write "<A HREF=emp1.asp?Page=1>第一页</A>" Response.Write "<A HREF=emp1.asp?Page=" & (Page-1) & ">上一页</A>" End If If Page <> rs.PageCount Then Response.Write "<A HREF=emp1.asp?Page=" & (Page+1) & ">下一页</A>" Response.Write "<A HREF=emp1.asp?Page="&rs.PageCount & ">最后一页</A>" End If Response.write"页码:" & Page & "/" & rs.PageCount & "</font>" //每一页的显示 //显示表头 Response.Write "<CENTER><TABLE BORDER=1>" Response.WRITE "<TR><TD>" & rs.Fields("emp ID").Name & "</TD>" Response.WRITE "<TD>" & rs.Fields("last name").Name & "</TD>" Response.WRITE "<TD>" & rs.Fields("first name").Name & "</TD></TR>" //循环显示每条记录 rs.AbsolutePage = Page //把页码赋给absolutepage属性从而知当前页的首条记录号 For iPage = 1 To rs.PageSize // Response.WRITE "<TR><TD>" & rs.Fields("emp ID").Value & "</TD>" Response.WRITE "<TD>" & rs.Fields("first name").Value & "</TD>" Response.WRITE "<TD>" & rs.Fields("last name").Value & "</TD></TR>" rs.MoveNext If rs.EOF Then Exit For Next Response.Write "</TABLE></CENTER>"%>
if Pagenum = "" Then Pagenum = 1 //从第一页开始显示 //建立数据库连接和Recordset对象实例rs。 与第一种方法相同,此处略过。 RS.Pagesize = 10 ' 设置一页中显示的记录条数为10条 // 确定翻页的动作 Select Case Request("NAV") Case "" session("Pagenum") = 1 case "First" ' First Record session("Pagenum") = 1 case "Prev" ' Previous Record if session("Pagenum") > 1 then session("Pagenum") = session("Pagenum") - 1 End If case "Next" ' Next Record if session("Pagenum")< RS.PageCount then session("Pagenum") = session("Pagenum") + 1 End if case "Last" ' Last Record session("Pagenum") = RS.PageCount End Select RS.Absolutepage = Clng(session("Pagenum")) //确定当前页的第一条记录号 // 显示当前页 同第一种方法,此处略过。 // Nav 翻页按钮设置 <form method="GET" action="emp2.asp"> <input type="submit" name="NAV" Value="首页"> <input type="submit" value="上页" name="NAV"> <input type="submit" value="下页" name="NAV"> <input type="submit" value="末页" name="NAV"></form> 第三种:用Grid控件设计分页 <TABLE ID="Table1" DATASRC="#Recordset1_RDS" DATAPAGESIZE=5> //假定前面设定Recordset控件名为Recordset1。每页显示5条记录。 <THEAD> <TH ALIGN="left" WIDTH=150>Emp ID</TH> //输出表头 <TH ALIGN="left" WIDTH=200>Last Name</TH> <TH ALIGN="left" WIDTH=200>First Name</TH> </THEAD> <TR> <TD><DIV DATAFLD="Emp ID"></DIV></TD> //输出表内容 <TD><DIV DATAFLD="Last Name"></DIV></TD> <TD><DIV DATAFLD="First Name"></DIV></TD> </TR> </TABLE> 第三步:然后,增加一对DTCs Button按钮控件来做翻页导航,一个命名为“btnPrevious”(上一页),一个命名为“btnNext”(下一页)。它们相应的脚本如下: <SCRIPT LANGUAGE=VBScript> Function btnPrevious_onclick() Table1.previousPage() End Function Function btnNext_onclick() Table1.nextPage() End Function </SCRIPT> 第五种:DHTML法二 Dim gCurrentPageNumber //当前页号 Dim gMaxPageNumber //最大页数 Dim gRecordsPerPage //每页显示记录数 gRecordsPerPage = 5 // 设置每页显示记录数为5条记录。 Function Recordset1_ondatasetcomplete() totalRecordCount = Recordset1.getCount() //总的记录条数 gMaxPageNumber = Int(totalRecordCount / gRecordsPerPage) //获得最大页数 If (totalRecordCount Mod gRecordsPerPage) > 0 then gMaxPageNumber = gMaxPageNumber + 1 End If End Function 第三步:创建翻页导航按钮。 Function btnFirst_onclick() ' 翻到首页 gCurrentPageNumber = 1 DisplayData() End Function Function btnPrevious_onclick() ' 翻到上一页 if gCurrentPageNumber > 1 Then gCurrentPageNumber = gCurrentPageNumber - 1 DisplayData() End If End Function Function btnNext_onclick() ' 翻到下一页 if gCurrentPageNumber < gMaxPageNumber Then gCurrentPageNumber = gCurrentPageNumber + 1 DisplayData() End If End Function Function btnLast_onclick() '翻到末页 gCurrentPageNumber = gMaxPageNumber DisplayData() End Function 第四步:编写显示每一页的函数。其中使用了许多DHTML的属性和方法,请读者自行参考相关书籍。 Sub DisplayData() startRecord = ((gCurrentPageNumber - 1) * gRecordsPerPage) + 1 //计算每一页开始显示的记录号数(位置,第几条) rowCtr = 1 lblPageNumber.innerHTML = gCurrentPageNumber & "/" & gMaxPageNumber For recordPtr = startRecord To (startRecord + gRecordsPerPage - 1) //循环显示一页的各条记录 If recordPtr > Recordset1.getCount() Then //显示空表 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 ID") empLName = Recordset1.fields.getValue("first name") empFName = Recordset1.fields.getValue("last name") Table1.rows(rowCtr).cells(0).innerText = recordPtr ' Counter Table1.rows(rowCtr).cells(1).innerText = empID Table1.rows(rowCtr).cells(2).innerText = empLName Table1.rows(rowCtr).cells(3).innerText = empFName End If rowCtr = rowCtr + 1 Next End Sub 另外,我们还需要在window对象的onload事件中编写如下脚本: For rowCtr = 1 to gRecordsPerPage Table1.insertRow(rowCtr) ' 插一新列 For cellCtr = 0 to 3 Table1.rows(rowCtr).insertCell() Next Next 第六种:服务器端控制翻页方法。 Function Recordset1_ondatasetcomplete() recordsPerPage = 5 empList.setRecordsPerPage(recordsPerPage)//设置网页对象每页记录条数属性为5 totalRecordCount = Recordset1.getCount()//获得记录集的总条数 mpn = Int(totalRecordCount / recordsPerPage) //计算出mpn为总页数 If (totalRecordCount Mod recordsPerPage) > 0 then mpn = mpn + 1 End If empList.setMaxPageNumber(mpn) End Function 第四步:拖四个button控件到网页中,编写翻页控制脚本。我们主要是通过改变网页对象的CurrentPageNumber属性的值来实现翻页。 Function btnFirst_onclick()' 翻到首页 empList.setCurrentPageNumber(1) End Function Function btnPrevious_onclick()' 翻到上一页 cpn = empList.getCurrentPageNumber() if cpn > 1 Then empList.setCurrentPageNumber(cpn - 1) End If End Function Function btnNext_onclick()' 翻到下一页 cpn = empList.getCurrentPageNumber() if cpn < empList.getMaxPageNumber() then empList.setCurrentPageNumber(cpn + 1) End If End Function Function btnLast_onclick() ' 翻到末页 empList.setCurrentPageNumber( empList.getMaxPageNumber() ) End Function 为保证首次进入该页时,显示的是第一页,我们还得编写该网页对象的onEnter事件。 Function empList_onEnter() If empList.firstEntered Then empList.setCurrentPageNumber(1) End If End Function 第五步:编写显示每一页的脚本。 <HR><TABLE BORDER=0><TR>//显示表头 <TH ALIGN="left" WIDTH=35></TH> <TH ALIGN="left" WIDTH=150>Emp ID</TH> <TH ALIGN="left" WIDTH=200>Last Name</TH> <TH ALIGN="left" WIDTH=200>First Name</TH></TR> <% pageNumber = empList.getCurrentPageNumber()//计算翻页所需的各种参数,同DHTML法二 recordsPerPage = empList.getRecordsPerPage() startRecord = ((pageNumber - 1) * recordsPerPage) + 1 lastRecord = Recordset1.getCount() For recordPtr = startRecord To (startRecord + recordsPerPage - 1)%> <%If Recordset1.EOF = True Then%> <TR> <TD> </TD> <TD> </TD> <TD> </TD> <TD> </TD> </TR> <%Else%> <%Recordset1.moveAbsolute(recordPtr)%> <TR> <% If recordPtr <= lastRecord Then %> <TD><%=recordptr%></TD> <%Else%> <TD> </TD> <% End If %> <TD><%=Recordset1.fields.getValue("emp ID")%></TD> <TD><%=Recordset1.fields.getValue("last name")%></TD> <TD><%=Recordset1.fields.getValue("first name")%></TD> </TR> <%End If%> <%Next%> </TABLE><HR> 第七种:Data Environment Object Model(数据环境对象模型)法 第四步:因为rs为ADO对象,所以,以下的实现翻页代码完全参照以上介绍的几种方法,此处略过。 |
请发表评论