過去の桐井戸端BBS (桐ver.9)
25041 別のフォームで検索して、本フォームに入力したい しお 2004/02/24-12:29
会員が、沢山ある教室(講座)のなからから選んで受講するものを管理したくて
作成していますが、いきづまってしまいました。

フォームA、B、Cがあり、それぞれにA.tbl B.tbl C.tblがあります。
項目は概略で

フォームAには[教室ID][教室名][定員]
フォームBには[教室ID][会員ID]
フォームCには[会員ID」[氏名]
があります。

フォームAの教室を選択し、受講生入力のボタンを押すと、フォームBに飛ぶところまでは、
以前ご教授頂いた方法でやっていますが、フォームBで、受講生を入力したいのですが、
それぞれのレコードごと検索ボタンを付け、フォームCのような検索画面から会員を検索し、
選択した会員を登録ボタンでフォームBに入力したいのです。
また、定員を超えた場合に注意を促す表示を出したいのですが、これもいまいち解りません。
さらに、フォームAに現在の受講生の人数を表示させたいのですが、これはさっぱりわかりません。
いつも質問ばかりで恐縮ですが、どなたかご教授頂けないでしょうか?
よろしくお願いします。

25060 Re:別のフォームで検索して、本フォームに入力したい Mao 2004/02/24-18:03
記事番号25041へのコメント
色々方法はあると思いますが、私の方法


>フォームCのような検索画面から会員を検索し、選択した会員を登録ボタンで
>フォファームBに入力したいのです。

【会員IDの取得】
フォームB、会員IDオブジェクトに入力前イベントを使って
(&idの変数宣言は予めしているものとします。)

手続き定義開始 t会員ID::入力前(参照 文字列 &編集文字列)
 フォーム呼出し "フォームC.WFM"
 &編集文字列= #str(&id)
手続き定義終了

フォームC
 検索を実行して該当の会員IDにジャンプします。
キーダウンイベントでEnterキーで&idに該当会員IDを格納

手続き定義開始 フォーム::キーダウン(長整数 &仮想キーコード,長整数 &スキャンコード,
長整数 &フラグ,参照 長整数 &処理中止)
if (&仮想キーコード=13)
  &id=[会員ID]
 メソッド呼び出し  @cb.実行( )←このコマンドボタンでフォームCを閉じます。
end
手続き定義終了

以上で、フォームB会員IDに検索した会員IDが書き込まれます。
 
>さらに、フォームAに現在の受講生の人数を表示させたいのですが、これはさっぱり

【フォームBに表示】
A.tblをメインB.tblをサブにしてメイン&サブフォームを作り、サブフォームに件数を表示させてはいかがでしょうか?
25064 Re:別のフォームで検索して、本フォームに入力したい アックン(=^・^=) 2004/02/24-19:24
記事番号25041へのコメント
しおさん、こんにちは。
見本フォームをアップしました。A.wfmを起動してください。
「選択した会員を登録ボタンでファームBに入力したい」ニーズに対応させています。

なお、前回のQ&Aの続きのようですが、前回使っていた"区分"、"明細"等の言葉が
今回はどこでどのように使われているかが不明のため、それらは使わないようにしています。
イベントの記述の一部を、言葉を適当に変更しました。

>また、定員を超えた場合に注意を促す表示を出したいのですが、これもいまいち解
 Bフォームに表示したいのですね?
定員を越える前に知らせる方がいいと思いますが、ぼくはまだ考えていません。(^^;

>さらに、フォームAに現在の受講生の人数を表示させたいのですが、これはさっぱり
 同じく、まだ考えていません。(^^;
25081 Re:別のフォームで検索して、本フォームに入力したい しお 2004/02/25-13:19
記事番号25064へのコメント
Maoさん、アックン(=^・^=)さんありがとうございます。
お陰様で、フォームA→B←C→Bの入力が出来るようになりました。
ご教授ありがとうございます。


その後、定員オーバーに関する処理を自分なりに考えてみました。


一つはフォームBのフッタ部分に、

#条件選択(#件数([会員番号])≦#数値(#表引き([教室ID],=,"教室.tbl",[教室ID],[定員])),#件数([会員番号]),
#件数([会員番号])+1>#数値(#表引き([教室ID],=,"教室.tbl",[教室ID],[定員])),"定員オーバーです")

数式を入れてみました(みっともない数式ですみません^^;)
これで、数値を目で見ながら確認は出来るようになりました。


もう一つは、行挿入処理後、現在の件数を調べ、定員と比べて多い場合、警告をだすというのを考えました

手続き定義開始 フォーム::行挿入終了(長整数 &明細番号,長整数 &モード)
 代入 &現在受講 = #件数([会員番号])
 代入 &定員 = #表引き([教室ID],=,"T4教室.tbl",[教室ID],[定員])
 if &現在受講<&定員
(ここには、定員以下ならOKだ!といいった処理をしたいのです)
else
   メッセージボックス 定員をオーバーしています ,定員をオーバーしています , アイコン=!, ボタン指定=1
   
 end

手続き定義終了

もちろん、こんな処理が動くわけなく(^^;
悩んでおります。
お知恵をお借りできませんか?
25086 Re:別のフォームで検索して、本フォームに入力したい Mao 2004/02/25-16:25
記事番号25081へのコメント
教室.tbl
受講生.tbl

だとして

教室.tblをメインフォーム(イベントファイル「教室.kev」)
受講生.tblをサブフォーム(イベントファイル「受講.kev」)
からなるメイン&サブフォームを作成したとします。

○メインフォームのオブジェクト名
 教室ID
 教室名
 定員
○サブフォームのオブジェクト名
 フォーム明細部
  会員ID
  氏名
  申込年月日
 フォームフッタ部
  申込件数(ソース:#件数([会員ID])

として

**************************

受講.kev

**************************

名札 メイン
変数宣言 長整数,{&id,&kazu,&mkazu}


手続き定義開始 会員ID::入力前(参照 文字列 &編集文字列)
 メソッド呼び出し ハンドル = &hwindow ,@定員 .ソース値取得( &kazu ,0 )
 メソッド呼び出し @申込件数.ソース値取得( &mkazu ,0 )

 if (&kazu=<&mkazu)
  確認 "定員を超えました"
 end

手続き定義終了

***************************

これでは、ダメでしょうか?

確認後、行挿入等を中止したかったのですが、そこまでは出来ませんでした。


しおさんは、
フォームの行挿入終了イベントで記述していますが、定員オーバーしたら、
後は入力しないのでしょうから入力前イベントにしてみました。

25130 Re:別のフォームで検索して、本フォームに入力したい しお 2004/02/26-15:29
記事番号25086へのコメント
Maoさんありがとうございます。
無事できました。
お陰様で定員を超えようとすると警告が出るようになり、とても感謝です^^

今回の最後の問題なのですが、フォームA(教室の一覧表)に定員と現在の受講生数を表示させたいのです、
以前メインとサブフォームとのご助言を頂きましたが、できれば一覧表示で確認したのです。

そこで考えてみたのですが、
受講生の入力が終わったあと、教室ごとに集計して、教室の一覧に併合すればできるかなって思いましたが、
毎回、ソート、集計、併合という処理が起こってしまって重くなりそうです。

なにかいいアイデアはないでしょうか?

25132 Re:別のフォームで検索して、本フォームに入力したい Mao 2004/02/26-17:05
記事番号25130へのコメント
集計して併合する処理にそんなに時間がかかるとは思えませんが?

それと、

【書き込みに際してのお願いと便利な使い方】に記載しているとおり

**ご質問は1回の投稿につき1つ**

にした方がよろしいかと思いますが。

25136 Re:別のフォームで検索して、本フォームに入力したい Mao 2004/02/26-18:10
記事番号25130へのコメント
どの順番でフォームを開いているか判断出来ませんでしたので、以下一例として書きます。

教室.tbl(フォーム:教室.wfm(一覧表形式) イベントファイル:教室.kev)
受講生.tbl(フォーム:受講.wfm(教室IDをグループとする伝票形式) イベントファイル:受講.kev)

○フォームの開き方
 ◎教室.wfm を開く
 ◎申込を入力したい教室名等にフォーカスを移す
 ◎受講.wfmを開くコマンドボタンを押下
   
の順として

********************************
教室.kev
********************************

変数宣言 長整数,{&教室ID,&申込数}

手続き定義開始 受講開コマンドボタン::マウス左クリック(長整数 &マウス位置[2],長整数 &明細番号,長整数 &フラグ,
参照 長整数 &処理中止)

&教室ID=[教室ID]
フォーム呼出し ”受講.WFM”

*** 受講.wfmを閉じて帰って来たときに受講申込数を書換

メソッド呼び出し @フォーム.更新モード設定( 2 ) ←教室.wfmを訂正モードにしてみました? 
項目値代入 [受講申込数]=&kazu
メソッド呼び出し @フォーム.更新モード設定( 0 ) ←上で訂正モードにしたので表示モードにしました? 
手続き定義終了


********************************
受講.kev
********************************

名札 メイン



手続き定義開始 フォーム::フォーム開始(長整数 &表番号)
 グループ検索 {[教室ID]=&教室ID},終了状態=&flg
 条件 (&flg=0) グループ追加 {[教室ID]=&教室ID }
手続き定義終了

手続き定義開始 フォーム::フォーム終了()

*** 受講.wfmフッタ部の件数を表示するオブジェクトの値を変数「&申込数」に代入
 メソッド呼び出し @件数.グループソース値取得( &申込数, 0 )

手続き定義終了

********************************

他のイベントは、省略しました。

以上参考までに

25137 Re:別のフォームで検索して、本フォームに入力したい Mao 2004/02/26-18:13
記事番号25136へのコメント
変数名間違ってました。

>項目値代入 [受講申込数]=&kazu

項目値代入 [受講申込数]=&申込数

が正解ですダス。
25138 Re:別のフォームで検索して、本フォームに入力したい 悲しげ 2004/02/26-19:06
記事番号25136へのコメント
Maoさん wrote

>メソッド呼び出し @フォーム.更新モード設定( 2 ) ←教室.wfmを訂正モードにしてみました? 
>項目値代入 [受講申込数]=&kazu
>メソッド呼び出し @フォーム.更新モード設定( 0 ) ←上で訂正モードにしたので表示モードにしました? 

この部分は、元々は表示モードのようですから、

 行訂正 [受講申込数]=&なんとか

のようにすれば1行で済みます(表示モードのままで)。

25164 Re:別のフォームで検索して、本フォームに入力したい Mao 2004/02/27-08:44
記事番号25138へのコメント
>>メソッド呼び出し @フォーム.更新モード設定( 2 ) ←教室.wfmを訂正モードにしてみました? 
>>項目値代入 [受講申込数]=&kazu
>>メソッド呼び出し @フォーム.更新モード設定( 0 ) ←上で訂正モードにしたので表示モードにしました? 
>
>この部分は、元々は表示モードのようですから、
>
> 行訂正 [受講申込数]=&なんとか
>
>のようにすれば1行で済みます(表示モードのままで)。
>

ナイスなフォロー有難うございます。
何か変だなと思っていました。

なんせ、基本がないもので、その時の思いつきでいつも作成しています。
「動けばいいや」主義でやってます。

なもんで、同じようなシステム、昨日と今日作るのでは、
イベント等の書き方が全然違ってしまうこともタビタビ。

また、よろしくお願いします。
25203 Re:別のフォームで検索して、本フォームに入力したい しお 2004/03/01-17:09
記事番号25132へのコメント
申し訳ありません。
ついいくつも質問してしまいました。以後注意致します。


25204 ありがとうございました。 しお 2004/03/01-17:12
記事番号25164へのコメント
イベント処理の理解がいまいちのため、
全てを理解出来ないのですが、お陰様で出来ました。
まだまだ、勉強不足ですので、今後もよろしくお願いします。

戻る