過去の桐井戸端BBS (桐ver.9)
19697 イベントで取得した変数で検索したいのだが常に先頭レコードが表示される katsuyoshi 2003/04/02-05:47
A.wfmのイベントでB.wfmを開き
A.wfmで取得した[&No]で検索をしようとしていますが
B.wfmを呼び出しても常に先頭レコードで表示されます。
[&No]は変数管理で取得しているのは確認しているのですが
B.wfmのNoにカーソルが行きません。

B.wfmの記述です。
手続き定義開始 フォーム::フォーム開始(長整数 &表番号)
 検索 [No]{&No},終了状態=&終了

A.wfmのNoは長整数で変数宣言してますが
B.wfmのNoはカウンタ型です 
これって関係していますか。
お願いします。 

19698 Re:イベントでの検索について教えてください 悲しげ 2003/04/02-15:04
記事番号19697へのコメント
どもっ、katsuyoshiさん
前回も類似の問題で尻切れトンボだったような気がしますが
(いや、私の勘違いかもしれません)

>B.wfmの記述です。
手続き定義開始 フォーム::フォーム開始(長整数 &表番号)
 確認 "No="+#str([No])
 検索 [No]{&No},終了状態=&終了

前回このようにして試してもらったら、&Noの中味が空だったのではありませんか?
とすれば、a.wfmで&Noに値を入力しないでb.wfmを呼び出したか、
あるいはa.wfmで宣言・取得した変数とb.wfmで使う変数の種類が異なる
(異種同名変数を使っている)のではありませんか?

後者だとすれば、かなり気づきにくいのは、フォーム埋め込みの局所変数です。
もしかして、b.wfmのフォーム定義の際に、
「変数管理」を使って局所変数として&Noを登録してませんか?
原則として、変数の種別が異なる同名変数は避けた方が(つまり別名にした方が)無難です。

19699 Re:イベントでの検索について教えてください 悲しげ 2003/04/02-15:09
記事番号19698へのコメント
>a.wfmで&Noに値を入力しないでb.wfmを呼び出したか

前回気になっていたのは、「入力後」イベントがどうのこうのと云っていた点です。
「入力後」イベントの段階では、まだ変数への値の代入は未完了(代入直前と云うべきか)だった筈です。
完了するのは、確か次の「ソース値更新」イベントあたりだったと記憶します。
19701 Re:イベントでの検索について教えてください 通りすがり 2003/04/02-20:39
記事番号19697へのコメント
代入されていると思っている(あるいは思い込んでいる)変数値を確認してみては?

>B.wfmの記述です。
>手続き定義開始 フォーム::フォーム開始(長整数 &表番号)
 確認 #STR(&No) ←ここ
> 検索 [No]{&No},終了状態=&終了

きちんと目的の&Noが拾ええているんでしょうか?
B.wfmの方でも、&Noが宣言されているような・・・・。変数管理で確認する方法もありますが…。

19702 変数値が有効かを確認して下さい 佐田 守弘 2003/04/02-22:15
記事番号19697へのコメント
katsuyoshiさん
私も悲しげさんと通りすがりさんの意見とほぼ同じです。
以下は私の推定ですが、使用している変数「&No」は、A.wfmで定義した局所変数であるため、
B.wfmでは無効なのではないかと思われます。
あるいは、後で述べる様に、イベントの共有を行っているために
変数が再定義されて値がクリアされている場合もあります。

●確認
この変数をどこで定義しているのか御自身で調べれば分るはずなのですが、
「落とし穴」という事もありますので、次の方法で確認して下さい。
方法1:B.wfmを呼び出した状態で、変数管理機能を使って、
この変数の種別と値を確認して下さい。
方法2:B.wfm上に変数「&No」をソースとするテキストボックスをどこかに作り、値を表示させて下さい。
A.wfmで入力した値になっているでしょうか。

■解説
●局所変数の有効範囲
局所変数は、そのフォーム(指定にりサブフォームも含む)内でのみ有効です。
フォーム呼び出しで呼び出すフォームに同じ名前の局所変数が定義してあっても、
別の変数として扱われますから、値は引き継がれません。

●イベントのメイン部で定義する変数
フォームで使用する固有変数などはイベントファイルのメイン部分で定義します。
しかしイベントファイルを複数のフォームで共有している時に、
変数定義があるとこの様な事が起きます。

質問の例に準じて、AとBの2つのフォームがあり、
どちらのフォームでも同じイベントファイルab.kevを共有しているとします。
そしてこのイベントファイルのメイン部で固有変数&Noを宣言していると仮定します。

この場合、フォームAで変数&Noに値を代入し、フォームBを呼び出したとします。
すると、フォームBを開く前にイベントファイルを調べ、
そのメイン部に書かれている変数宣言コマンドが実行されます。
これによって、変数&Noは再度宣言しなおされる事になり、
値はリセットされます。

これは案外と見つけにくい落とし穴です。

佐田守弘(KS-00119)

19704 確認してみました katsuyoshi 2003/04/03-04:56
記事番号19702へのコメント
悲しげさん、通りすがりさん、佐田さんありがとうございました。
悲しげさんにお世話になったイベントでまた壁にぶち当たっています。
皆さんが異口同音に言われている変数宣言ですが
[&No]はA.wfmで固有変数として宣言しており局所変数では両方のwfm(kev)ともに宣言はしていません。
また悲しげさんからの指摘についてこのイベントは「ソース値更新」であり「入力後」ではありません。

変数の拾得状況ですが
通りすがりさんからのご指導のように
B.wfmの記述に
手続き定義開始 フォーム:フォーム開始(長整数 &表番号)
 確認 #STR(&NO)←この1行を追加して拾得状況を
調べましたが確認メッセージ上にA.wfmで入力したNoが変数として表示されました。
また変数管理で確認をしましたら変数の種類で固有、
内容で入力したNoが入っていました。

>●イベントのメイン部で定義する変数
>フォームで使用する固有変数などはイベントファイルのメイン部分で
>定義します。しかしイベントファイルを複数のフォームで共有している
>時に、変数定義があるとこの様な事が起きます。
>
>質問の例に準じて、AとBの2つのフォームがあり、どちらのフォーム
>でも同じイベントファイルab.kevを共有しているとします。そして
>このイベントファイルのメイン部で固有変数&Noを宣言していると仮定
>します。
>
>この場合、フォームAで変数&Noに値を代入し、フォームBを呼び出した
>とします。すると、フォームBを開く前にイベントファイルを調べ、
>そのメイン部に書かれている変数宣言コマンドが実行されます。
>これによって、変数&Noは再度宣言しなおされる事になり、値はリセット
>されます。
>
>これは案外と見つけにくい落とし穴です。

このことはA.wfmのみ固有宣言してB.wfmでは宣言していなくても現れる現象なのでしょうか

もう少しご指導下さい。
19706 Re:確認してみました うにん 2003/04/03-09:25
記事番号19704へのコメント
>皆さんが異口同音に言われている変数宣言ですが[&No]はA.wfmで
>固有変数として宣言しており局所変数では両方のwfm(kev)ともに
>宣言はしていません。

>B.wfmの記述に
>手続き定義開始 フォーム:フォーム開始(長整数 &表番号)
> 確認 #STR(&NO)←この1行を追加して拾得状況を
>調べましたが確認メッセージ上にA.wfmで入力したNoが
>変数として表示されました。
>また変数管理で確認をしましたら変数の種類で固有、内容で
>入力したNoが入っていました。

すると、あとは検索の後で&終了を確認してみる位でしょうか。

佐田さんのご指摘は
>>質問の例に準じて、AとBの2つのフォームがあり、どちらのフォーム
>>でも同じイベントファイルab.kevを共有しているとします。

なので、
>このことはA.wfmのみ固有宣言してB.wfmでは宣言していなくても
>現れる現象なのでしょうか

両方のwfm(kev)とおっしゃっていますので、ABのwfmで別のkevになっていれば心配ありませんが。

19710 Re:確認してみました 悲しげ 2003/04/03-18:01
記事番号19704へのコメント
どもっ、katsuyoshiさん

> 確認 #STR(&NO)←この1行を追加して拾得状況を
>調べましたが確認メッセージ上にA.wfmで入力したNoが
>変数として表示されました。

なるほど、前回は
http://www.fuku3.com/~habata/kbbs/kakov9/19265.htm
のとおり、&Noの値は空だったので、ここは改善したようですね。
う〜ん、となると問題の所在がどこにあるのか?
可能なら、症状が再現できるようなテストデータを↓に挙げてみては?
http://www.fuku3.com/~habata/cgi-bin/bbs1/clip.cgi

19711 原因究明できました。 Katsuyoshi 2003/04/03-18:11
記事番号19706へのコメント
うにんさんありがとうございました。
原因がわかりました。
B.wfmの編集対象表にはフォームが3個あります。
B.wfmはそのうちの1個です。
フォームを切り替える際にその処理内容により絞込みをコマンドボタンで設定しています。
そのコマンドボタンをフォームの属性でオプションの実行コマンドの開始時に設定していました。
その開始時コマンドを解除したら検索ができました。
このことはフォーム開始イベントが動いた後にコマンドボタンの
実行コマンドが動くことで理解すれば良いのでしょうか。
同居は難しいようです。
検索用のフォームを作成したほうが良いようです。
お騒がせしました。
またお願いします。

19712 ありがとうございました。 Katsuyoshi 2003/04/03-18:20
記事番号19710へのコメント
悲しげさん


>なるほど、前回は
>http://www.fuku3.com/~habata/cgi-bin/bbs/bbs.cgi?num=19265&ope=sel&id=
>のとおり、&Noの値は空だったので、ここは改善したようですね。
>う〜ん、となると問題の所在がどこにあるのか?
>可能なら、症状が再現できるようなテストデータを↓に挙げてみては?
>http://www.fuku3.com/~habata/cgi-bin/bbs1/clip.cgi

おかげさまで少し成長させていただきました。
ほんのチョット前に投稿させて頂きましたが フォーム属性の実行コマンドと
フォーム開始イベントの関係だったようです。
検索用フォームの作成を手抜きして既存のフォームを使用しようとした結果でした。
ようやく入り口に入りました。
今作ろうとしているプログラム(?)が完成するまで面倒をみてください。
また質問させてください。お願いします。


19713 Re:原因究明できました。 悲しげ 2003/04/03-19:04
記事番号19711へのコメント
どもっ、Katsuyoshiさん

>フォームを切り替える際にその処理内容により絞込みをコマンド
>ボタンで設定しています。
>そのコマンドボタンをフォームの属性でオプションの実行コマンド
>の開始時に設定していました。
>その開始時コマンドを解除したら検索ができました。
>このことはフォーム開始イベントが動いた後にコマンドボタンの
>実行コマンドが動くことで理解すれば良いのでしょうか。
>同居は難しいようです。

なるほど。(^^;)
ところで、「フォーム開始」と「開始時実行」牡丹の両方を設定していた場合、
1)フォーム開始
2)開始時実行牡丹
の順に(両方とも)実行されます。

ま、一般的には片方だけにしておいた方が無難かと思います。

>検索用のフォームを作成したほうが良いようです。

例えばフラグ変数を立てて処理を分岐させるようにした上で、
フォームを兼用できないことはないけれども、慣れるまでは
別フォームを使った方が簡単でしょうね。

19714 Re:ありがとうございました。 悲しげ 2003/04/03-19:12
記事番号19712へのコメント

ところで、前回&Noの値が空だった理由は何だったですか?(後学のために)
19716 笑わないでください。 katsuyoshi 2003/04/03-19:40
記事番号19714へのコメント
悲しげさん

いつもNoは Nとo の組み合わせではなくATOKのクリックパレットから
b使用していたのですが桐では認識してくれないので最近では
Nとoを組み合わせてNoとしています。
前に作ったTBLの項目名を全部修正したつもりでしたが直りきっていなかったため
&Noの値が空でした。お騒がせしました。
ところでなぜ桐では認識してくれないのでしょうか?
19717 笑って余談 悲しげ 2003/04/03-20:04
記事番号19716へのコメント
余談ですいませんが、笑ってコメントします。(^^;)
「ナンバー」を現わすための「avはjis 2271(シフトjis 8782)でして、
確かに機種依存文字(マックでは通用しない)ですが、桐で認識してくれないってことはなかったと思います。(?_?)

19726 Re:笑って余談 Katsuyoshi 2003/04/04-15:18
記事番号19717へのコメント
悲しげさん ありがとうございました。
>余談ですいませんが、笑ってコメントします。(^^;)
>「ナンバー」を現わすための「avはjis 2271(シフトjis 8782)でして、
>確かに機種依存文字(マックでは通用しない)ですが、桐で認識してくれ
>ないってことはなかったと思います。(?_?)
>
ラベルの記述は使用できますがテキストのオブジェクト名では消えてしまいます。
どこかに設定があるのでしょうか?

検索用のフォームを作成すると言いましたがよく考えれば
データを持ってくるだけなのでB.wfmを開くことなく編集対象表の
B.tblを開いて検索をかければ良いと思いA.wfmのイベントの

フォーム呼び出し B.wfm を

表 B.tbl
 検索 [No]{&No},終了状態=&終了
 if(&終了=-1)
  確認 "No"+#STR(&No)+"のデータは存在しません"

else if(&実行リターン=1)
行訂正 終了状態=&終了状態\・・・・・・

としましたがうまく動いてくれません。
もう少しお付き合いください。
お願いします。

19733 Re>オブジェクト名に使えない文字 悲しげ 2003/04/04-23:59
記事番号19726へのコメント
そろそろ#イケナイ#パターンになって来たような・・・・。
元はと云えば私も悪いのですが(^^;)、ツリーのテーマが分散して来ています。
なかで、#19726はふたつのことを質問しており、この傾向が続くともっともっと散漫化しそうな・・・・。(^^;)
とりあえずは、せめてひとつづつに分けてコメントします。

>ラベルの記述は使用できますがテキストのオブジェクト名では
>消えてしまいます。

まず、質問はなるべく正確に書くべきですね。(^^;)
#19716で曰く

>>からb使用していたのですが桐では認識してくれないので
>>(中略)
>>前に作ったTBLの項目名を全部修正したつもりでしたが

この記述から実は「項目名」についての言及ではない、と読み取ることは何人たりとも困難であると云うことです。(^^;)
問題の所在は、そうではなくて、オブジェクト名に使えない文字があると云うことですね
(これはテキストオブジェクトに限らず)。このことは私も経験しています。確かに使えない文字があります。
で、私は#経験的に#使えない文字は使わないようにしているのですが、
ところで、このことはヘルプ等のどこかに記載があるのでしょうか?
ご承知の方、この機会に私にも教えて下さい。
(もうひとつの質問は別稿でコメントします)

19734 Re>もうひとつの質問は主旨不明 悲しげ 2003/04/05-00:01
記事番号19726へのコメント
>表 B.tbl
>検索 [No]{&No},終了状態=&終了
>if(&終了=-1)
> 確認 "No"+#STR(&No)+"のデータは存在しません"
>else if(&実行リターン=1)
> 行訂正 終了状態=&終了状態\・・・・・・
>
>としましたがうまく動いてくれません。

どのようにうまく動かないのか、そもそもこの記述で何をしたいのかをを書かないと、
これまた何人たりともコメントは困難だと思います。(^^;)

大胆に推測すれば、次のような感じかもしれません。
-------------------------------------
/*↓編集表はa.tblとなっている状態で*/
表 "b.tbl",索引名="No順"
検索 [No]{&No},終了状態=&終了
if(&終了=-1)
 確認 "No"+#STR(&No)+"のデータは存在しません"
 終了 表 編集対象表
 編集表 "a.tbl"
*else if(&実行リターン=1) ←判断すべき変数は&終了では?
* 行訂正 終了状態=&終了状態・・・ ← b.tblを行訂正するのですか?
else
 &なんとか=[なんとか],&かんとか=[かんとか]
 終了 表 編集対象表
 編集表 "a.tbl"
 行訂正 [なんとか]=&なんとか,[かんとか]=&かんとか,・・・・
end
-------------------------------------
ま、外した可能性の方が高いですが(^^;)、そもそも何をやりたいのかが
かつよしさんの頭の中以外には表出されていないので・・・・。(^^;)
このあたりは桐の知識云々の問題ではありません。ともかく他者に判るように書く努力をしませう。

19735 別ツリーで出直します katsuyoshi 2003/04/05-01:05
記事番号19734へのコメント
悲しげさんありがとうございます。
>
>どのようにうまく動かないのか、そもそもこの記述で何をしたいのかを
>を書かないと、これまた何人たりともコメントは困難だと思います。(^^;)

>ま、外した可能性の方が高いですが(^^;)、そもそも何をやりたいのかが
>かつよしさんの頭の中以外には表出されていないので・・・・。(^^;)
>このあたりは桐の知識云々の問題ではありません。ともかく他者に判る
>ように書く努力をしませう。

自分の頭の中を文書にすることは難しいです。
ましては他の人から理解して頂くようにするには。
申し訳ありませんでした。
質問の中身が当初と変わってしまったようなのに
ごっちゃにしてしまいました。
別ツリーに整理して出直します。
もう1回お願いします。

戻る