過去の桐井戸端BBS (桐ver.8)
16267 メイン・サブフォーム間でデータの引渡しは簡単ですか YATA 2002/06/06-17:08
メインフォームに2つのサブフォームを組み込んで、製作中のものがあります
メインは良いとしてサブですが、一つは項目が2つの簡単な一覧表です[コード][内容]からなる
”状況表.TBL”もう一つはグラフを表示しており、
このフォーム自体は全くやりたい処理には関係有りません。
さてやりたいことですが、”状況表.TBL”の一覧表サブフォームで
フォーカスしている行の[コード]と[内容]をメインフォームの[番号][内訳]に代入したいのです。
この場合一括処理で処理対象の表を随時切替ながら変数と代入を使う方法が思い浮かぶのですが、
もしかしたらメインフォーム上にコマンドボタンを配置して処理することが可能なのか教えてくださいますようお願いいたします。
16270 Re:メイン・サブフォーム間でデータの引渡しは簡単ですか 佐田 守弘 2002/06/06-23:52
記事番号16267へのコメント
YATAさん
一般的には、メインフォームとサブフォームの編集対象表は、売上データなどに喩えて言えば、
メインフォーム側では1件毎の売上、サブフォーム側では、
その売上の明細といった様に、何らかの関係のある表どうし(同じ表の場合もあり)を表示して使う事が多いと思います。
この様な場合だと、サブフォームで編集している項目値をメインフォームの項目に書き込むといった処理は余り見掛けません。
(グループ値がメインフォーム化さぶフォームに引き渡されるのはあります)

しかし御質問の件は、良く理解できていないためかも知れませんが、メインフォームとサブフォームの表は、
全体と内訳といった形での関連性のある表ではなさそうですね。
もちろん不可能な訳ではありません。

良く理解できずにいる点としては、事によると、表引き入力の様に、
サブフォームで一覧から選択し、それをメインフォームに書き込むような事を使用としているのかとも見受けます。
もちろん不可能ではありません。

●サブフォームの表からメインフォームの表にデータを受け渡すには
上記に書いたような理由で、フォームそのものの機能として、サブフォームの表の値を
メインフォームの表に引き渡す機能はありません。
ですからこの処理は、イベントなどを使って変数を経由して引き渡す事になります。

方法の考え方は普通の一括処理などと変わりはなく、
 編集表 <サブフォームの編集対象表>
 代入 &コード=[コード],&内容=[内容]
 編集表 <メインフォームの編集対象表>
 行訂正 [番号]=&コード,[内訳]=&内容
の様な形でできると思います。

この場合には、2つの表は異なる様なので、編集表には直接表明を指定すれば良いかと思います。
しかしもし同じ表だとすると、それぞれのフォームが編集している表(同じ表でも)の表番号で指定する必要があるでしょう。
その場合には、「#is表」関数を使って、予めそれぞれの表番号を調べておく必要があります。

佐田守弘(KS-00119)
16272 Re:イベントの一般手続きではダメですか 今村 誠 2002/06/07-00:13
記事番号16267へのコメント
こんばんは、メインにコマンドボタンを作り一般手続きを書いてはいかがでしょうか。
変数は文字列で宣言済み@フォームは半角です。
&sub2wfm="sw状況表",&obj1="tコード",&obj2="t内容",&obj3="番号",&obj4="内訳"
method &sub2wfm.&obj1.ソース値取得(&obj1, 0 ) /* サブフォーム*/
method &sub2wfm.&obj2.ソース値取得(&obj2, 0 ) /* の編集行の値*/
method ハンドル = &hwindow,戻り値=&処理,@フォーム.更新モード設定(2)
項目値代入 &obj3=&obj1  /* 数値の場合ソース値取得(&昭和年)にする*/
項目値代入 &obj4=&obj2
method ハンドル = &hwindow,戻り値=&処理,@フォーム.更新モード設定(0)

16273 Re:メイン・サブフォーム間でデータの引渡しは簡単ですか 悲しげ 2002/06/07-01:47
記事番号16267へのコメント
どもっ、Yataさん、

>一覧表サブフォームでフォーカスしている行の[コード]と[内容]をメインフォ
>ームの[番号][内訳]に代入したいのです。

目的がいまいち判らないので、他にもっとうまい方法があるかもしれませんが、
このことだけなら「レコード移動」イベントを使えば簡単に実現できると思います。
なお、用語としては「フォーカス」しているのではなく、
処理対象レコードもしくはレコードポインタとか云うと思います。特に一覧表や
伝票フォームでは「フォーカス」と云うと、どちらかと云うと横の関係、
すなわち項目を指すことが多いです。

さて、メイン&サブフォームがきちんと設定されているなら、サブフォームについて、
イベントタブから「レコード移動」をダブルクリックしてから、kevには次のように記述します。
(なお、メインフォームの対象表を"main.tbl"と仮称しておきます)
--------------------------------------------------------------
手続き定義開始 フォーム::レコード移動(長整数 &行番号,・・・・・・
 var 長整数,{&code},文字列{&内容}
 &code=[コード],&内容=[内容]
 編集表 "main.tbl"
 行訂正 終了状態=&実行リターン,[番号]=&code,[内訳]=&内容
 編集表 "状況表.tbl"
手続き定義終了
--------------------------------------------------------------

ps
「コマンドボタン」じゃなくてすいません。(^^;)

16297 Re:メイン・サブフォーム間でデータの引渡しは簡単ですか YATA 2002/06/12-10:21
記事番号16267へのコメント
みなさんご回答有難うございました.佐田先生が、言われている内容のとおりです。
>良く理解できずにいる点としては、事によると、表引き入力の様に、サブフォームで
>一覧から選択し、それをメインフォームに書き込むような事を使用としているのか
>とも見受けます。もちろん不可能ではありません。
それで、結論としては変数を使用して二つの表間を編集対象切替をして置換することにしました。

戻る