過去の桐井戸端BBS (桐ver.7)
1893 前項目の値により入力範囲を制限したい 小川 1999/5/28-16:04
前項目の値により入力範囲を制限したいのですが、
出来るものでしょうか?

例:表「組合せ許可マスタ」 [項目A] [項目B]
01 001
01 002
01 003
02 001
02 003
03 002
03 003
03 005
 の様な組合せのマスタテーブルを持っています。

 入力表の[項目A]に"02"が入力されたら[項目B]に入力できる
 のは"001","003" に限定したいのです。
 できれば、[項目B]の表引きには"001","003"のみ表示できると
 なお嬉しいのですが
 
一括の「項目訂正」ならばできそうな気がするのですが、
「行挿入」時にはどうすればよいのでしょう?
ベストは会話処理で出来るといいのですが...

どなたか教えて下さい。
1895 Re: 悲しげ 1999/5/28-18:57
記事番号1893へのコメント
どもっ、小川さん、
桐ver5なのか7.*なのかはわかりませんので、なるべく共用できる形でコメントします。

> できれば、[項目B]の表引きには"001","003"のみ表示できると
> なお嬉しいのですが

ここで云う「表引き」とは関数の#表引きのことを指しているのだと思われますが、
値条件(項目属性)の表引きで代用できませんでしょうか?

  比較項目 項目A
  表引き表 組み合わせ許可マスタ
  使用索引 項目Aについて設定したもの
  検索項目 項目A
  値項目  項目B

このように設定しておくと、入力表で、例えば「02」と入力すると表引き小窓が開いて、
カーソルが下記★印のところに位置しますから、
「001」や「003」を選びやすくなると思います。
>例:表「組合せ許可マスタ」 [項目A] [項目B]
>01 001
>01 002
>01 003
>02 001  ←★
>02 003
>03 002
>03 003
>03 005
ただ、これだと検索しやすくはなりますが、限定はできません。
会話処理で限定するには、同じく項目属性で「項目制約式」をシコシコ書かなければならない
かもしれません。要素が少なければそれでもかまわないかもしれませんが、
多い場合はあまり現実的ではありません。
が、要素が多ければ逆に、この表引きもより効果的だと思えます。

一括処理でなら、

1)入力表で[項目A]に入力された値を変数&aに取得
2)編集表をマスター表に移す
3)マスター表の[項目A]について&aで絞り込み(選択)
4)処理行指定などでレコードを指定
5)当該レコードの[項目B]の値を変数&bに取得
6)入力表に戻って、行訂正 [項目B]=変数&b で書き込む

のようなやり方が考えられます。これだと3)の時点で限定され
ますから、使い勝手はよくなると思います。

ちなみに、一括処理に「項目訂正」と云うコマンドはなかったと思います。(^^;)
「行挿入」の場合も基本的には同じです。
一括の場合は「行挿入」または「行追加」した時は、当該レコード位置にレコードポインタを
戻してから「行訂正」させます。
初めに述べた会話処理の表引きの場合なら、行訂正・項目訂正・
行挿入・行追加の全てに共通して使えます。
1908 Re: 小川 1999/5/31-11:39
記事番号1895へのコメント
悲しげさん、詳しい解説有り難うございました。

> 会話処理で限定するには、同じく項目属性で「項目制約式」をシコ
> シコ書かなければならないかもしれません。要素が少なければそれ
> でもかまわないかもしれませんが、多い場合はあまり現実的ではあ
> りません。

要素数も多いですし、実はこの後[項目A][項目B]の入力値により[項目C]、
その入力値により[項目D]まで4段階の入力規制をしたいので、
一括処理の方が現実的みたいですね。

> 1)入力表で[項目A]に入力された値を変数&aに取得
> 2)編集表をマスター表に移す
> 3)マスター表の[項目A]について&aで絞り込み(選択)
> 4)処理行指定などでレコードを指定
> 5)当該レコードの[項目B]の値を変数&bに取得
> 6)入力表に戻って、行訂正 [項目B]=変数&b で書き込む

これなら何段階でもいけそうですし...

有り難うございました。また、困ったときはお願いします。

戻る