新しく質問する

ReDim Preserveできなかった配列をUBOUND……

役に立った:1件
  • 質問者:digtoyoda
  • 投稿日時:2002/05/11 11:41
  • 困り度:暇なときに回答をください
  • 友達に紹介
  • ブログに書く
  • 教えて!gooお気に入り

VBScriptでプログラムを組んでおります。
初心者なので言葉の使い方が間違っているかもしれませんがご容赦ください。

ASPでDBにアクセスして、このときにReDim Preserveを使って配列(str)を動的に拡張しながらDBから項目を抽出しています。
この動的に作った配列の項目を表示する際にどうしても項目数が必要なので
UBound(str)で要素数を抜き出して使用しています。

DBにデータがあれば問題ないのですが、DBにデータがない場合はUBound(str)実行時に
--------------------------
Microsoft VBScript 実行時エラー (0x800A0009)
インデックスが有効範囲にありません。: 'ubound'
--------------------------
と表示されてしまいます。

これを回避するにはDBから1つの項目を抽出する度に+1するような変数を作れば事足りるとは思いますが、
そうすると配列内の項目を表示する関数の引数を増やすことになり、少し納得がいきません。

Dim str() において
Redim str(1)をしたかしてないかを見分ける方法を教えてくださいませんか。
……無ければ「無い」と仰ってくれれば助かります。

では失礼します。
お時間があればご協力宜しくお願いします。

この質問への回答は締め切られました。
このQ&Aは役に立ちましたか?(役に立った:1件)
  • 参考になった:0件

No.1ベストアンサー20pt

  • 回答者:haporun
  • 回答日時:2002/05/11 11:50

私はUBoundのエラーを回避する関数を作って対処しています。

Function UBound2(ary)

On Error Goto ER

UBound2 = UBound(ary)

Exit Function

ER:

UBound2 = -1

End Function

みたいな感じで。

こうすれば項目数を取り出すのに、最大インデックスに1を足す方法でも、0個がちゃんと得られます。

ReDimするのに使った最大インデックスを覚えておくという手もありますがね。

通報する

この回答へのお礼

>haporunさん

どうもありがとうございました!
効率のいいプログラムの方法もわかりましたし、とても勉強になりました。

またお世話になるかもしれませんが、そのときもどうか宜しくお願いします。

  
このQ&Aは役に立ちましたか?(役に立った:1件)

このページのトップへ

Facebook公式ページ

公式Twitter