仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 403|回复: 8
打印 上一主题 下一主题

[学习教程] ASP教程之在客户端实行数据库纪录的分页显现

[复制链接]
小女巫 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 23:16:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
asp可以使用微软的activeX使得网页功能无比强大,不过安全性也较差,而且是基于的windows服务器,所以性能稳定性也一般分页|客户端|数据|数据库|显现|实行
绪论

  在ASP程序使用中常常有一个义务就是在一个分页格局中显现数据库的查询了局。好比,当处置大批的纪录内容时,应当一次只显现10个项目,如许就会使会见者利用这些信息更简单些。收集上已有很多文章树模了多种对数据库查询了局举行分页的办法,个中较好的文章包含:
  利用存储历程对数据库纪录举行分页
  数据库分页样本代码
  利用GetRows对纪录举行分页
  可是一切这些文章先容的办法都是在服务器端举行分页处置的。举例来讲,假设有30条数据库纪录,我们但愿一次显现10笔记录。当用户哀求第一页数据时,ASP页面就提取前10笔记录并将它们发送给客户。当用户已作好筹办能够阅览上面10笔记录时,他就点击一个链接,这时候ASP页面就被从头装载,经由过程查询字符串传送出去一个新的页面值,ASP页面将掏出第11条到20笔记录,并将它们发给用户。
  本文中我们将把这全部处置历程移植到客户端。当用户联机检察数据时,这30个纪录将全体以客户端JavaScript数组的情势发送到客户机上。别的,附加的客户端JavaScript代码卖力显现第1到第10笔记录,而且链接到前面大概后面的纪录集。当点击这些链接时,将实行客户端JavaScript代码,新的数据会显现出来。因为这些都是在客户端产生的,因而只要在页面第一次被装载时才必要与Web服务器接洽,从而省却服务器与客户端间的数据传送损耗,无疑年夜年夜地进步了使用程序的功能。
  所必要的客户端剧本
  要完成在客户端显现分页的数据库纪录,ASP页面应当天生甚么样的客户端剧本呢?好像后面所述,我们必要创立一个客户端数组。由于我们筹办在一个HTML表格中显现数据库纪录,那末就要创立一个HTML数组,大概用它来显现一个HTMLTABLE行(<tr><td>DatabaseValue</td></tr>)。这个数组中将包括一切我们但愿同意用户翻阅的数据库元素。
  我们还必要一个客户真个JavaScript函数以显现这些数组值的子集。利用这个函数,我们能够显现前N个纪录;当用户点击一个链接时,就能够显现前面(或后面)N个纪录。也就是说,这个函数卖力客户端分页。
  最初,我们还必要一些办法在不更新页面的情形上去静态改动一个HTML页面的显现。这能够经由过程DHTML(静态HTML)来完成。要完成这个目标,我们必要在聚积一切输入的中央创立一个HTMLDIV标志,然后利用客户端JavaScript代码在这个DIV标志中静态修正内容。关于利用DHTML的更多信息,请浏览静态HTML进门及跨扫瞄器DHTML教程.
创立一个分页类
  要记着,这里举例的全部使用程序只包含一个ASP页面。当这个ASP页面被会见时,它将创立实行纪录分页必要的一切客户端JavaScript代码。为简化这个历程,我创立了一个VBScript类来处置这个功效。利用这个类的时分,开辟职员只需将他但愿在会见者的Web扫瞄器长进行分页的纪录集传送出去便可。关于类的利用,请浏览在VBScript中利用类。
  我将这个类定名为dhtmlGetRows,它包括两个属性和一个办法。两个属性是:
  1、RecsPerPage:断定每页显现几个纪录。
  2、THString:经由过程一个HTML表格显现这个举行了分页的了局;这个属性同意你为表格的题目指定一个字串。
  单一的办法是GenerateHTML(RecordsetObject),它为分页使用程序前往完全的HTML:客户端JavaScript代码和必要的DIV标志。这个办法只必要一个参数RecordsetObject,它应当是一个纪录集工具,个中添补了你但愿在一个分页格局中显现的数据库数据。
  这个类的代码相称长,而且年夜部分代码都只是前往客户真个JavaScript代码。上面是类的代码:
<%
ClassdhtmlGetRows
*******PRIVATEMEMBERVARIABLES**********
PrivateiRecsPerPage
PrivatestrTHString
*******************************************
************InitializeEvent*************
PrivateSubClass_Initialize()
iRecsPerPage=10assignadefaultvalue
EndSub
*******************************************

************PROPERTYLET/GET*************
PublicPropertyLetTHString(strValue)
Replaceallapostropheswith
strTHString=Replace(strValue,"","")
EndProperty
PublicPropertyGetTHString()
THString=strTHString
EndProperty

PublicPropertyLetRecsPerPage(iValue)
IfiValue>0andIsNumeric(iValue)then
iRecsPerPage=CInt(iValue)
EndIf
EndProperty
PublicPropertyGetRecsPerPage()
RecsPerPage=iRecsPerPage
EndProperty
*******************************************

****************METHODS******************
PublicFunctionGenerateHTML(objRS)
Beginbygettinganarrayofthedata
DimaValues
aValues=objRS.GetRows()
Findthevalueofrowsandcolumns
DimiCols,iRows
iCols=UBound(aValues,1)
iRows=UBound(aValues,2)
DimstrOutput
Displaytheinitialscriptblock
strOutput="<scriptlanguage=""javascript"">"&vbCrLf&_
"vartableRow=newArray("&iRows&");"&vbCrLf&vbCrLf
DimiLoop,iColLoop,strTmp
ForiLoop=0toiRows
strOutput=strOutput&"tableRow["&iLoop&"]=<tr>"
ForiColLoop=0toiCols
Fixapostrophes
strTmp=Replace(aValues(iColLoop,iLoop),"","")
Removecarraigereturns
strTmp=Replace(strTmp,vbCrLf,"")
strOutput=strOutput&"<td>"&strTmp&"</td>"
NextiColLoop
strOutput=strOutput&"</tr>;"&vbCrLf
NextiLoop
Initglobalvaraiblesandfindoutwhatbrowsertheuserisusing
strOutput=strOutput&vbCrLf&vbCrLf&"varfirst=0;"&vbCrLf&_
"varlast="&iRecsPerPage&";"&vbCrLf&_
"varmynav;"&vbCrLf&"if(navigator.appName==""Netscape"")"&_
vbCrLf&vbTab&"mynav=""NS"";"&vbCrLf&_
"if(navigator.appName==""MicrosoftInternetExplorer"")"&_
vbCrLf&vbTab&"mynav=""IE"";"&vbCrLf&_
vbCrLf&"</script>"&vbCrLf&vbCrLf
NowdisplaytheHTMLtable
strOutput=strOutput&vbCrLf&"<divid=""grid""></div>"&vbCrLf&_
vbCrLf&vbCrLf&"<scriptlanguage=""javascript"">"&vbCrLf

Writethenavfunction
strOutput=strOutput&"functionnav(iVal){"&vbCrLf&_
"//dowewanttomoveforwardorbackwards?"&vbCrLf&_
"if(iVal==1){"&vbCrLf&vbTab&"first+="&_
iRecsPerPage&";"&vbCrLf&"last+="&iRecsPerPage&_
vbCrLf&"}"&vbCrLf&"elseif(iVal==-1){"&vbCrLf&vbTab&_
"first-="&iRecsPerPage&";"&vbCrLf&vbTab&"last-="&_
iRecsPerPage&";"&vbCrLf&"}"&vbCrLf&_
vbCrLf&vbCrLf&"vartxt=;"&vbCrLf&_
"txt+=<tableborder=""1"">;"&vbCrLf
DoweneedtoaddaTHstring?
IfLen(strTHString)>0then
strOutput=strOutput&"txt+=<tr>"&strTHString&"</tr>;"&vbCrLf
EndIf
strOutput=strOutput&"for(variLoop=first;iLoop<last;iLoop++)"&vbCrLf&_
vbTab&"if(iLoop<="&iRows&")txt+=tableRow[iLoop];"&vbCrLf&_
"txt+=</table>;"&vbCrLf&vbCrLf
Now,shownext/prevlinksifapplicable
strOutput=strOutput&"if(first>0)//showprevlink"&vbCrLf&_
vbTab&"txt+=<ahref=""javascript:nav(-1);"">Prev"&_
iRecsPerPage&"</a>;"&vbCrLf&vbCrLf&_
"if(last<="&iRows&")//shownextlink"&vbCrLf&vbTab&_
"txt+=<ahref=""javascript:nav(1);"">Next"&_
iRecsPerPage&"</a>;"&vbCrLf&vbCrLf
WriteoutthenewHTMLcontenttotheDIVtag
strOutput=strOutput&"//writeoutthetheDIVtagdependingonbrowser..."&vbCrLf&_
"if(mynav==""NS""){"&vbCrLf&vbTab&_
"document.layers[grid].document.write(txt);"&vbCrLf&vbTab&_
"document.close();"&vbCrLf&"}"&vbCrLf&vbCrLf&_
"if(mynav==""IE"")"&vbCrLf&vbTab&_
"document.all[grid].innerHTML=txt;"&vbCrLf&vbCrLf&_
"}"&vbCrLf&vbCrLf
strOutput=strOutput&"nav(0);"&vbCrLf&"</script>"
GenerateHTML=strOutput
EndFunction
*******************************************
EndClass
%>
在停止之前,我想要疾速地注释一下如何在一个ASP页面中利用这个类。因为这个类只包括一个办法,因而利用这个类相称复杂。你所必要做的就是创立并添补一个纪录集工具,然后创立一个类的例示,并利用Response.Write输入objClassInstance.GenerateHTML(objRS)的值。

<!--#includefile="dhtmlGetRows.class.asp"-->
<%
CreateandpopulateaRecordset
DimobjRS,objConn,strSQL
SetobjConn=Server.CreateObject("ADODB.Connection")
objConn.Open"DSN=MyDSN"
strSQL="SELECTTOP25ViewCount,Description"&_
"FROMtblFAQORDERBYViewCountDESC"
SetobjRS=objConn.Execute(strSQL)
CreateaninstanceofthedhtmlGetRowsclass
DimobjPagedResults
SetobjPagedResults=newdhtmlGetRows
objPagedResults.THString="<th>Views</th><th>FAQQuestion</th>"
Response.WriteobjPagedResults.GenerateHTML(objRS)
Cleanup...
SetobjPagedResults=Nothing
objRS.Close
SetobjRS=Nothing
objConn.Close
SetobjConn=Nothing
%>

  以上的代码片断假定dhtmlGetRows类能够在一个服务器端包括文件dhtmlGetRows.class.asp中利用。

asp,你就只能等着微软给你解决,它不乐意你就只好悲催。而且asp跑在windows服务器上,windows服务器跟linux比起来简直弱爆了!
精灵巫婆 该用户已被删除
沙发
发表于 2015-1-20 08:47:08 | 只看该作者
最近在学asp,不要问我为什么不直接学.net,因为公司网站是asp做的所以有这个需要,卖了本书asp入门到精通,对里面的六大内置对象老是记不住,还有很多属性和方法看的头晕。
第二个灵魂 该用户已被删除
板凳
发表于 2015-1-24 15:54:13 | 只看该作者
不能只是将它停留在纸上谈兵的程度上。
深爱那片海 该用户已被删除
地板
发表于 2015-2-2 07:24:55 | 只看该作者
我就感觉到ASP和一些常用的数据库编程以及软件工程方面的思想是非常重要的。我现在也在尝试自己做网页,这其中就用到了ASP,我想它的作用是可想而知的。
金色的骷髅 该用户已被删除
5#
发表于 2015-2-7 17:02:23 | 只看该作者
ASP的语言不仅仅只是命令格式差不多,而是包含在<%%>之内的命令完全就是VB语法。虽然ASP也是做为单独的一个技术来提出的,但他就是完全继承了VB所有的功能。
乐观 该用户已被删除
6#
发表于 2015-2-22 17:25:34 | 只看该作者
Application:这个存储服务端的数据,如果不清除,会直到web应用程序结束才清除(例如重启站点)
冷月葬花魂 该用户已被删除
7#
发表于 2015-3-7 01:07:35 | 只看该作者
Session:这个存储跟客户端会话过程的数据,默认20分钟失效
爱飞 该用户已被删除
8#
发表于 2015-3-13 23:45:44 | 只看该作者
尽管MS自己讲C#内核中更多的象VC,但实际上我还是认为它和Java更象一些吧。首先它是面向对象的编程语言,而不是一种脚本,所以它具有面向对象编程语言的一切特性,比如封装性、继承性、多态性等等,这就解决了刚才谈到的ASP的那些弱点。
小女巫 该用户已被删除
9#
 楼主| 发表于 2015-3-20 22:36:08 | 只看该作者
Session:这个存储跟客户端会话过程的数据,默认20分钟失效
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 15:02

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表