2012-01-03 13 views
5

私は4つの項目の後、私はまだアイテムを追加することができ、問題がある。この増加配列サイズを動的に

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

のように動的にこの配列にアイテムを追加

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

ASP

でこの配列を持っていますUBoundは常に3を返します。これが原因で私の条件が失敗します。

実行時にこの配列のサイズを大きくして、UBOUNDが最新の値を返すようにしたいとします。

どうすればいいのか教えてください。二次元が20である間、ここに私の完全なコードは

'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 

答えて

0

新しいアイテムを追加するたびに現在のUBound + 1で配列を再描画すると、UBoundによって最終的に最新の値が得られます。

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

これで、新しいアイテムを追加するたびにアレイが新しいサイズで更新されます。

+0

ありがとう、これは動作しますが、私は値を保持できません。できるだけ早く私は保存ReDimステートメントを使用して、私はこのエラーを取得します。Microsoft VBScriptランタイムエラー「800a0009」 添字エラーが – VJV

+0

はあなたのコードを表示元のメッセージに完全なコードを追加しました。 – Robert

+0

おかげで発生している場所を、私たちが見ることができるので、範囲外の /prices_test.asp、ライン102 – VJV

1

である第一の次元では、二次元のUBound関数をしたい場合は、これを行う、長さがわずか3です​​:

UBound(localCart, 2) 

返します20.これをReDim Preserveと組み合わせることができます。

+0

おかげで私は最初の次元を動的に増やしますか?あなたはRedim statetementを共有できますか? – VJV

+1

AFAIKでは、配列の最後の次元のサイズを変更することしかできません。 productid、price、およびqty以外の属性を追加する必要がありますか? – Sneal

+0

いいえ、他の属性は必要ありません。この場合、行数は4に制限されています。列を動的に追加する必要はありません。提案してください。 – VJV

5

ループ内でアイテムを動的に追加する場合は、Redim Preserve()ステートメントを使用します。 Preserve部分を使用して、既存のデータを失わないようにします。

そうしないとここにあなたのあなたができる配列データを使用して、その後、別のデータセットのためにそれをredimmingだけRedim()声明

Redim()/Redim Prevserve()たstatments使用上の良い参照の場合:どのように行う、http://classicasp.aspfaq.com/general/can-i-create-an-array-s-size-dynamically.html

関連する問題