2012-01-03 19 views
5

tengo esta matriz en ASPEl aumento de tamaño de matriz dinámica

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

agrego artículos a esta matriz dinámica como esta

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

El problema es, después de 4 artículos, todavía puedo añadir los elementos pero UBound siempre devuelve 3. Lo que hace que mis condiciones fallen.

Quiero aumentar el tamaño de esta matriz en tiempo de ejecución para que UBOUND pueda devolver el último valor.

Háganme saber cómo puedo hacer eso. Aquí está mi código 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 

Respuesta

0

Creo que redimensionar la matriz con el UBound + 1 actual después de cada adición de un nuevo elemento hará que UBound le dé finalmente el último valor.

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

Por lo tanto, actualizará su matriz con el nuevo tamaño cada vez que agregue el nuevo elemento.

+0

Gracias, esto funciona pero no puedo preservar los valores. Tan pronto como yo uso ReDim Preserve, me sale este error: Microsoft VBScript error de ejecución '800a0009' Subíndice fuera del intervalo /prices_test.asp, la línea 102 – VJV

+0

muestran su código para que podamos ver que el error se está produciendo gracias – Robert

+0

, He agregado el código completo en mi mensaje original. – VJV

1

La primera dimensión es solamente el 3 de longitud, mientras que la segunda dimensión es 20. Si desea que el UBound de la segunda dimensión, hacer esto:

UBound(localCart, 2) 

que devuelve 20. Deberías poder combinar esto con ReDim Preserve.

+0

gracias, ¿cómo aumento la primera dimensión de forma dinámica? por favor, ¿puedes compartir la declaración de Redim? – VJV

+1

AFAIK solo puede cambiar el tamaño de la última dimensión de una matriz. ¿Necesita agregar otro atributo además de productid, price y qty? – Sneal

+0

no, no necesito ningún otro atributo. Las filas están limitadas a 4 en este caso, quiero agregar filas dinámicamente, no columnas. Por favor recomiende. – VJV

5

Si agrega los elementos dinámicamente en un bucle, querrá usar la instrucción Redim Preserve(). Querrá utilizar la parte Preserve para que no pierda ninguno de sus datos existentes.

De lo contrario si el uso de la matriz de datos y luego redimming por otro conjunto de datos que puede sólo el Redim() comunicado

Aquí es una buena referencia sobre el uso de Redim()/Redim Prevserve() statments: http://classicasp.aspfaq.com/general/can-i-create-an-array-s-size-dynamically.html

Cuestiones relacionadas