2012-01-03 20 views
5

ho questo array in ASPAumentare Array Size dinamicamente

CONST CARTPID = 0 
CONST CARTPRICE = 1 
CONST CARTPQUANTITY = 2 
dim localCart(3,20) 

aggiungo elementi da questo array dinamico come questo

localCart(CARTPID,i) = productId 
localCart(CARTPRICE,i) = productPrice 
localCart(CARTPQUANTITY,i) = 1 

Il problema è, dopo 4 elementi, posso ancora aggiungere gli elementi ma UBound restituisce sempre 3. Che causa il fallimento delle mie condizioni.

Desidero aumentare la dimensione di questo array in fase di esecuzione in modo che UBOUND possa restituire l'ultimo valore.

Per favore fatemi sapere come posso farlo. Qui è il mio codice completo

'Define constants 
CONST CARTPID = 0 
CONST CARTPRICE = 1 
CONST CARTPQUANTITY = 2 

'Get the shopping cart. 
if not isArray(session("cart")) then 
dim localCart(3,20) 
else 
localCart = session("cart") 
end if 

'Get product information 
productID = trim(request.QueryString("productid")) 
productPrice = trim(request.QueryString("price")) 

'Add item to the cart 

if productID <> "" then 
foundIt = false 
for i = 0 to ubound(localCart) 
    if localCart(CARTPID,i) = productId then 
     localCart(CARTPQUANTITY,i) = localCart(CARTPQUANTITY,i)+1 
     foundIt = true 
     exit for 
    end if 
next 
if not foundIt then 
    for i = 0 to 20 

     if localCart(CARTPID,i) = "" then 
          ***ReDim Preserve localCart(UBound(localCart, 1) + 1,20)*** 
      localCart(CARTPID,i) = productId 
      localCart(CARTPRICE,i) = productPrice 
      localCart(CARTPQUANTITY,i) = 1 
      exit for 
     end if 
    next 
end if 
end if 

risposta

0

Penso che il redimentioning dell'array con l'attuale UBound + 1 dopo ogni aggiunta di nuovo elemento farà sì che UBound fornisca finalmente l'ultimo valore.

// New item addition code will go here 
ReDim localCart(UBound(localCart, 1) + 1,20) 

Così aggiornerà il tuo array con la nuova dimensione ogni volta che aggiungerai il nuovo oggetto.

+0

Grazie, funziona ma non posso conservare i valori. Non appena io uso ReDim Preserve, ottengo questo errore: Microsoft VBScript errore di runtime '800a0009' Indice fuori intervallo /prices_test.asp, linea 102 – VJV

+0

mostrare il codice in modo che possiamo vedere dove l'errore è in corso – Robert

+0

grazie , Ho aggiunto il codice completo nel mio messaggio originale. – VJV

1

La prima dimensione è solo il 3 di lunghezza, mentre la seconda dimensione è 20. Se si desidera che l'UBound della seconda dimensione, fare questo:

UBound(localCart, 2) 

che restituisce 20. Dovresti essere in grado di combinarlo con ReDim Preserve.

+0

grazie, come si fa aumento dinamicamente la prima dimensione? per favore puoi condividere Redim statetement? – VJV

+1

AFAIK è possibile ridimensionare solo l'ultima dimensione di un array. Hai bisogno di aggiungere un altro attributo oltre a productid, prezzo e qty? – Sneal

+0

no, non ho bisogno di nessun altro attributo. Le righe sono limitate a 4 in questo caso, voglio aggiungere righe dinamicamente non colonne. per favore suggerire – VJV

5

Se si aggiungono gli elementi dinamicamente in un ciclo, si desidera utilizzare l'istruzione Redim Preserve(). Ti consigliamo di utilizzare la parte Preserve in modo da non perdere nessuno dei dati esistenti.

caso contrario, se la vostra utilizzando i dati di matrice e poi redimming per un altro insieme di dati si può semplicemente la Redim() dichiarazione

Ecco un buon riferimento sull'uso Redim()/Redim Prevserve() statments: http://classicasp.aspfaq.com/general/can-i-create-an-array-s-size-dynamically.html