2012-01-03 26 views
5

Tôi có mảng này trong ASPTăng Mảng Kích động

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

tôi thêm các mục vào mảng này tự động như thế này

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

Vấn đề là, sau 4 mục, tôi vẫn có thể thêm các mục nhưng UBound luôn luôn trở lại 3. Điều đó gây ra tình trạng của tôi thất bại.

Tôi muốn tăng kích cỡ của mảng này tại thời gian chạy để UBOUND có thể trả về giá trị mới nhất.

Vui lòng cho tôi biết cách tôi có thể làm điều đó. Đây là mã hoàn chỉnh của tôi

'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 

Trả lời

0

Tôi nghĩ redimentioning mảng với UBound + 1 hiện tại sau mỗi lần thêm mục mới sẽ làm cho UBound cung cấp cho bạn giá trị mới nhất cuối cùng.

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

Vì vậy, nó sẽ cập nhật mảng của bạn với kích thước mới mỗi khi bạn thêm mục mới.

+0

Cảm ơn, công trình này nhưng tôi không thể bảo tồn các giá trị. Ngay sau khi tôi sử dụng ReDim Preserve, tôi nhận được lỗi này: Microsoft VBScript runtime error '800a0009' subscript ra khỏi phạm vi /prices_test.asp, dòng 102 – VJV

+0

hiển thị mã của bạn để chúng ta có thể nhìn thấy nơi các lỗi đang xảy ra – Robert

+0

nhờ , Tôi đã thêm mã hoàn chỉnh vào thư gốc của mình. – VJV

1

Kích thước đầu tiên chỉ có 3 chiều dài, trong khi chiều thứ hai là 20. Nếu bạn muốn UBound của chiều kích thứ hai, làm điều này là:

UBound(localCart, 2) 

nào trả về 20. Bạn sẽ có thể kết hợp điều này với ReDim Preserve.

+0

nhờ, làm thế nào tôi tăng kích thước đầu tiên động? xin vui lòng bạn có thể chia sẻ Redim statetement? – VJV

+1

AFAIK bạn chỉ có thể thay đổi kích thước kích thước cuối cùng của một mảng. Bạn có cần thêm thuộc tính khác ngoài productid, price và qty không? – Sneal

+0

không, tôi không cần bất kỳ thuộc tính nào khác. Hàng được giới hạn trong 4 trong trường hợp này, tôi muốn thêm hàng động không phải cột. xin vui lòng đề nghị. – VJV

5

Nếu bạn thêm các mục động trong một vòng lặp, bạn sẽ muốn sử dụng câu lệnh Redim Preserve(). Bạn sẽ muốn sử dụng phần Preserve để bạn không mất bất kỳ dữ liệu hiện có nào của mình.

Nếu không nếu sử dụng của bạn dữ liệu mảng và sau đó redimming nó cho một tập hợp các dữ liệu bạn có thể chỉ là Redim() tuyên bố

Đây là một tài liệu tham khảo tốt về việc sử dụng Redim()/Redim Prevserve() statments: http://classicasp.aspfaq.com/general/can-i-create-an-array-s-size-dynamically.html

Các vấn đề liên quan