過去の桐井戸端BBS (桐ver.9)
24908 KU156:「配列型変数の添え字が定義の範囲を超えています」なるエラーがでる トム 2004/02/17-21:22
いつもお世話になります。
前回も記述いたしましたが、現在sampleの「会議予約プログラム」を自分用に作り直しているところです。
いろいろとこちらの方でご助言頂きながら、やっとローカルパソコンでは、
思い通りにいろいろなパターンもクリアーして完成いたしました。

しかし、その必要なファイル群を含むフォルダをサーバーに置き、
ローカルパソコンに最初のフォームファイルのショートカットアイコンを作成し、
いざプログラムを起動させると、「KU156:配列型変数の添え字が定義の範囲を超えています。」で止まってしまい、
その後、入力用フォーム画面は表示されるのですが、入力ができません。

 その配列変数は、TBLファイルのレコードの項目のうち4つの項目のデータを配列変数であらわしたものです。
 ローカルパソコンでは全く見られなかったエラーのため何度すべてのファイルのプログラムを見直しても原因がわかりません。
 さらに、その状況になったTBLファイルをローカルパソコン上において、
最初のフォームファイルを起動してもまた同じエラー表示になります。
 そこで、そのTBLファイルを削除して、バックアップで残していたTBLファイルを新たにローカルパソコンのデータして、
最初のフォームファイルを起動させるとエラーなしで問題なく入力できます。
 他のネットワーク上でのファイルのやりとりは問題なく行えるので、
ネットワーク構築上のトラブルではなさそうです。
 みなさま、どうか良いアドバイスをお願いいたします。
24909 配列型変数の添え字が定義の範囲を超えた原因 佐田 守弘 2004/02/17-22:22
記事番号24908へのコメント
トムさん
原因を特定しにくいエラーですね。
思いつくままに、可能性があるものを列挙してみます。書かれているだけの
情報ではどれが原因になっているかの推定はできませんので、
そちらで確認してみて下さい。

@添字の値が0になっている
これは少し前の質問にもありました。最も考え得る原因です。
ただし、なぜ0なのかは考えてみる必要があります。
単に代入のし忘れ、項目値を参照して代入したところ、参照した項目値が0であった、などがあります。
また次に述べる事も原因しているかも知れません。

A添字に使っている変数が異なるタイプで重複している。
同じ変数名で、共通、固有、局所の変数を定義できます。
これ自体はエラーにはなりません。
しかし異なるタイプで同じ変数名が使われていると、
ローカルな程、優先順位が高くなります。
例えば&番号を共通変数で定義してある時に、固有変数、局所変数などで同じ
&番号を定義して使うと、定義されている間は、固有変数 < 局所変数 < 自動変数の順で優先されて使われます。
そして優先順位の高いローカルな変数がなければ、順に優先順位の低い変数が使われます。
このため、値を代入した積もりでも実際には代入されていない
共通変数が参照された事が原因となる場合があります。

B再宣言によって値をクリアしてしまった。
既に宣言されている変数を、同じデータ型で宣言し直しても、
エラーにはなりません。しかし値がクリアされます。

メイン部で変数を宣言しているイベントファイルを、複数のフォームで供用した場合、
フォーム呼び出しなどでフォームを呼び出す度に変数の宣言が
やり直されて、値がクリアしてしまう場合があります。
これは、案外と原因の究明がしにくいエラーの1つです。

●エラーが起きた所で、変数値を確認する
これを行ってみて下さい。あとはなぜそうであるかを調べるしかありません。

佐田守弘(KS-00119)
24915 Re:配列型変数の添え字が定義の範囲を超えた原因 トム 2004/02/17-23:44
記事番号24909へのコメント
佐田様、早速のご回答ありがとうございます。
早速ですが、

>@添字の値が0になっている
>これは少し前の質問にもありました。最も考え得る原因です。
>ただし、なぜ0なのかは考えてみる必要があります。

この添字が0になっているかどうかは、どのように調べるのでしょうか?
また、この「添字」とは具体的には何ですか?
初歩的な質問で済みません。

>A添字に使っている変数が異なるタイプで重複している。
>B再宣言によって値をクリアしてしまった。

ご指摘のABの原因であれば、ローカルパソコン上でも、同様のエラーが出てしまうのではないでしょうか?
ネットワーク上において配列変数の値の置き方(作り方)が変わることがあるのでしょうか?

ご教授よろしくお願いいたします。
24916 Re:KU156:「配列型変数の添え字が定義の範囲を超えています」なるエラーとは? 通りすがり 2004/02/18-00:23
記事番号24908へのコメント
イベントとかCMDで作成しているのでしょうから、
>「KU156:配列型変数の添え字が定義の範囲を超えています。」
のエラーが出る行番号がわかりますよね。
その前後での配列変数の値、あるいは要素番号の値をトレースしてみては?

例えばこの配列変数を&DATA[]として、変数でこの配列変数を使っていた場合、
&DATA[&i] とか
この前の段階での&iの値をトレースしてみたらどうでしょう?
確認 #STR(&i)
で値を確認できます。
エラーになる場合とならない場合とで、ここがどう変化するか調べてみるとか?

表の未定義値の取り扱いかたの違いでもなさそうだし・・・。
24932 Re:配列型変数の添え字が定義の範囲を超えた原因 佐田 守弘 2004/02/18-23:51
記事番号24915へのコメント
トムさん
前回書いた通り、書かれている情報量が少なく、第三者に原因を断定できる問題ではありません。
従って、少しでもその可能性として考えられるかも知れない
と考えられる原因をヒントとして列挙してみたものです。
ですから私に「そんな事があり得ますか?」と聞かれても、判断できません。
疑わしいと思った事を揚げてみたので、「その様な事は絶対にあり得ない」という
確認作業は、作った人でないとできません。

以下、万が一にも、その原因が考え得ると考えた理由を述べます。

●サーバとローカルでの挙動の違い
>ご指摘のABの原因であれば、ローカルパソコン上でも、同様のエラーが出てし
>まうのではないでしょうか?
基本的には、ローカルパソコン上でも同様のエラーが出る可能性は高いと思います。
私が書いたことは、普通にはあり得ない話です。

しかし、例えばイベントファイル名の指定、あるいは別の一括処理を呼び出す時に、
フルパス名を書いてしまっていて、起動したのはサーバ上のファイルだけど、
途中からローカル上のファイルが使われてしまったとか、その様な事はないでしょうか
という指摘です。
あるファイルの開発途中のコピーがどこかに残っていて、実はそれが呼び出されていたという事がないかです。

サーバ上にある一括処理なり、フォームを開いているのだと思いますが、
それらを一括処理なら、他の一括処理が呼び出されていないかどうかを調べてみて下さい。
フォームならフォームから開かれるイベントが何であるか、また、サブフォームを持つ場合に、
そのサブフォームはどこにあるのか、更にサブフォームが開く
イベントファイルはどうなっているかなどを丹念に追って行く必要があると思います。

●配列変数の作り方
>ネットワーク上において配列変数の値の置き方(作り方)が
>変わることがあるのでしょうか?
上記と関連して、サーバ上のイベントなどを起動しているはずが、
実は別の所にあるイベントファイルが動いていたとしたら、あり得ると思います。
実際にその様な事があり得るかどうかは、作った人でないと解りません。

●添字を指定する変数の値
>また、この「添字」とは具体的には何ですか?
これは通りすがりさんが書かれている通りです。配列変数の何番目の値かを
指定するのに、
 &数量[&番号]
の様な形で、変数「&番号」を使って指定しているのではないかと思います。
この「&番号」が添字です。
「具体的に何ですか?」と聞かれても、実際に使われている変数名は解りません。

佐田守弘(KS-00119)
24937 解決しました。 トム 2004/02/19-06:02
記事番号24916へのコメント
佐田様、通りすがり様、貴重なご教授ありがとうございます。

おっしゃるとおりにトレースかけてみると、空白の部分が非常に多いことが判明しました。
実は、日付と曜日だけ入力したダミーデータを半年分ほど作って
イベントと一括処理を実行していた結果、表題のようなエラーが出でいたようです。
短い期間ですが、必要項目を入力したデータで試したら、動いてくれました。
お騒がせというか、ご迷惑というか、私の方のミスで貴重な時間をとっていただき
本当に済みませんでした。
でも、今回ご助言頂いた内容は、私を100歩ほど進歩させてくれました。
これからもよろしくお願いいたします。

戻る