asp議offset議匯倖go to page

  <%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>

  <!--#include file="Connections/conn.asp" -->

  <%

  Dim Recordset1

  Dim Recordset1_cmd

  Dim Recordset1_numRows

  Set Recordset1_cmd = Server.CreateObject ("ADODB.Command")

  Recordset1_cmd.ActiveConnection = MM_conn_STRING

  Recordset1_cmd.CommandText = "SELECT * FROM list"

  Recordset1_cmd.Prepared = true

  Set Recordset1 = Recordset1_cmd.Execute

  Recordset1_numRows = 0

  %>

  <%

  Dim Repeat1__numRows

  Dim Repeat1__index

  Repeat1__numRows = 2

  Repeat1__index = 0

  Recordset1_numRows = Recordset1_numRows + Repeat1__numRows

  %>

  <%

  '  *** Recordset Stats, Move To Record, and Go To Record: declare stats variables

  Dim Recordset1_total

  Dim Recordset1_first

  Dim Recordset1_last

  ' set the record count

  Recordset1_total = Recordset1.RecordCount

  ' set the number of rows displayed on this page

  If (Recordset1_numRows < 0) Then

  Recordset1_numRows = Recordset1_total

  Elseif (Recordset1_numRows = 0) Then

  Recordset1_numRows = 1

  End If

  ' set the first and last displayed record

  Recordset1_first = 1

  Recordset1_last  = Recordset1_first + Recordset1_numRows - 1

  ' if we have the correct record count, check the other stats

  If (Recordset1_total <> -1) Then

  If (Recordset1_first > Recordset1_total) Then

  Recordset1_first = Recordset1_total

  End If

  If (Recordset1_last > Recordset1_total) Then

  Recordset1_last = Recordset1_total

  End If

  If (Recordset1_numRows > Recordset1_total) Then

  Recordset1_numRows = Recordset1_total

  End If

  End If

  %>

  <%

  ' *** Recordset Stats: if we don't know the record count, manually count them

  If (Recordset1_total = -1) Then

  ' count the total records by iterating through the recordset

  Recordset1_total=0

  While (Not Recordset1.EOF)

  Recordset1_total = Recordset1_total + 1

  Recordset1.MoveNext

  Wend

  ' reset the cursor to the beginning

  If (Recordset1.CursorType > 0) Then

  Recordset1.MoveFirst

  Else

  Recordset1.Requery

  End If

  ' set the number of rows displayed on this page

  If (Recordset1_numRows < 0 Or Recordset1_numRows > Recordset1_total) Then

  Recordset1_numRows = Recordset1_total

  End If

  ' set the first and last displayed record

  Recordset1_first = 1

  Recordset1_last = Recordset1_first + Recordset1_numRows - 1

  If (Recordset1_first > Recordset1_total) Then

  Recordset1_first = Recordset1_total

  End If

  If (Recordset1_last > Recordset1_total) Then

  Recordset1_last = Recordset1_total

  End If

  End If

  %>

  <%

  Dim MM_paramName

  %>

  <%

  ' *** Move To Record and Go To Record: declare variables

  Dim MM_rs

  Dim MM_rsCount

  Dim MM_size

  Dim MM_uniqueCol

  Dim MM_offset

  Dim MM_atTotal

  Dim MM_paramIsDefined

  Dim MM_param

  Dim MM_index

  Set MM_rs    = Recordset1

  MM_rsCount   = Recordset1_total

  MM_size      = Recordset1_numRows

  MM_uniqueCol = "id"

  MM_paramName = "page"

  MM_offset = 0

  MM_atTotal = false

  MM_paramIsDefined = false

  If (MM_paramName <> "") Then

  MM_paramIsDefined = (Request.QueryString(MM_paramName) <> "")

  End If

  %>

  <%

  ' *** Move To Record: handle 'index' or 'offset' parameter

  if (Not MM_paramIsDefined And MM_rsCount <> 0) then

  ' use index parameter if defined, otherwise use offset parameter

  MM_param = Request.QueryString("index")

  If (MM_param = "") Then

  MM_param = Request.QueryString("offset")

  End If

  If (MM_param <> "") Then

  MM_offset = Int(MM_param)

  End If

  ' if we have a record count, check if we are past the end of the recordset

  If (MM_rsCount <> -1) Then

  If (MM_offset >= MM_rsCount Or MM_offset = -1) Then  ' past end or move last

  If ((MM_rsCount Mod MM_size) > 0) Then         ' last page not a full repeat region

  MM_offset = MM_rsCount - (MM_rsCount Mod MM_size)

  Else

  MM_offset = MM_rsCount - MM_size

  End If

  End If

  End If

  ' move the cursor to the selected record

  MM_index = 0

  While ((Not MM_rs.EOF) And (MM_index < MM_offset Or MM_offset = -1))

  MM_rs.MoveNext

  MM_index = MM_index + 1

  Wend

  If (MM_rs.EOF) Then

  MM_offset = MM_index  ' set MM_offset to the last possible record

  End If

  End If

  %>

  <%

  ' *** Move To Specific Record: handle detail parameter

  If (MM_paramIsDefined And MM_rsCount <> 0) Then

  ' get the value of the parameter

  MM_param = Request.QueryString(MM_paramName)

  ' find the record with the unique column value equal to the parameter value

  MM_offset = 0

  Do While (Not MM_rs.EOF)

  If (CStr(MM_rs.Fields.Item(MM_uniqueCol).Value) = MM_param) Then

  Exit Do

  End If

  MM_offset = MM_offset + 1

  MM_rs.MoveNext

  Loop

  ' if not found, set the number of records and reset the cursor

  If (MM_rs.EOF) Then

  If (MM_rsCount < 0) Then

  MM_rsCount = MM_offset

  End If

  If (MM_size < 0 Or MM_size > MM_offset) Then

  MM_size = MM_offset

  End If

  MM_offset = 0

  ' reset the cursor to the beginning

  If (MM_rs.CursorType > 0) Then

  MM_rs.MoveFirst

  Else

  MM_rs.Close

  MM_rs.Open

  End If

  End If

  End If

  %>

  <%

  ' *** Move To Record: if we dont know the record count, check the display range

  If (MM_rsCount = -1) Then

  ' walk to the end of the display range for this page

  MM_index = MM_offset

  While (Not MM_rs.EOF And (MM_size < 0 Or MM_index < MM_offset + MM_size))

  MM_rs.MoveNext

  MM_index = MM_index + 1

  Wend

  ' if we walked off the end of the recordset, set MM_rsCount and MM_size

  If (MM_rs.EOF) Then

  MM_rsCount = MM_index

  If (MM_size < 0 Or MM_size > MM_rsCount) Then

  MM_size = MM_rsCount

  End If

  End If

  ' if we walked off the end, set the offset based on page size

  If (MM_rs.EOF And Not MM_paramIsDefined) Then

  If (MM_offset > MM_rsCount - MM_size Or MM_offset = -1) Then

  If ((MM_rsCount Mod MM_size) > 0) Then

  MM_offset = MM_rsCount - (MM_rsCount Mod MM_size)

  Else

  MM_offset = MM_rsCount - MM_size

  End If

  End If

  End If

  ' reset the cursor to the beginning

  If (MM_rs.CursorType > 0) Then

  MM_rs.MoveFirst

  Else

  MM_rs.Requery

  End If

  ' move the cursor to the selected record

  MM_index = 0

  While (Not MM_rs.EOF And MM_index < MM_offset)

  MM_rs.MoveNext

  MM_index = MM_index + 1

  Wend

  End If

  %>

  <%

  ' *** Move To Record: update recordset stats

  ' set the first and last displayed record

  Recordset1_first = MM_offset + 1

  Recordset1_last  = MM_offset + MM_size

  If (MM_rsCount <> -1) Then

  If (Recordset1_first > MM_rsCount) Then

  Recordset1_first = MM_rsCount

  End If

  If (Recordset1_last > MM_rsCount) Then

  Recordset1_last = MM_rsCount

  End If

  End If

  ' set the boolean used by hide region to check if we are on the last record

  MM_atTotal = (MM_rsCount <> -1 And MM_offset + MM_size >= MM_rsCount)

  %>

  <%

  ' *** Go To Record and Move To Record: create strings for maintaining URL and Form parameters

  Dim MM_keepNone

  Dim MM_keepURL

  Dim MM_keepForm

  Dim MM_keepBoth

  Dim MM_removeList

  Dim MM_item

  Dim MM_nextItem

  ' create the list of parameters which should not be maintained

  MM_removeList = "&index="

  If (MM_paramName <> "") Then

  MM_removeList = MM_removeList & "&" & MM_paramName & "="

  End If

  MM_keepURL=""

  MM_keepForm=""

  MM_keepBoth=""

  MM_keepNone=""

  ' add the URL parameters to the MM_keepURL string

  For Each MM_item In Request.QueryString

  MM_nextItem = "&" & MM_item & "="

  If (InStr(1,MM_removeList,MM_nextItem,1) = 0) Then

  MM_keepURL = MM_keepURL & MM_nextItem & Server.URLencode(Request.QueryString(MM_item))

  End If

  Next

  ' add the Form variables to the MM_keepForm string

  For Each MM_item In Request.Form

  MM_nextItem = "&" & MM_item & "="

  If (InStr(1,MM_removeList,MM_nextItem,1) = 0) Then

  MM_keepForm = MM_keepForm & MM_nextItem & Server.URLencode(Request.Form(MM_item))

  End If

  Next

  ' create the Form + URL string and remove the intial '&' from each of the strings

  MM_keepBoth = MM_keepURL & MM_keepForm

  If (MM_keepBoth <> "") Then

  MM_keepBoth = Right(MM_keepBoth, Len(MM_keepBoth) - 1)

  End If

  If (MM_keepURL <> "")  Then

  MM_keepURL  = Right(MM_keepURL, Len(MM_keepURL) - 1)

  End If

  If (MM_keepForm <> "") Then

  MM_keepForm = Right(MM_keepForm, Len(MM_keepForm) - 1)

  End If

  ' a utility function used for adding additional parameters to these strings

  Function MM_joinChar(firstItem)

  If (firstItem <> "") Then

  MM_joinChar = "&"

  Else

  MM_joinChar = ""

  End If

  End Function

  %>

  <%

  ' *** Move To Record: set the strings for the first, last, next, and previous links

  Dim MM_keepMove

  Dim MM_moveParam

  Dim MM_moveFirst

  Dim MM_moveLast

  Dim MM_moveNext

  Dim MM_movePrev

  Dim MM_urlStr

  Dim MM_paramList

  Dim MM_paramIndex

  Dim MM_nextParam

  MM_keepMove = MM_keepBoth

  MM_moveParam = "index"

  ' if the page has a repeated region, remove 'offset' from the maintained parameters

  If (MM_size > 1) Then

  MM_moveParam = "offset"

  If (MM_keepMove <> "") Then

  MM_paramList = Split(MM_keepMove, "&")

  MM_keepMove = ""

  For MM_paramIndex = 0 To UBound(MM_paramList)

  MM_nextParam = Left(MM_paramList(MM_paramIndex), InStr(MM_paramList(MM_paramIndex),"=") - 1)

  If (StrComp(MM_nextParam,MM_moveParam,1) <> 0) Then

  MM_keepMove = MM_keepMove & "&" & MM_paramList(MM_paramIndex)

  End If

  Next

  If (MM_keepMove <> "") Then

  MM_keepMove = Right(MM_keepMove, Len(MM_keepMove) - 1)

  End If

  End If

  End If

  ' set the strings for the move to links

  If (MM_keepMove <> "") Then

  MM_keepMove = Server.HTMLEncode(MM_keepMove) & "&"

  End If

  MM_urlStr = Request.ServerVariables("URL") & "?" & MM_keepMove & MM_moveParam & "="

  MM_moveFirst = MM_urlStr & "0"

  MM_moveLast  = MM_urlStr & "-1"

  MM_moveNext  = MM_urlStr & CStr(MM_offset + MM_size)

  If (MM_offset - MM_size < 0) Then

  MM_movePrev = MM_urlStr & "0"

  Else

  MM_movePrev = MM_urlStr & CStr(MM_offset - MM_size)

  End If

  %>

  <%

  if request.QueryString("page")<>"" then

  Recordset1_last=request.QueryString("page")*MM_size

  offset=Recordset1_last-MM_size

  url="?offset="&offset

  response.Redirect(url)

  end if

  %>

  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

  <html xmlns="http://www.w3.org/1999/xhtml">

  <head>

  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

  <title>Untitled Document</title>

  </head>

  <body>

  <%

  While ((Repeat1__numRows <> 0) AND (NOT Recordset1.EOF))

  %>

  <div><%=(Recordset1.Fields.Item("id").Value)%></div>

  <%

  Repeat1__index=Repeat1__index+1

  Repeat1__numRows=Repeat1__numRows-1

  Recordset1.MoveNext()

  Wend

  %>

  <div> 悳方<%=(Recordset1_total)%> 慌<%=Recordset1_total/MM_size%>匈輝念及<%=(Recordset1_last/MM_size)%>匈 <a href="<%=MM_moveFirst%>">遍匈</a> <a href="<%=MM_movePrev%>">貧匯匈</a> <a href="<%=MM_moveNext%>">和匯匈</a> <a href="<%=MM_moveLast%>">恷朔匯匈</a>

  <label>

  <input name="page" type="text" id="page" value="<%=(Recordset1_last/MM_size)%>" size="5" />

  <input name="button" type="submit" id="button" onclick="window.location.href='?page='+page.value" value="go" />

  </label>

  fist<%=(Recordset1_first)%> last<%=(Recordset1_last)%></div>

  </body>

  </html>

  <%

  Recordset1.Close()

  Set Recordset1 = Nothing

  %>

  猟周和墮: