過去の桐井戸端BBS (桐ver.9)
28907 ある項目を入力した時だけ入力可能とするようにしたい おぎの 2005/02/03-16:59
いつもこちらでお世話になっています、おぎのです。

アンケートハガキの入力で、行制約を使っています。

 項目名      データ型
[職業]      数値
[職業(その他)] 文字列

このような項目の時[職業(その他)]には、[職業]で[その他]の番号を入力した時のみ入力可能としています。
これはヘルプを見て
*その他の番号は「5」
([職業(その他)] .and [職業]=5) .or (.not [職業(その他)] .and [職業]<>5)
できたのですが、

 項目名      データ型
[旅行先]     文字列
[旅行先(その他)]文字列
*その他の番号は「12」
このような項目の時、[旅行先]は複数回答で数字と区切りの「.」が入ります。
[旅行先(その他)]には[職業]の時と同じように、「その他」の番号を入力した時だけ入力可能にしたいのですが、
[職業]で使った式ではダメでした。

[旅行先]には、単数回答の時もあります。
[旅行先(その他)]の制約式を教えて下さい。

「その他」の番号とは、常にその項目内で一番最後(大きい)の数字です。
よろしくお願いします。
28915 Re:ある項目を入力した時だけ、入力可能とする行制約式について 宮城 2005/02/03-19:37
記事番号28907へのコメント
おぎのさん、こんにちは。

表編集で頑張りたいのでしょうが、行制約ではあまりにもかったるいと思います。
フォーム使って kev書いたほうがはるかに使い勝手はいいのでこのさい挑戦されてはいかがですか。

サンプルをアップしておきました。LZHの解凍できますよね?

その他は適当に"9"としています。ソース値更新イベントで[旅行先]に "9"が含まれていたとき、
画面表示を "1"(表示する)にします。
いったん入力された"9"が間違いだったということもあるわけですから"9"が含まれていない場合は
画面表示を "0"(表示しない)に戻します。

(ホントはここで[旅行先(その他)]もクリアしておくべきです。忘れてました。m(__)m)

これはレコード単位に制御しないといけないので、すでに複数レコードが登録されている場合、
フォームが立ち上がるとき、今いるレコードの値に従って表示する・しないを決める必要がありますね。
それから、別のレコードに移ったときも同様ですね。

フォーム開始・レコード移動のチェックを外したときどういう動きになるかを試してみてください。


28916 Re:ある項目を入力した時だけ、入力可能とする行制約式について 宮城 2005/02/03-19:42
記事番号28915へのコメント
「ソース値更新」は、テキスト「t旅行先」のイベント、「フォーム開始」「レコード移動」です。
28917 Re:ある項目を入力した時だけ、入力可能とする行制約式について 宮城 2005/02/03-19:44
記事番号28916へのコメント
まちがい。

「ソース値更新」は、テキスト「t旅行先」のイベント、「フォーム開始」「レコード移動」はフォームのイベントです。

28961 Re:ある項目を入力した時だけ、入力可能とする行制約式について おぎの 2005/02/07-13:24
記事番号28915へのコメント
宮城さん、コメントありがとうございました。

私はいつも表編集を使っているため、フォームの利用経験は皆無です。
そのため、何をどうやればいいのかが全く分かりません。
これを機会に使いこなせるようになればいいなと思います。
表編集ばかりでは桐の豊富な機能がもったいないですからね〜。

こんな私なので、上記コメントで教えていただいた内容も、
どのことを指しているのかさえわかりませんが、
マニュアルなどを読みつつ頑張ってみます。

そんなわけで、内容に対するコメントができませんので、ご了承下さい。

28970 Re:ある項目を入力した時だけ、入力可能とする行制約式について アックン 2005/02/07-18:40
記事番号28907へのコメント
おぎのさん、こんにちは。
行制約を使うと、行訂正時に身動きがとれなくなることがありますが、
それはさておき、下の式で試してください。

・項目[旅行先(その他)]
( #文字位置([旅行先],"12") .and[旅行先(その他)] ) .or( .not#文字位置([旅行先],"12") .and.not[旅行先(その他)] )

説明
おぎのさんの項目[職業(その他)]の行制約式は次の通りです。

([職業(その他)] .and [職業]=5) .or (.not [職業(その他)] .and [職業]<>5)

少し書き方を変えてみます。結果は同じです。

( [職業]=5 .and[職業(その他)] ) .or( .not[職業]=5 .and.not[職業(その他)] )

この書き方を項目[旅行先(その他)]にあてはめると次のようになります。

( [旅行先]="12" .and[旅行先(その他)] ) .or( .not[旅行先]="12" .and.not[旅行先(その他)] )

さらに、[旅行先]が複数回答時( 例 : 5.12 ) に 12 が含まれる場合を想定します。
ここでは文字位置を返す関数を使ってみます。

 #文字位置([旅行先],"12")

この関数は、"12" が含まれるときは 1 以上の値 を返し、
含まれないときは、0 を返します。
つうわけでできあがりの式はこうなります。

( #文字位置([旅行先],"12") .and[旅行先(その他)] ) .or( .not#文字位置([旅行先],"12") .and.not[旅行先(その他)] )

しかしなあ・・・・・ 120 なんてタイプミスされたら・・・・。わやや(^^;今気づいた。。。
28985 Re:ある項目を入力した時だけ、入力可能とする行制約式について おぎの 2005/02/08-11:08
記事番号28970へのコメント
アックンさん、コメントありがとうございました。

教えて頂いた式で、複数回答の場合の対応が出来ました。

>しかしなあ・・・・・ 120 なんてタイプミスされたら・・・・。わやや(^^;今気づいた。。。

確かに、試してみるとエラーにならずにそのまま次に進んでしまいますね。
でも、これは校正で引っかけることにします。
本当は、数字の範囲を指定するなどして、(例えば)1〜12までの数字と区切りの「.」のみを入力可能にしたいところですが、
単数回答は(データ型が数値なので)出来ても、複数回答では出来ませんでした。

戻る