- ベストアンサー
構造体についてここが知りたい!(参照方法について)
いつもお世話になっています、宜しくお願いします。 現在ACCESS2002、SQLサーバーで次のことを実現しようと思っています。 やっていることは 項目名が数字部分のみ違う要素を30個もつ構造体(構造体名:Kouzoutai) 下記のように用意します。 Type Kouzoutai KOUMOKU1 KOUMOKU2 KOUMOKU3 ・ ・ ・ KOUMOKU29 KOUMOKU30 End Type この項目、KOUMOKU1~30でNULLのものには1を格納するという処理を 行いたいと思っています。 IF文を30個書いても良いのですが、あまりに冗長的なソースに なってしまうので、ループを使って行いたいと思っています。 例えばコントロール名などでは、ME("KOUMOKU" & CNT).VALUEというような 書き方で値が取得できるので、そのような感じで下記のように 記述したのですが、うまく動かず行き詰っています。 Dim CNT As integer CNT = 1 DO WHILE CNT <= 30 IF ISNULL(Kouzoutai.("KOUMOKU" & CNT) THEN Kouzoutai.("KOUMOKU" & CNT) = 1 END IF CNT = CNT + 1 LOOP 基本的なことを見落としているかもしれませんが、 何かお気づきの方が居られましたら、ご教授ください。 宜しくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
すべて同じ名前でよいのであれば、 配列にしてしまえば、悩まずにすむはずですが。 Dim Koumoku(1 to 30) as Variant これでは、駄目な理由を説明してもらえるならば、他の手を考えてみますが?
その他の回答 (1)
- sha-girl
- ベストアンサー率52% (430/816)
まずKouzoutai.("KOUMOKU" & CNT)に無理があります。 Kouzoutai.KOUMOKU0というな処理を期待されてたかと思いますが KOUMOKU0というのは文字列ではなく変数名です。 カウントしていきたいのなら Type Kouzoutai KOUMOKU(30) End type とするべきです。 コントロールの場合はそういう書き方も可能ですが結局はコントロール名からメモリの場所を検索して割り出してるにすぎません。 そういう場合はコントロールも配列にした方が(速度的な面も含めて)良いです。 ネイティブコードコンパイルの場合、基本的に変数名の情報はなくなります。
お礼
早速のレスありがとうございます! you-mさんにもご教授していただいたのですが、配列にするとうまくできました。 >コントロールの場合はそういう書き方も可能ですが結局はコントロール名からメ >モリの場所を検索して割り出してるにすぎません。 >そういう場合はコントロールも配列にした方が(速度的な面も含めて)良いで >す。 貴重なご教授ありがとうございます。 大変参考になりました。
お礼
早速のレスありがとうございます!! 確かに配列にすれば、うまくいきました。 簡単なようですが、頭の固い私には思いつきませんでした。 質問にも書きましたが、コントロール名の場合に ["コントロール名" & CNT]の書き方で書いたもので、 この方法しか頭にありませんでした。 本当にありがとうございます。