2015-05-22 2 views
0

Я немного поработал над своим кодом и до сих пор не знаю, как выполнить некоторый код для работы.aClassic ASP: Как найти определенный порядок в массиве или набор записей. Затем переместите Next или Previous, начиная с этого порядка

До сих пор я получил функцию с именем FunctionUp»закодированы, это код, который будет идти в следующей последовательности:

Если массив заказов содержит:

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

Я добавил ссылку на текущее местоположение в качестве параметра строки запроса с именем rowindex, поэтому, если порядок, переданный в строке запроса, равен «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 
+0

Какая связь между пользователем и системой? Не могли бы вы объяснить, что делает printpreview.asp - отображает ли он один заказ или несколько заказов? – JohnRC

ответ

0

не было бы проще просто получить следующие или предыдущие заказы непосредственно из базы данных, используя 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.

+0

Я попробую вашу рекомендацию в понедельник в первую очередь утром, прямо сейчас у меня нет доступа к сети из дома, с сожалением. –