广

ASP编程

  • IOS开发
  • android开发
  • PHP编程
  • JavaScript
  • ASP.NET
  • ASP编程
  • JSP编程
  • Java编程
  • 易语言
  • Ruby编程
  • Perl编程
  • AJAX
  • 正则表达式
  • C语言
  • 编程开发

    两个不同数据库表的分页显示解决方案

    2018-04-25 21:46:14 次阅读 稿源:互联网
    零七广告

      程序实现功能:两个数据表的数据分页显示

      最近我遇到一个比较少见的需求,不知大家是否也有遇到过,说出来与大家分享.

      客户需求:两部分数据,分别来自不同位置的两个数据库中的两个表,定义为数据库DB1和DB2,表Table1和Tabel2,要将这两个表数据分别在页面的上半部分和下半部分显示,并且用同一个分页码,如第一部分数据不够,将用第二部分数据填补

      '/*代码*/

      <%

      Set objConn1=Server.CreateObject("ADODB.Recordset")
      Set objConn2=Server.CreateObject("ADODB.Recordset")
      objConn1.Open "PROVIDER=SQLOLEDB;DATA SOURCE=localhost;UID=sa;PWD=123;DATABASE=DB1"
      objConn2.Open "PROVIDER=SQLOLEDB;DATA SOURCE=localhost;UID=sa;PWD=123;DATABASE=DB2"

      Page=CLng(Request.QueryString("Page"))
      if page="" then
      page=1
      end if
      StrSQL1="select * from Table1 order by 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 Then

      page_size1=5 '默认第一个表部分数据的每页显示数
      page_size2=5 '默认第二个表部分数据的每页显示数

      page_count1=CInt(record_count1/page_size1)
      If (record_count1 Mod page_size1)<(page_size1/2) Then page_count1=page_count1+1 '得到第一部分数据的页数
      page_count2=CInt(record_count2/page_size2)
      If (record_count2 Mod page_size2)<(page_size2/2) Then page_count2=page_count2+1'得到第二部分数据的页数

      if Cint(page_count2)=cint(page) then '假设第二部分数据一定少,这里断定是否当前页是少的那分数据的最后一页

      thepageRecordcount=record_count2-(page-1)*5 '第二部分数据的最后一页的数据显示条数
      page_size1=10-cint(thepageRecordcount) '第一部分数据在第二部分最后页的显示条数 '
      page_size1=cint(thepageRecordcount) '得到第一部分在本页的显示条数
      elseif cint(page)>cint(page_count2) then '这之后将全是第一部分数据

      page_size1=10
      page_size2=0

      end if

       

      page_count=CInt(record_count/(page_size1+page_size2) '全部两类一起的分页数
      If (record_count Mod (page_size1+page_size2))<((page_size1+page_size2)/2) Then page_count=page_count+1

      If Page < 1 Then
      Page = 1
      End If
      If Page > page_count Then
      Page = page_count
      End If

      Dim Pagefrom,Pageto
      Pagefrom=page-10
      Pageto=page+10

      if Pagefrom<1 then
      Pagefrom=1
      end if
      if Pageto>record_count then
      Pageto=page_count
      end if

      
      End If

      
      If Page<=1 Then '第一页显示查询
      StrSQL1="Select Top "&page_size1&" * From Table1 "
      StrSQL1=StrSQL1&" Order By ID desc"
      StrSQl2="Select Top "&page_size1&" * From Table2 "
      StrSQL2=StrSQL2&" order by id desc"

       

      Else '第N页显示查询
      StrSQL1="Select Top "&(Page-1)*page_size1&" ID From Table1 "
      StrSQL1=StrSQL1&" Order By id Desc"
      StrSQL1="SELECT Top 1 ID From ("&StrSQL1&") DERIVEDTBL Order By id "
      'Response.Write(SQL)
      id =Trim(objConn1.execute(StrSQL1)(0))
      StrSQL1="Select Top "&page_size1&" * From Table1"
      StrSQL1=StrSQL1&" where id<'"&id&"'"
      StrSQL1=StrSQL1&" Order By id Desc"

      
      StrSQL2="Select Top "&(Page-1)*page_size2&" id From Table2 "
      StrSQL2=StrSQL2&" Order By id Desc"
      StrSQL2="SELECT Top 1 id From ("&StrSQL2&") DERIVEDTBL Order By id "
      id =Trim(objconn2.execute(StrSQL2)(0))

      StrSQL2="Select Top "&page_size2&" * From Table2 "
      StrSQL2=StrSQL2&" where id<'"&id &"'"
      StrSQL2=StrSQL2&" Order By id Desc"

      End If

      %>

      <%
      If record_count>0 Then

      %>
      <%
      Set Rs1=Server.CreateObject("Adodb.Recordset")
      rs1.open StrSQL1,objconn1
      For n = 1 To page_size1
      If rs1.Eof Then Exit For
      %>
      <!--显示的第一部分内容循环-->
      <%
      rs1.MoveNext
      If rs1.EOF Then Exit For
      Next
      rs1.close
      set rs1=nothing
      %>
      <%
      Set Rs2=Server.CreateObject("Adodb.Recordset")
      rs2.open StrSQL2,objconn2
      For n = 1 To page_size2
      If rs2.Eof Then Exit For
      %>
      <!--显示的第二部分内容循环-->
      <%
      rs2.MoveNext
      If rs2.EOF Then Exit For
      Next
      rs2.close
      set rs2=nothing
      %>

      <!--结果页码-->
      <%if page<>"1" then%><a href=?page=<%=Cint(page-1)%>>上一页</a>&nbsp;<%end if%>
      <% '用for循环来写出页数连接
      For i=Pagefrom to Pageto
      if i=0 then
      i=1
      end if

      if i<>Cint(page) then
      strurl="<a href=?page="&i&"><font color=#000000>"&i&"</font></a>"

      else
      strurl="<b><font color=#ce0031>"&i&"</font></b>"
      end if

      response.write strurl
      response.write " "
      next
      %>
      <%if page_count =1 or (page_count-Cint(page))=0 then
      response.Write("")
      else
      response.Write "<a href=?page="&Cint(page+1)&">下一页</a>"
      end if
      %>
      <!--结果页码-->

      '/*代码结束*/

      本人水平有限,程序粗糙,可能有不足之处~望批评指正~

    零七网部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与零七网进行文章共享合作。

    零七广告
    零七广告
    零七广告
    零七广告