過去の桐井戸端BBS (桐ver.8)
10701 複数のwfmでkevを共用している場合「そのkevを現在どのwfmから使っているか」を知る方法 悲しげ 2001/04/05-13:55
複数のwfmでkevを共用している場合に、「そのkevを現在どのwfmから使っているか」を知る方法について、
私の試行錯誤の跡をメモしておきます。
----------------------------------------------------------
#ファイル名(#フォーム属性(1),3)
----------------------------------------------------------
これで使用wfmを取得できる場合とできない場合がありました。
できるのは、編集対象表があるwfmに限られるようです。

では、編集対象表が無いwfmの場合はどうするか?
試行錯誤の末、wfm名自体はうまいこと取得できず、私は次のようにwfmの「表題」
(表じゃないから標題が正しいように思うが)から判断するようにしました。
(ちなみにこれは一昨日のことです)
例えば、wfmのオプション/表題にて次のようにしておきます。
 期間1a.wfm……1a 年月日〜年月日指定
 期間1b.wfm……1b 年月〜年月指定
 期間2a.wfm……2a 年月日単独指定
 期間2b.wfm……2b 年月単独指定
※これは期間指定用のwfmの例ですが、テキストソースは全て変数にしてあるので、編集対象表が無い。

そして、例えば
------------------------------------------------------------------
名札 メイン
 var 文字列{&Flag}


手続き定義開始 フォーム::フォーム開始(長整数 &表番号)
 var 文字列{&表題}
 オブジェクト操作 &表題=@フォーム.フォーム表題
 &Flag=#sstr(&表題,1,2)
 /*↑ 1a=期間1a.wfm、1b=期間1b.wfm、2a=期間2a.wfm、2b=期間2b.wfm*/
 method @フォーム.更新モード設定(2)
手続き定義終了
------------------------------------------------------------------
と云う訳で、必要な場合には、このフラグの値によって以下の処理をケース分けしています。

でも、他にうまい方法があればこの際教えて下さい。
10703 Re:kev共用に際してwfmの取得は 尾形 2001/04/05-14:43
記事番号10701へのコメント
どうも

ウィンドウ情報取得 &hwindow,表名=&比較式,フォーム名=&STR
では?
10704 Re:kev共用に際してwfmの取得は 悲しげ 2001/04/05-15:23
記事番号10703へのコメント
どもっ、尾形さん
おお、これでOKです。1行で済んじゃった。(^^)v

こんなふうにしました。

 var 文字列{&使用フォーム名}
 ウィンドウ情報取得 &hwindow,フォーム名=&使用フォーム名
 &Flag=#ファイル名(&使用フォーム名,2)

10705 :kevの共用は 佐田 守弘 2001/04/05-16:21
記事番号10704へのコメント
悲しげさん
確かにイベントファイルは複数のフォームで共用できるのですが、特別な事情がない限り、私は
「フォームとイベントは1対1で対応させる」
を大原則とした方が良い様な気がしています。

多分悲しげさんクラスの力量と試行錯誤能力があれば大丈夫だとは思うのですが、
一般の人にこれをさせるのはちょっと怖いです。

【私の失敗談】
住所録管理のシステム回りでの失敗談です。
メイン&サブフォーム形式のフォームで、サブフォームでのイベントは大した量ではないから、
サブフォームのイベントをメインフォームの中に作ってしまいました。
つまり、メインフォームとサブフォームで1つのイベントを共有している形です。

●始めはエラーは起きなかった。
住所録で郵便番号入力を行うために、予め郵便番号表を開いております。
この郵便番号表を開くのは、イベントファイルの先頭部分に「表」コマンドを記述すればよい訳です。
そしてその方法で特に問題なく動いてました。

●表の索引を指定したらエラーが発生した。
しかし住所録の表の表引きの速度を上げるため、表の索引を使用しようとしたところ、エラーが発生しました。
具体的にいえば、
 表 "ZIP.TBL"
の時にはエラーが起きなかったのに、
 表 "ZIP.TBL",索引名="ZIP"
とするとエラーになる訳です。

●原因はイベントファイルの共有にあった
並べ替えを行う事に間違いがあるのかと、いろいろチェックしたのですが、原因はイベントファイルの共有でした。
つまり、メインフォームを開く時に表コマンドが実行され、ZIPが開かれます。
しかしサブフォームが開かれる時にも、同じイベントが実行されるため、
既に開かれている表をもう一度開こうとしてエラーになったのでした。
なお、索引を使わない時には、開かれている表に対して表コマンドを実行すると、
編集表の指定になるので、エラーにはならなかったのでした。

●結論
それ以降、私はどの様な小さいイベントでも、必ずフォーム1つにイベント1つを作り、共有する事は止めました。
イベントハンドラだけのイベントファイルなら大丈夫ですが、メイン部分があるイベントファイルは、要注意です。
分かっていれば大丈夫なのかもしれませんが、誤りを発生する余地をなくす事も大切かと考えます。

佐田守弘(KS-00119)

戻る