aClassic ASP : 如何在数组或记录集中定位特定顺序。然后从该顺序开始移动 Next 或 Previous

aClassic ASP : How to locate an specific order in array, or record-set. Then move Next or Previous, starting from that order

我对我的代码做了一些工作,但仍然不确定需要如何完成一些代码才能工作。

到目前为止,我已经编写了一个名为 FunctionUp' 的函数,这是将按以下顺序进行的代码:

如果订单数组包含:

'A1G722
'A1G723
'A1G724
'A1G725
'A1G726
'A1G727

我添加了对当前位置的引用作为名为rowindex的查询字符串参数,因此如果query-string中传递的顺序是'A1G725',行索引值为4,那么函数代码将理想情况下按以下顺序浏览:'A1G725'、'A1G724'、'A1G723'、'A1G722'

按钮代码:

.Write "<input type='submit' name='btnUp' value='Next' class='buttonRight' />"

调用函数的代码:

If Request("btnUp") = "Next" Then Call FuctionUp()

函数代码:

Function FuctionUp()
    Dim objConn
    Dim objRS
    Dim SQLOrderList
    Dim SQLCurrentOrder 
    Dim currentorder     
    Dim previousorder
    Dim sortby 
    Dim dtstart
    Dim dtend
    Dim index 

    currentorder = Trim(Request.QueryString("order"))
    sortby = Request.QueryString("sortby")
    currentorder = Request.QueryString("order")
    dtstart = Request.QueryString("start")
    dtend = Request.QueryString("end")

    Set objRS = Server.CreateObject("ADODB.Recordset")
    Set objConn = CreateObject("ADODB.Connection")

    objConn.Open Application("conn_AWDSTAGE")
    objRS.Cursortype = 3    

    SQLOrderList = "SELECT orderno" & _
                    " FROM _order" & _
                    " WHERE order_date >= '" & dtstart & "'" & _
                    " AND order_date < '" & dtend & "'" & _     
                    " ORDER BY " & sortby    
    objRS.Open SQLOrderList, objConn

    index = CINT(Request.QueryString("rowindex"))

    If Not isNumeric(index) Or index = "" Then 
        index = 0 
    End If 

    'Get this to Array.
    Dim iArray
    Dim i
    Dim sizeOfiArray
    iArray = objRS.GetRows()    

    ' sample of array contents after sql execution
    'A1G722
    'A1G723
    'A1G724
    'A1G725
    'A1G726
    'A1G727

    sizeOfiArray = uBound(iArray) + 1    
    if not index >= (sizeOfiArray - 1) then previousorder = (index + 1)

    If Not previousorder Is Nothing Then
        Response.Redirect("~/printpreview.asp?order=" & previousorder(i) &
                            "&site=" & spiderSiteKey &
                            "&env=" & strEnv &
                            "&start=" & CDate(dtstart) &
                            "&end=" & CDate(dtend) &
                            "&rowindex=" & (index + 1) &
                            "&sortby=" & sortby)
    Else
        Response.Redirect("~/printpreview.asp?order=" & currentOrder.OrderID & 
                            "&site=" & spiderSiteKey &
                            "&env=" & strEnv &
                            "&start=" & CDate(dtstart)) &
                            "&end=" & CDate(dtend) &
                            "&rowindex=" & (index) &
                            "&sortby=" & strSortBy &
                            "&LastRecord=Up")
    End If

    objRS.Close()
    Set objRS = Nothing
    objConn.Close()
    Set objConn = Nothing
End Function

使用 SQL:

直接从数据库中获取下一个或上一个订单不是更容易吗?
sSQLGetPrevOrder = "SELECT top(1) PREV.* " _
                & " FROM [Order] PREV " _
                & " JOIN ( " _
                &   " SELECT " & strOrderBy & " sortvalue, orderno " _
                &   " FROM Order WHERE orderno='" & strCurrentOrder & "' " _
                &   " ) CURR " _
                &   "  ON PREV." & strOrderBy & " < CURR.sortvalue " _
                &   "     OR ( PREV." & strOrderBy & " = CURR.sortvalue " _
                &   "            AND PREV.orderno < CURR.orderno ) " _
                & " ORDER BY PREV." & strOrderBy & " DESC, PREV.orderno DESC "




 sSQLGetNextOrder = "SELECT top(1) NXT.* " _
                & " FROM [Order] NXT " _
                & " JOIN ( " _
                &   " SELECT " & strOrderBy & " sortvalue, orderno " _
                &   " FROM Order WHERE orderno='" & strCurrentOrder & "' " _
                &   " ) CURR " _
                &    " ON NXT." & strOrderBy & " > CURR.sortvalue " _
                &    "    OR ( NXT." & strOrderBy & " = CURR.sortvalue " _
                &    "         AND NXT.orderno > CURR.orderno ) " _
                & " ORDER BY NXT." & strOrderBy & " ASC, NXT.orderno ASC "

(抱歉,如果此代码有语法错误,我无法对其进行测试)

如果 orderno 总是一个数字,您可以省略 strCurrentOrder 两边的引号。