過去の桐井戸端BBS (桐ver.8)
13260 フォームを開くときに変数で絞り込みをしているのだがエラーになる ひろこ 2001/09/29-14:24
こんにちは。ひろこと言います。
以前一度書き込みをして、皆さんの知恵をお借りし
その後順調に部内のDB化が進んでいるのですが、
またまたまた、、、初歩的な事かも知れませんが壁に当たってしまいました(^^;

メインの「編集」(コマンドボタン)をクリックするとイベントで
フォームを1画面に4つ並べて表示します。3.4のフォームは月ごとに表示したいので
キー入力コマンド&変数1(変数宣言は整数)にしています。
その後フォームを開く時に3のフォームをグループ値選択→&変数1にしてあります。

問題は、4のフォームを開く時に絞り込みか、検索にて月を表示できるようにしたいのですが、
(変数宣言 文字列{&変数2}としてあります)
KD1084:比較式の形式に誤りがあります。と、エラーになってしまいます。
なぜ??どこが違うのでしょう?

絞り込みとか検索を使おうとした時の変数の決まり?は何故文字列型の変数名でなければいけないのでしょうか?
その為&変数2は&変数1を文字列にした変数です。
としてあるつもりですが、その辺の文法がまた違うのかもしれません。
以下kevファイルの記述です。
元表データ型は、フォーム3の[受付日01]は整数、[月]は文字列型です。

手続き定義開始 コ編集::マウス左クリック(長整数 &マウス位置[2],長整数 &明細番号,長整数 &フラグ,参照 長整数 &処理中止)
キー入力 (1,1)-(15,10),プロンプト="  ?月分",モード=無変換,上書き=する,初期値=&月-1,終了状態=&数値,&変数1
条件 (&数値=0)分岐 終り
ウィンドウ作成 "1.wfm",位置=(0, 0),サイズ=(650,161),ハンドル=&hwnd,編集表=開く
ウィンドウ作成 "2.wfm",位置=(651, 0),サイズ=(355,161),ハンドル=&hwnd,編集表=開く
ウィンドウ作成 "3.wfm",位置=(0, 162),サイズ=(1010,200),ハンドル=&hwnd,編集表=開く
グループ検索 {[受付日01]=&変数1}
ウィンドウ作成 "4.wfm",位置=(0, 364),サイズ=(1010,260),ハンドル=&hwnd,編集表=開く
&変数2=#str(&変数1)
絞り込み [月]_&変数2
名札 終り
メッセージボックス "キャンセル","キャンセルしました",アイコン=i,制御文字展開=しない
終了 表
手続き定義終了

13262 Re:絞り込みの変数名 悲しげ 2001/09/29-14:52
記事番号13260へのコメント
どもっ、ひろこさん、結論だけ云いますと、

>&変数2=#str(&変数1)
>絞り込み [月]_&変数2

のところは

絞り込み [月]=&変数1 または 絞り込み [月]=&変数1

として下さい。
この場合、アンダーバー方式を使う必要は全くありません。

13264 Re:絞り込みの変数名 pokopon 2001/09/29-15:10
記事番号13260へのコメント
ひろこさん こんにちは

>&変数2=#str(&変数1)
>絞り込み [月]_&変数2

&変数1に正しく値が代入されていない(未定義のまま)ではないでしょうか?
フォームで変数に値を代入した場合には、変数更新をしなければ、正しく値が反映されていないのでは?

「絞り込み」の前に「確認」コマンドをはさめて、一旦処理を止めてから、「変数管理」で変数の値を確認して見て下さい。

>KD1084:比較式の形式に誤りがあります。
のエラーは、&変数2の内容が、未定義または、比較式の記述が間違っている場合ではないでしょうか?

でも_変数名での記述の必要があるのでしょうか?

絞り込み [月]{=&変数2}  あるいは [月]=&変数2
だけで十分かと・・・・。

13265 Re:絞り込みの変数名 悲しげ 2001/09/29-15:13
記事番号13262へのコメント
コピペ後の訂正忘れ!
左も右もおんなじじゃぁござんせんか。(^^;)

× 絞り込み [月]=&変数1 または 絞り込み [月]=&変数1

○ 絞り込み [月]=&変数1 または 絞り込み [月]{&変数1}

右の書式には異論があるかもしれませんが、でもこれで支障に出会った経験は、私の場合は皆無です。
13266 Re:絞り込みの変数名 悲しげ 2001/09/29-15:18
記事番号13265へのコメント
すいません、以前のふたつは誤読でした。
[月]は文字列型だったんですね。(^^;)(^^;)(^^;)
私なら必ず数値系の型にしているもんで。

13268 Re:絞り込みの変数名 ひろこ 2001/09/29-16:07
記事番号13264へのコメント
悲しげさん、pokoponさん、こんにちは。
お返事有り難うございます。
>絞り込み [月]_&変数2

確かにアンダーバーは使わなくても良いみたいですが、
確認コマンドを試してみた所、3番目のフォームは(グループ値検索の方)
ちゃんと数字(キー入力コマンドで「8」と入力した数字)がかえってきましたが
4番目のフォーム(絞り込みをかけた方)は何も表示されませんでした。
なぜでしょう?

>&変数1に正しく値が代入されていない(未定義のまま)ではないでしょうか?
>フォームで変数に値を代入した場合には、変数更新をしなければ、正しく値が反映されていないのでは?
>
上記pokoponさんが言ったような事が関係あるのでしょうか?

>絞り込み [月]{=&変数2}  あるいは [月]=&変数2
>だけで十分かと・・・・。

桐V8一括編(桐@onlinヘルプ)だと、アンダーバーを使う様な事書いてあるんですよね(;_;)

は、、、時間が、、夜またいろいろと試してみます。、、、が、
他に何か分かる事があれば、ガンガン書き込んでくださると助かりますm(_ _)m

13269 Re:絞り込みの変数名 pokopon 2001/09/29-17:30
記事番号13268へのコメント
ひろこさん こんにちは

>4番目のフォーム(絞り込みをかけた方)は何も表示されませんでした。
&変数2(すなわち&変数1)に何も代入されていなかったようですね。

>フォームで変数に値を代入した場合には、変数更新をしなければ、正しく値が反映されていないのでは?
>キー入力コマンド&変数1(変数宣言は整数)にしています。
とすれば、これは関係ないかも?

さて、考えられることとして、この&変数1はどのタイミングで、どの型として宣言されていますか?
確認コマンドで、一時停止したとき、「変数管理」で確認したとき、
「固有」「局所」のいずれでしょうか? 変数のスコープの関係で4.wfmを開いた時に見えないのかも?
とりあえず、3.wfmまでは&変数1が見えているのですから、4.wfmが開いてから見えていないということになります。
(思いつきですが、4.wfmでのkevで、新たにというか再度&変数1を局所で宣言していませんか?)

変数宣言 文字列{&変数2} あるいは 変数宣言 文字列{&変数1}
とする時、変数の型を「固有」あるいは「共通」にしてみて下さい。
ただし、この宣言は「メイン.wfm」で使うkevで一度だけ宣言すれば良いです。
1〜4.wfmでのkevで宣言しているのなら、こちらは削除して下さい。

イマイチ、メイン.wfm 1〜4.wfmの関係、それらに取り込まれている表の関係がわからないので、詳しくは分かりませんです。
ところで、メイン、1〜4には同じ表が取り込まれているのですか? kevはどこで定義していますか?

何か、外してっぽい感じですね。


>桐V8一括編(桐@onlinヘルプ)だと、アンダーバーを使う様な事書いてあるんですよね(;_;)
_変数を使うのは、OR検索とか複雑な比較式を使う時には良く利用しますが、「文字列型の項目の処理の時に使う」という意味ではありません。
比較式そのものを「文字列型の変数に代入」しておけば、_変数でそれを記述したのと同じ処理をしてくれるということです。
HELPから----
変数に代入した比較式を使用して検索する場合は、「<項目名> _<文字列型の変数名> 」の形式で指定します。
変数名の前には、_(アンダーバー)をつけます。

例えば、
&STR = "*" + """" + "ひろこ" + """" + "*"
絞り込み [氏名]_&STR
は、
絞り込み [氏名]{*"ひろこ"*}
と同じです。[氏名]に"ひろこ"が含まれているレコードが絞り込まれます。
ですので、
>&変数2=#str(&変数1) &変数1に「8」が代入されていたとして、
>絞り込み [月]_&変数2
は 絞り込み [月]="8" あるいは [月]{"8"} と同等です。


13270 Re:絞り込みの変数名 MSF 2001/09/29-17:35
記事番号13268へのコメント
ひろこさん、はじめまして。

まず、前提として、
絞り込み比較対象の、[月]の項目は数値型である。
キー入力で値がセットされる&変数1も数値型である。
であるならば、
一旦、数値型から、文字列型に変換する必要はなく、
数値型変数のまま、直接絞り込み出来るはずです。

絞り込み [月]{&変数1}

でOKのはずです。
(悲しげさんの、No.13265のコメント記述でOKのはずです。)

pokoponさんの
>絞り込み [月]{=&変数2}  あるいは [月]=&変数2
>だけで十分かと・・・・。
では、数値型の[月]という項目を、
文字列型の値で絞り込むことになりますので、
正しい値は得られないことになります。

たぶん、勘違いのもとは、

----------以下、一括ヘルプファイルより引用-----------
■構文
絞り込み   <項目名> { <比較式> ,… }|<項目名> _<文字列型の変数名> ,\

部分一致検索 = しない|含む|含まない|先頭一致|末尾一致,\

文字比較方法 = 自動|文字符号|辞書順|拡張辞書順

■パラメータ
<項目名> { <比較式> ,… }|<項目名> _<文字列型の変数名>
検索する項目の名前と、検索条件となる比較式を指定します。
AND 条件を指定するには、比較式を半角または全角のコンマで区切ります。
変数に代入した比較式を使用して検索する場合は、
「<項目名> _<文字列型の変数名> 」の形式で指定します。
変数名の前には、_(アンダーバー)をつけます。
----------------------------------------------------
上記の終わり3行「変数に代入・・・(アンダーバー)をつけます。」
の意味の取り方が違っていたのではないでしょうか。

私が思うに、文字列型変数で指定して、アンダーバーを使用する記述は、
その変数の値に、例えば、"1=<[]<=6"のような比較式の文字列を代入して、
その値で絞り込む(上記例だと、1月から6月までを絞り込む)といった用途
に使用するものと思います。

たぶん、うまくいくと思いますが・・、どうでしょう?

それでは。

13271 Re:文字型では? pokopon 2001/09/29-17:49
記事番号13270へのコメント
MSFさん こんにちは

>まず、前提として、
>絞り込み比較対象の、[月]の項目は数値型である。
>キー入力で値がセットされる&変数1も数値型である。
>であるならば、
>一旦、数値型から、文字列型に変換する必要はなく、
>数値型変数のまま、直接絞り込み出来るはずです。

とありますが、前提として
>元表データ型は、フォーム3の[受付日01]は整数、[月]は文字列型です。
とありました。[月]は文字列型ですよ、ご質問の内容では。

とはいっても、ひろこさんのとんでもない勘違いで、実は[月]は数値型であるのかも知れませんね。

ひろこさんも「もう一度確認」してみて下さい。

(普通は、[月]は数値型=整数とすべきだよね。多分、_変数に惑わされて文字列型にしたと思いますけど)

MSFさんへ  「弁解」でした!!
(私は文字列型であるというひろこさんの前提に従っただけです)


13272 Re:絞り込みの変数名 アックン 2001/09/29-17:50
記事番号13260へのコメント
こんばんは。

>&変数2=#str(&変数1)
>絞り込み [月]_&変数2

ここは1行目を下記のように書いてください。
2行目はそのままでいいです。アンダーバーを使います。

  &変数2="="+#str(&変数1)
  絞り込み [月]_&変数2

このように変数には比較式そのものを代入します。
たとえば 8月を絞り込みたいときは、=8を文字列にして代入するわけです。
これで文字列型変数を用いる理由が納得できるでしょう。

アックン(=^・^=)
13273 Re:文字型では? MSF 2001/09/29-17:57
記事番号13271へのコメント
pokoponさん、どうもです。

なるほど、そうでしたね。すいません。
どうも斜め読みだと、ポカしますね(^^;

>元表データ型は、フォーム3の[受付日01]は整数、[月]は文字列型です。

だけど・・
フォーム3って書いてあるし・・
絞り込むのはフォーム4だし・・・

以上、小声で、「弁解」でした・・(^^;

それでは。

13274 Re:絞り込みの変数名 MSF 2001/09/29-18:12
記事番号13272へのコメント
アックンさん、こんばんは。

>このように変数には比較式そのものを代入します。
>たとえば 8月を絞り込みたいときは、=8を文字列にして代入するわけです。
>これで文字列型変数を用いる理由が納得できるでしょう。

うーん、なっとく!
またひとつ、かしこくなりました。
ありがとうございます。

ですが、なぜ "="を省略するとだめなんでしょう?
会話形式の比較式なら、いらないのに・・
検索式でも省略できないのでしょうか?

今度ゆっくり、ためしてみることにしましょう。

それでは。
13275 Re:絞り込みの変数名 アックン 2001/09/29-18:16
記事番号13272へのコメント
pokoponさん、MSFさん> こんばんは

[月]のデータ型について話題にされていたので、もうちょっと。

>  絞り込み [月]_&変数2

このときの「月]項目のデータ型は、整数でも数値でも文字列でも有効です。
一度試してみてください。

アックン(=^・^=)

13276 Re:絞り込みの変数名 アックン 2001/09/29-18:19
記事番号13274へのコメント
>会話形式の比較式なら、いらないのに・・

会話形式だと省略できるからでしょうね。

アックン(=^・^=)

13277 Re:絞り込みの変数名 悲しげ 2001/09/29-21:21
記事番号13276へのコメント
不思議に思って次のような簡単な一括処理で試してみました。
------------------------------------------------------
表 "test03.tbl"  /*[文字列月]なる文字どおりの項目を持っている表*/
表表示
繰り返し
 絞り込み解除
 キー入力 (1,1)\
  ,プロンプト="絞り込み月数 → "\
  ,モード=確定\
  ,上書き=する\
  ,初期値=""\
  ,終了状態=&実行リターン\
  ,&件数
 条件(&実行リターン=0) 繰り返し中止
 &STR=#str(&件数)
 絞り込み [文字列月]_&STR
 確認 "どう?"
繰り返し終了
-----------------------------------------------------
これで全くエラーなしで動いています。だから

>>会話形式の比較式なら、いらないのに・・
>会話形式だと省略できるからでしょうね。

と云うことでも無いようなのです。実に不思議です。

で、元々の#13260に戻って考えてみると、

>KD1084:比較式の形式に誤りがあります。

と云うことのようですから「データ型」の問題ではなさそうです。
文字どおり「比較式の形式」と云うことでの究明が、ここでは期待されているようでおます。(^^;)
13278 Re:フォロー、どうも pokopon 2001/09/29-21:46
記事番号13277へのコメント
悲しげさん こんばんは

>不思議に思って次のような簡単な一括処理で試してみました。
>文字どおり「比較式の形式」と云うことでの究明が、ここでは期待
>されているようでおます。(^^;)

まったくそのとおりです。比較式の記述のコンクールではありませんね。
フォロー、どうも。 m(__)m

問題は、&変数1に代入されていた値が、4.wfmを開いた後で、スコープされていない、
すなわち&変数2が期待通りの値(状況からするとおそらく未定義値)とならない「摩訶不思議な現象」の解明にあります。
もう少し、ひろこさんからのレスを待って、状況を見極めましょう。

13279 Re:絞り込みの変数名 ひろこ 2001/09/29-22:12
記事番号13277へのコメント
皆さんこんばんは。
変数に関する所はまだまだ解らない所が多いのですが、
皆さんの書きこみを見ながらじっくり研究してみたいと思っています。

何だか、根本的な問題が違ってるような気がしてきました。
悲しげさんの

>表 "test03.tbl"  /*[文字列月]なる文字どおりの項目を持っている表*/

-----中略---------
>&STR=#str(&件数)
> 絞り込み [文字列月]_&STR
> 確認 "どう?"
>繰り返し終了
>-----------------------------------------------------
>これで全くエラーなしで動いています。だから

参考に試してみました。
>&STR=#str(&件数)
の後に
確認 #str(&件数)
とするとちゃんと"8"という数字が帰ってくるのですが、

私が書いた
ウィンドウ作成 "4.wfm",・・・・・・・
&変数2=#str(&変数1)
確認 #str(&変数2)
とすると何も代入されていない状態になってます。
そこが解決しない事には先に進めそうに無いです(T_T)

元に戻りますと、3のフォームの元表は結合表で[受付日01](整数)でグループ化しており
(8月のデータが複数ある為グループ化してある)
ウィンドウ作成"3.wfm"・・・・・・・・
確認 #str(&変数1)
グループ検索 {[受付日01]=&変数1}

ここでは、ちゃんと確認で”8”とかえってきています。

4のフォームの元表は表で[月](文字列)
(8月のデータは1件だけです)
ウィンドウ作成 "4.wfm",・・・・・・・
&変数2=#str(&変数1)
確認 #str(&変数2) 
絞り込み [月]=&変数2

ここで、すでに確認の時に何もかえってきていない状態になってしまいます。
だから当然絞り込みもかけられるはずが無いのかな...とも、、思ってるのですが、

pokoponさんが書かれたように最初は「月」を整数型にしてました。_変数に惑わされて文字列型にしてしまったのです(^^;;
大正解です。ですが、、そのせいで皆さんにいろんな事を考えさせてしまったようで申し訳ありません。
でも、問題はそこではないような気がします。
データ型が関係ないなら、、?と思い[月]を整数に戻し

ウィンドウ作成 "4.wfm",・・・・・・・
確認 #str(&変数1) 
絞り込み [月]=&変数1

としてみましたが、これも何故か確認がかえってこないのです。
ウィンドウ作成の後に確認をかけているので絞り込みのデータ型が問題ではない事が解っていただけると思います。
では、、、ウィンドウ作成の時に使っている表?が問題なのでしょうか、、
どんどん深みにはまってます。すいません。


13282 Re:絞り込みの変数名 pokopon 2001/09/30-08:30
記事番号13279へのコメント
ひろこさん おはようございます

>確認 #str(&件数)
>とするとちゃんと"8"という数字が帰ってくるのですが、
>ウィンドウ作成 "4.wfm",・・・・・・・
>&変数2=#str(&変数1)
>確認 #str(&変数2)
>とすると何も代入されていない状態になってます。

という事は、明らかに「4.wfm」が開いた時に&変数1がリセット(あるいは再設定)されている事が予想されますね。

ところで、&変数1の変数宣言を「固有」にして試したでしょうか?

もう一度、確認して下さい。「4.wfm」に関する部分だけの確認でよいでしょう。

1.「4.wfm」にkevは設定されていますか? もしかして、それは「メイン.wfm」で設定しているkevではありませんか?
2.上記イベントファイルが異なる名称であっても、その中で&変数1が再度宣言されていませんか?
3.「4.wfm」の中で、コマンドボタン、テキストボックス、ラベル等で、&変数1をいじるような(再設定するような)事をしてはいませんか?
4.思い切って「絞り込み」をコメントアウト(行頭に*をつけて)した場合、正常に絞り込まれない状態が再現できますか?
5.イベントファイル内で「検索」を掛けてみて「&変数」の箇所を洗い出し、宣言等に何かミスがないか確認してみる。
6.これはありえないかもしれませんが、変数名の違い・・・・。
  &変数1、&変数1が混在(数字の大文字、小文字)  きちんと区別されていますか?
  もちろん&変数2、&変数2もですけど。

本当に????な現象です。も一度、フォーム、イベントを洗いなおして見ましょう。

13284 Re:絞り込みの変数名 pokopon 2001/09/30-10:32
記事番号13282へのコメント
もう一つ

「4.wfm」を開いた直後に、強制的に、
&変数1 = 8
として、正常に[月]が絞り込まれるのかどうか?
これで、正常に機能しているのなら、変数の扱いの問題です。

13287 Re:絞り込みの変数名 アックン 2001/09/30-12:31
記事番号13277へのコメント
悲しげさん>
話がややこしくなっているようですね。
後で質問のプログラムを試してみますが(今日は雨空で運動会が延期になってヒマになったんだよん)、ここでいったん質問と回答から切り離しましょう。
混乱させたくないですから。

>これで全くエラーなしで動いています。だから
これが有効なのは、一括処理だけではないでしょうか。
イベントでは、[月]が文字列型だと「比較できないデータ型」エラーが発生します。
でも、[月]が整数型だと有効です。

このあたりの事情は、一括処理はDOS桐の一括処理と互換性をほぼ保っているが、イベントは書式が厳正化されたからなのでしょうか。

アックン(=^・^=)
13288 Re:絞り込みの変数名 アックン 2001/09/30-12:39
記事番号13287へのコメント
ありゃりゃ、私勘違いしてました。

>イベントでは、[月]が文字列型だと「比較できないデータ型」エラーが発生します。
>でも、[月]が整数型だと有効です。

今簡単に左クリックイベントで確かめたところ、
エラー表示はしないけど、レコードを1件も絞り込みしないです。
正常動作してないですね。
ということで、イベントではアンダーバーをちゃんと使いなさいということかと。(^^;

アックン(=^・^=)

13290 別wfm間での変数の挙動 悲しげ 2001/09/30-13:06
記事番号13282へのコメント
ps:#13282
>5.イベントファイル内で「検索」を掛けてみて「&変数」の
>箇所を洗い出し、宣言等に何かミスがないか確認してみる。

某氏(^^;)が作った「桐でGrep」を使うと超便利ですよ。(^^;)


と、psが先に来てしまいましたが、以下が本文です。(^^;)
試しに先に私が挙げた「簡単な一括処理」で
「KD1084:比較式の形式に誤りがあります」エラーを出現させることができました。
それはキー入力の際に空の値を入れることによってです。
このこととひろこさんが「確認」コマンドで得た結果は符合します。

では、なぜ&変数1の値が空となるのか?
pokoponさんが仰るように、別kevまたは別wfm※で、同名の変数を再度宣言している可能性が高いですね。
変数宣言しただけではその値は空ですから。
二重宣言の場所を探して、後の指定を抜くようにする。

※関係ないでしょうけど、wfm定義時に「変数管理」から変数を追加しておくことも可能です。
これは便利な反面、忘れてしまうと後か探すのが超大変です(でした)。(^^;)

さらに関係ないかもしれませんが、私はメインメニュー的な大元のkevのメイン部で、
必要な変数はなるべく共通変数としてまとめて宣言するようにしています。
ま、これは考え方次第ですけど。

(例)
変数削除 共通
変数宣言 共通,ごにょごにょ・・・・・・・・・

または

if(#変数("代表的な変数名")="")
 ライブラリ "共通変数宣言的.cmd"
 手続き実行 共通変数宣言的な手続き名()
end
13291 Re:絞り込みの変数名 ひろこ 2001/09/30-14:05
記事番号13282へのコメント
pokoponさん、悲しげさん、あっくんさん、こんにちは。
皆さんのコメントを印刷してもう一度読みなおしてみました。
そしてpokoponさんの

>という事は、明らかに「4.wfm」が開いた時に&変数1がリセット(あるいは再設定)されている事が予想されますね。
>ところで、&変数1の変数宣言を「固有」にして試したでしょうか?

変数宣言の時に固有ets..を省略した場合は固有になるのですよね?変数宣言 整数{&変数1} とした時。
これは問題無かったです。でも、 変数宣言 固有,整数{&変数1} と宣言しなおしました。不安だったので・・

>1.「4.wfm」にkevは設定されていますか? もしかして、それは「メイン.wfm」で設定しているkevではありませんか?

そして、、、大正解でした。(-_-;;
4.wfmには「閉じる」コマンドボタンにイベントを設定してあり、すべてのフォームを閉じるイベントを
メイン.wfmのkevと同じファイルの中に設定してありました。
これを別のkevを作り書きなおした所(メインkevからはちゃんと削除しました)
4.wfmの[月]が、整数でも文字列でも、ちゃんとフォームが開きました。感動〜(^O^)の一瞬でした。

ですからやはり正統派に戻り[月]は整数型にして、最初に悲しげさんが書いてくださった「絞り込み [月]=&変数1」を使い
下記のように記述しました。

繰り返し
キー入力 (1,1)-(15,10),プロンプト="  ?月分",モード=確定,上書き=する,初期値=&月-1,終了状態=&数値,&変数1
条件 (&数値=0)繰り返し中止
ウィンドウ作成 "1.wfm",位置=(0, 0),サイズ=(650,161),ハンドル=&hwnd,編集表=開く
ウィンドウ作成 "2.wfm",位置=(651, 0),サイズ=(355,161),ハンドル=&hwnd,編集表=開く
ウィンドウ作成 "3.wfm",位置=(0, 162),サイズ=(810,200),ハンドル=&hwnd,編集表=開く
グループ検索 {[受付日01]=&変数1}
ウィンドウ作成 "4.wfm",位置=(0, 364),サイズ=(1010,260),ハンドル=&hwnd,編集表=開く
絞り込み [月]=&変数1
繰り返し中止
繰り返し終了

今回の件で変数の事すごく勉強させて頂きました。皆さんにはなんとお礼を言っていいのか、、
本当に有り難うございます。

kevファイルの使い分けなどは、フォームが変わるたびに作ったほうが良いのかどうか、、
という所を、もう少し深く考えなければいけなかったのですね。

あまり、(というか、何も..に近い)考えてませんでした。今後気を付けます。

>本当に????な現象です。も一度、フォーム、イベントを洗いなおして見ましょう。

m(_ _)m摩訶不思議な現象にしていたのは、私自身だった..と言う事ですね。
有り難うございました。
13292 Re:絞り込みの変数名 アックン 2001/09/30-14:38
記事番号13260へのコメント
こんにちは。
質問者が最初に提示しされプログラムはそのままに、
[月]データ型を整数に変えて試してみたところ、
3.wfmではグループ検索し、4.wfmではちゃんと絞り込みます。

そこで、ponpokoさんと悲しげさんが指摘している変数を若干テストしてみました。

左クリックイベントを設定しているkevにおいて&変数1,&変数2を共通で宣言し、
4.wfmのイベントファイルにおいて&変数1,&変数2固有で宣言すると、
3.wfmでグループ検索している&変数1が有効で、
4.wfmで&変数1・&変数2ともに未定義となり、該当するエラーが表示されました。

今回試したのは、&変数1・&変数2をどちらも共通か固有にする4パターンだけです。
もし4.wfmにイベントファイルが設定されてないときは、また考えましょう。(^^;

アックン(=^・^=)
13293 Re:絞り込みの変数名 アックン 2001/09/30-14:40
記事番号13292へのコメント
ありゃ。すでに解決してましたね。(^^;

アックン(=^・^=)

13296 Re:絞り込みの変数名、改め、別wfm間での変数の挙動 悲しげ 2001/09/30-16:41
記事番号13291へのコメント
どもっ、ひろこさん

>kevファイルの使い分けなどは、フォームが変わるたびに作ったほうが
>良いのかどうか、

kevは一般的にはwfm毎に作る方がいいです。共用する時は、しばしばドツボにはまることを承知の上で挑戦する必要があります。

それと、#13291は#13290を読む前に書かれたのだろうと思われますが、
いずれにせよ、タイトルに付記したとおり、複数wfm間の変数の挙動はちょいと難しいところがあります。
リファレンス『グラフ・結合表』のp.104辺りからごちゃごちゃと書いてありますので
この辺を一度熟読されるとよいでしょう。
でも、実は私は、未だにここの意味を読み切れておらず、
またここに書かれていないことも幾つかあるみたいで…。
で、結局のところ私は、複数wfmで変数を共用する時は、#13290で書いたように、
スッキリ共通変数で逃げるようにしています。(^^;)
13298 Re:絞り込みの変数名、改め、別wfm間での変数の挙動 ひろこ 2001/09/30-20:04
記事番号13296へのコメント
悲しげさん、こんばんは。

>kevは一般的にはwfm毎に作る方がいいです。共用する時は、しばしばド
>ツボにはまることを承知の上で挑戦する必要があります。
>で、結局のところ私は、複数wfmで変数を共用する時は、#13290で書い
>たように、スッキリ共通変数で逃げるようにしています。(^^;)

助言有り難うございます。
私もメイン部分で変数は宣言するようにしているのですが、
wfmが違う時kevも換えるというあたりは、使い方により変更していこうと思いました。

明日会社に行ってから「グラフ・結合表」読んでみようと思います。
土日は、家に仕事をMOで持って帰ってその時々の内容に合った本を
一緒に持ちかえってるので今は手元にありませんから(^_^;;
それでは。
13301 Re:解決できたようで pokopon 2001/09/30-22:14
記事番号13298へのコメント
ひろこさん こんにちは

解決できたようで、何よりです。
本日は所要のため不在で、まともにお相手できず、すいませんでした。
悲しげさんが詳しく解説つきで解決まで導いてくれた様で、よかったです。

悲しげさん>どうも、いつもフォロー、有難うございます。m(__)m

やはり、共通したkevでの「2重宣言」でしたか。
基本は「フォームごとにkev」ですね。

>>kevは一般的にはwfm毎に作る方がいいです。共用する時は、しばしばド
>>ツボにはまることを承知の上で挑戦する必要があります。
>>で、結局のところ私は、複数wfmで変数を共用する時は、#13290で書い
>>たように、スッキリ共通変数で逃げるようにしています。(^^;)

共通変数は「桐が動いている間、どこからでもスコープできる変数」です。
すなわち、どのフォームからでも参照できる反面、よく使うような変数は(例えばカウンタ用変数)は、
どこでリセットされるか分かりませんので、何でも間でも共通で宣言するのは、それなりの覚悟が必要です。
また、いくら共通で宣言した変数でも、同一名の自動変数、局所変数の方が、
優先してスコープされます。

という私も、かつては、ともかく「共通」で変数を宣言していたのですが、
最近では、できるだけ共通、固有の変数は持たないようにしています。
各フォームで共通して持ちたい定数的な値だけを共通変数、固有変数としています。
それ以外は、もっぱら「局所」です。後くされなくつかえますし、フォームが閉じれば「はい、
それまで」で消えてくれますので。

今回の場合には、&変数1は、単にキー入力で得た値を保管するだけの使い方のようですので、
これを「固有」や「共通」で持つのはあまり薦められません。
イベントの最初で「自動」で宣言すれば、そのイベント内だけに有効で、
かつ、別の型で宣言された同名の変数よりも優先されて参照可能です。

どこでもこの&変数1を参照するのなら別ですが、このイベント内だけの利用でしたら、手続き定義の最初で、
変数宣言 自動,整数{&変数1}
としておけば、そのイベント内だけで有効な変数として使えます。他で「固有で宣言」されていても、
そちらには全く影響を与えません。
なお、変数の型は、イベント内ならば「省略すれば自動変数」となります。
ただ、変数の型は、明記しておいた方が、あとから確認の際に役に立ちますので、省略しない方が・・・・・。

変数の型とその取り扱いは難しいですよね。
そのあたりは、 ONnoji さんの「イベント道場」で説明されています。

http://www.geocities.co.jp/SiliconValley-Bay/7565/hensu.htm

参考にしてみて下さい。


13313 Re:解決できたようで 悲しげ 2001/10/01-12:55
記事番号13301へのコメント
どもっ、pokoponさん

>やはり、共通したkevでの「2重宣言」でしたか。
>基本は「フォームごとにkev」ですね。

と云うことは、同一のkevで2箇所において(「固有」「局所」等変数の種別を異にする)
同名の変数を宣言していたと云うことですね。
う〜ん、ひろこさんの書き込みからは私はそのようには受け取っていませんでした。
私の解釈は、変数の種別にかかわらず、某kevで&変数2を宣言し且つ値を代入し、
さらに"4.wfm"付属のkev(上記某kevとは別なkev)でも同名変数を宣言してしまったと云うことです。
ただ、ひろこさんの書き込みを見直してみても、
そのどちらのことを指しているのかは、確かに特定できませんですね。(^^;)
どっちだったの? > ひろこさん

>ただ、変数の型は、明記しておいた方が、あとから確認の
>際に役に立ちますので、省略しない方が・・・・・。

1票!
13315 Re:解決できたようで pokopon 2001/10/01-13:17
記事番号13313へのコメント
悲しげさん こんにちは

>>やはり、共通したkevでの「2重宣言」でしたか。
>>基本は「フォームごとにkev」ですね。
>と云うことは、同一のkevで2箇所において(「固有」「局所」
>等変数の種別を異にする)同名の変数を宣言していたと云うこ
>とですね。

ごめん、そういう意味ではなくて、メインで1度宣言したあと、4.wfmで同じkevを
実行したため「再度宣言した」という意味で「2重宣言」と書きました。
全て、型を省略しての宣言でしょうから、メイン部分での宣言では「固有」となっていますね。

誤解を生みました。(^^ゞ


13318 Re:解決できたようで ひろこ 2001/10/01-14:04
記事番号13313へのコメント
悲しげさん、pokoponさん、こんにちは。
>
>>やはり、共通したkevでの「2重宣言」でしたか。
>>基本は「フォームごとにkev」ですね。
>と云うことは、同一のkevで2箇所において(「固有」「局所」
>等変数の種別を異にする)同名の変数を宣言していたと云うこ
>とですね。

ごめんなさい。ちょっと違うのかもしれないのですが
2重宣言には変わりないのではないかな?と言うのが私の答えです。
つまり、1.kevの中のメイン部で、変数宣言 固有,整数{&変数1}としている。
メイン.wfmも4.wfmも1.kevをイベントファイルに指定していた。という感じです。

2重宣言が、、って問題じゃないのかな?
何にしても、
メイン.wfmで使っているkevファイルをその、子フォームになるような
フォームでは使っていけないと言う事だけ解りました。
(4.wfmのイベントで1.kevファイルの中に左クリックした時発生するイベントを書いてたんで...)

>どっちだったの? > ひろこさん

どっちになるのでしょう(?_?)

>>ただ、変数の型は、明記しておいた方が、あとから確認の
>>際に役に立ちますので、省略しない方が・・・・・。
>
>1票!

では、これからその様にしていきます。
13319 Re:解決できたようで ひろこ 2001/10/01-14:14
記事番号13315へのコメント
あちゃ、、ごめんなさい。
pokoponさんの記事を読む前に
(というか正確に言うと投稿しようとしてほって置いた状態)
記事投稿してしまいました。
やっぱり2重で宣言した事になるんですよね?
13321 Re:解決できたようで 悲しげ 2001/10/01-14:54
記事番号13319へのコメント
どもっ、p…さん、ひ…さん(すごい省略)(^^;)

>メイン.wfmも4.wfmも1.kevをイベントファイルに指定していた。
>という感じです。

この1行と先のp…さんの説明で全て了解しました(蛍光燈ですいません)。
なるほどね、「名札 メイン」部は、wfmの方でイベント指定せずとも必ず
発生しますからね。もしかしたら四重宣言だったかもしれない。(^^;)

kevを共用しては絶対にいけないと云う訳ではないけれども(実は私は結構共用させていて、
その都度ドツボにはまってたりしてますが)、イベントが多重発生し得るすることだけはよ〜く承知の上で臨む必要があります。

戻る