|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
Access是一种桌面数据库,只适合数据量少的应用,在处理少量数据和单机访问的数据库时是很好的,效率也很高。但是它的同时访问客户端不能多于4个。access数据库有一定的极限,如果数据达到100M左右,很容易造成服务器iis假死,或者消耗掉服务器的内存导致服务器崩溃。程序完成功效:两个数据表的数据分页显现
比来我碰到一个对照少见的需求,不知人人是不是也有碰到过,说出来与人人分享.
客户需求:两部分数据,分离来自分歧地位的两个数据库中的两个表,界说为数据库DB1和DB2,表Table1和Tabel2,要将这两个表数据分离在页面的上半部分和下半部分显现,而且用统一个分页码,如第一部分数据不敷,将用第二部分数据弥补
/*代码*/
<%
SetobjConn1=Server.CreateObject("ADODB.Recordset")
SetobjConn2=Server.CreateObject("ADODB.Recordset")
objConn1.Open"PROVIDER=SQLOLEDB;DATASOURCE=localhost;UID=sa;PWD=123;DATABASE=DB1"
objConn2.Open"PROVIDER=SQLOLEDB;DATASOURCE=localhost;UID=sa;PWD=123;DATABASE=DB2"
Page=CLng(Request.QueryString("Page"))
ifpage=""then
page=1
endif
StrSQL1="select*fromTable1orderbyIDdesc"
StrSQL2="select*fromTable2orderbyIDdesc"
record_count1=Clng(objConn1.execute(StrSQL1)(0))失掉第一个表的纪录数
record_count2=Clng(objConn2.execute(StrSQL2)(0))失掉第二个表的纪录数
record_count=record_count1+record_count2失掉两个表的纪录数和
Ifrecord_count>0Then
page_size1=5默许第一个表部分数据的每页显现数
page_size2=5默许第二个表部分数据的每页显现数
page_count1=CInt(record_count1/page_size1)
If(record_count1Modpage_size1)<(page_size1/2)Thenpage_count1=page_count1+1失掉第一部分数据的页数
page_count2=CInt(record_count2/page_size2)
If(record_count2Modpage_size2)<(page_size2/2)Thenpage_count2=page_count2+1失掉第二部分数据的页数
ifCint(page_count2)=cint(page)then假定第二部分数据必定少,这里判定是不是以后页是少的那分数据的最初一页
thepageRecordcount=record_count2-(page-1)*5第二部分数据的最初一页的数据显现条数
page_size1=10-cint(thepageRecordcount)第一部分数据在第二部分最初页的显现条数
page_size1=cint(thepageRecordcount)失掉第一部分在本页的显现条数
elseifcint(page)>cint(page_count2)then这以后将满是第一部分数据
page_size1=10
page_size2=0
endif
page_count=CInt(record_count/(page_size1+page_size2)全体两类一同的分页数
If(record_countMod(page_size1+page_size2))<((page_size1+page_size2)/2)Thenpage_count=page_count+1
IfPage<1Then
Page=1
EndIf
IfPage>page_countThen
Page=page_count
EndIf
DimPagefrom,Pageto
Pagefrom=page-10
Pageto=page+10
ifPagefrom<1then
Pagefrom=1
endif
ifPageto>record_countthen
Pageto=page_count
endif
EndIf
IfPage<=1Then第一页显现查询
StrSQL1="SelectTop"&page_size1&"*FromTable1"
StrSQL1=StrSQL1&"OrderByIDdesc"
StrSQl2="SelectTop"&page_size1&"*FromTable2"
StrSQL2=StrSQL2&"orderbyiddesc"
Else第N页显现查询
StrSQL1="SelectTop"&(Page-1)*page_size1&"IDFromTable1"
StrSQL1=StrSQL1&"OrderByidDesc"
StrSQL1="SELECTTop1IDFrom("&StrSQL1&")DERIVEDTBLOrderByid"
Response.Write(SQL)
id=Trim(objConn1.execute(StrSQL1)(0))
StrSQL1="SelectTop"&page_size1&"*FromTable1"
StrSQL1=StrSQL1&"whereid<"&id&""
StrSQL1=StrSQL1&"OrderByidDesc"
StrSQL2="SelectTop"&(Page-1)*page_size2&"idFromTable2"
StrSQL2=StrSQL2&"OrderByidDesc"
StrSQL2="SELECTTop1idFrom("&StrSQL2&")DERIVEDTBLOrderByid"
id=Trim(objconn2.execute(StrSQL2)(0))
StrSQL2="SelectTop"&page_size2&"*FromTable2"
StrSQL2=StrSQL2&"whereid<"&id&""
StrSQL2=StrSQL2&"OrderByidDesc"
EndIf
%>
<%
Ifrecord_count>0Then
%>
<%
SetRs1=Server.CreateObject("Adodb.Recordset")
rs1.openStrSQL1,objconn1
Forn=1Topage_size1
Ifrs1.EofThenExitFor
%>
<!--显现的第一部份内容轮回-->
<%
rs1.MoveNext
Ifrs1.EOFThenExitFor
Next
rs1.close
setrs1=nothing
%>
<%
SetRs2=Server.CreateObject("Adodb.Recordset")
rs2.openStrSQL2,objconn2
Forn=1Topage_size2
Ifrs2.EofThenExitFor
%>
<!--显现的第二部份内容轮回-->
<%
rs2.MoveNext
Ifrs2.EOFThenExitFor
Next
rs2.close
setrs2=nothing
%>
<!--了局页码-->
<%ifpage"1"then%><ahref=?page=<%=Cint(page-1)%>>上一页</a><%endif%>
<%用for轮回来写出页数毗连
Fori=PagefromtoPageto
ifi=0then
i=1
endif
ifiCint(page)then
strurl="<ahref=?page="&i&"><fontcolor=#000000>"&i&"</font></a>"
else
strurl="<b><fontcolor=#ce0031>"&i&"</font></b>"
endif
response.writestrurl
response.write""
next
%>
<%ifpage_count=1or(page_count-Cint(page))=0then
response.Write("")
else
response.Write"<ahref=?page="&Cint(page+1)&">下一页</a>"
endif
%>
<!--了局页码-->
/*代码停止*/
自己程度无限,程序粗拙,大概有不敷的地方~看品评斧正~
ASP最大的缺点在于网络的安全性和可靠性,企业将经营数据放在开放的平台上,最大的担忧就是如何保证这些数据不被其他人破坏。 |
|