過去の桐井戸端BBS (桐ver.9)
25031 カード形式のフォーム画面で、NOを入力したら他の項目の値も一発で表示できるようにしたい まだらぼけ 2004/02/23-21:15
カード形式のフォーム画面で、NOを入力したら他の項目の値も即表示できるようにするには、
どのような設定をすればいいのでしょうか。
どなたかお教え下さい。
このフォームで使用するTBL以外に、表引き用の住所録ファイルがあります。
25033 「入力後、再計算」のことでしょうか? 悲しげ 2004/02/23-21:30
記事番号25031へのコメント
とすれば、例えば

http://www.fuku3.com/~habata/kbbs/kakov9/18562.htm

辺りはどうでしょう?

25034 早速ありがとうございます。 まだらぼけ 2004/02/23-22:06
記事番号25033へのコメント
悲しげさん

計算項目ではなく文字列です。
住所録.TBLから名前と電話番号を取り出す際、表引きで行うとEnterキーを押しながらの入力になると思うのですが、
入力フォームに於いて対応するNOを入れるだけで名前と電話番号等を一発表示できないかと思い投稿しました。

 ちなみに 入力フォームの項目は
        1:  NO
        2:  名前
        3:  TEL
        4:  A
        5:  B
        6:  C

      住所録の項目は
        1:  NO
        2:  氏名
        3:  ふりかな
        4:  住所1
        5:  住所2
        6:  TEL
        7:  FAX
        8:  mail

     
25036 Re:早速ありがとうございます。 磯田 2004/02/24-01:04
記事番号25034へのコメント
おそらく、入力フォームのNoへの入力で検索をかけるということではないかと思うのですが。
はずしていたらごめんなさい。
そうであれば、フォーム上のNoはテキストボックスにして、たとえば、&検索No という変数をいれます。
イベントを作成して ソース値更新イベントで 検索[No]=&検索Noとすれば、
該当するレコードにジャンプしてくれるというわけです。
ためしてみてください。

25037 Enter打たないということは よご 2004/02/24-08:39
記事番号25034へのコメント
そうすると例えば123番さんを入力しようとすると、1を入力した時点で1番の人がまず表示され、
次に2を入力するとすかさず12番さんが表示され、さらに3を入力すると123番さんのデータが表示されると、
こういうことがご希望なわけですか。
かえってわずらわしいような気もしますが…。[編集文字列変更]イベントでやればできるのかなあ。
25038 Re:早速ありがとうございます。 アックン(=^・^=) 2004/02/24-09:10
記事番号25034へのコメント
まだらぼけさん、こんにちは。
イベントでやる方法を書きますが、ちょっとその前に。

>計算項目ではなく文字列です。
名前やTELを計算項目にしてしまうのが、いちばんてっとり早いと思うのですが、そうするとなにか支障がありますか?
手動でトントントンと表引きする操作方法も使うことがあるから、計算項目にしたくないとか。

以下はイベントを使う方法ですが、イベントの設定方法はおわかりでしょうか?

仕組みは、Noを入力したら、住所録.tblでNoを検索し、名前やTELを変数に取得し、
他項目に項目値代入コマンドを使って値を代入します。

(項目値代入コマンドは、編集モードのときに他項目に値を代入するために使います。
普通の代入コマンドは編集モードでは使えませんから。)

手続き定義開始 tNo::入力後(参照 文字列 &編集文字列,長整数 &モード,参照 長整数 &入力継続)
 if( &モード=1 )
  編集表 "住所録" /* 表引き表:表引きするデータが入っている表 */
  検索 ↓ , [No] { =&編集文字列 } , 終了状態=&end
  if( &end=1 .and&編集文字列 )
  var 文字列{ &str[2] } /* 配列変数を2個用意する。 */
  &str[1] = [氏名] , \
  &str[2] = [TEL] /* 配列変数の1番目に氏名、2番目にTELの値を
代入する */
  編集表 "ナントカ" /* 表引き先表:カードフォームの編集対象表 */
  項目値代入 [名前] = &str[1]
  項目値代入 [TEL] = &str[2]
  end
end
/* 上記内容と同じようなことをソース値更新イベントでやろうとすると、表示タイミングが遅くなります。 */
手続き定義終了

手続き定義開始 tNo::ソース値更新()
/* 上の行の"ソース"の文字は半角です。 */
編集表 "住所録" /* 表引き表 */
絞り込み解除 * /* ←解除する数は要検討 */
/* 上記2行を入力後イベントに持っていくと、表示タイミングが遅くなります。 */
手続き定義終了

25039 Re:早速ありがとうございます。 アックン(=^・^=) 2004/02/24-09:31
記事番号25038へのコメント
まだらぼけさん>
Noのデータ型が文字列でないときは、以下のようにしてください。

>  編集表 "住所録"
  &秒 = #num( &編集文字列 ) /* この1行を追加します。*/
  検索 ↓ , [No] { =&秒 } , 終了状態=&end /* &編集文字列を&秒に変更します。 */
  if( &end=1 .and&秒 ) /* &編集文字列を&秒に変更します。 */
> var 文字列{ &str[2] }

25043 Re:Enter打たないということは 悲しげ 2004/02/24-13:28
記事番号25037へのコメント
1文字毎に・・・・であれば、
http://mokuchan.hp.infoseek.co.jp/download/dl-list1.htm
の072に、いかすハゲさんの作品があります。

25044 Re:Enter打たないということは 悲しげ 2004/02/24-13:38
記事番号25037へのコメント
よごさん wrote

>かえってわずらわしいような気もしますが…。

私もそう思います。
私なら「一発」ならぬ「二発」、すなわち「Enter打って」
項目計算式か、項目属性の編集初期値式で「#表引き」関数を試すと思います。

25051 項目初期値式にしてませんか? 宮城 2004/02/24-14:21
記事番号25034へのコメント
まだらぼけさん、こんにちは。

「Enterキーを押しながら」という書き方からすると、項目初期値式に
表引き関数設定したケースのように思えるのですがいかがですか?

項目計算式に表引き設定しておいて、「NO」に入力後再計算のチェックが入っていれば、
「NO」入力後 Enter一発で「名前」以下の項目は埋まります。

> 計算項目ではなく文字列です。

「計算項目」といわれるとふつう項目計算式が設定されている項目を指します。
一方「文字列」は「数値」とか「日時値」とかと同列のデータのタイプです。
つまり、「計算項目である文字列」項目なんてものはちっとも不思議でなく存在するわけで、読む人は限りなく混乱します。

25069 表引きで入力の方法のいくつか 佐田 守弘 2004/02/24-23:13
記事番号25034へのコメント
まだらぼけさん
質問中の「一発入力」とは、[NO]のデータを入力したら、[名前]と[TEL]の
項目(フォーム上でこれらのテキストオブジェクト)にはカーソルが行かずに
表引き値だけを表示したいという意味の様ですね。
次の方法があります。

@表を表引き関数を使った計算項目とする
表の上で[名前]と[TEL]の項目には、表引き関数を使った項目計算式を設定します。
計算項目とすれば、表引き関数で計算される名前や電話番号が自動
でセットされます。この場合、[NO]の項目には入力後再計算にチェックを入れておきます。
計算項目とすれば、フォーム上ではそのオブジェクトにはフォーカスしません。
つまり、「一発入力と表示」の形になります。

A表には[名前]と[TEL]の項目の項目は持たず、フォーム上で表示だけする
項目計算式で計算できる値は、表にその項目を持たなくても構いません。
フォームの上にテキストオブジェクトを作り、表引き関数を使った計算式
を設定すれば、[NO]を入力するだけでこれらの表引き値が表示されます。
質問に書いてある「一発表示」がまさにこの状態です。

B住所録を参照して項目にデータを書き込む
計算項目でなく、後から値を編集できる項目として入力する場合には、
通常は項目初期値式に表引き関数を設定し、初期値入力させます。
しかしこの場合には、それぞれの項目でEnterキーを押して行く必要があり、
「一発表示」にはなりません。
もし[NO]を入力しただけで、自動で[名前]と[TEL]の項目の項目に表引き値
をセットして、次の項目にフォーカスを移動させたいのであれば、
イベントを使う必要があります。
方法は他の方々がいろいろな方法を提示されております。
私でしたら[NO]のソース値更新イベントを使い、住所録からその値を検索して変数に代入し、
この値を項目値代入コマンドで書き込む方法を使います。
(イベントは省略します)

●3つの方法の比較
ここで3つの方法の違いを説明しておきます。
@の計算項目とした場合には、データの入力時に住所録のデータが参照されて、表に書き込まれます。
そして住所録が更新された場合でも、再計算をする事によって、常に新しい
住所録のデータに更新されます。

Aの方法はもともと表には住所録にあるデータを持ちません。
フォームで表示したり、レポートで印刷する度に、住所録のデータが参照されて、
表示や印刷がされます。
つまり常に最新の住所録のデータが反映されます。

Bの方法は、入力時に住所録を参照して値を持って来ますが、その後は住所
録の表との関係は断たれます。
「今は住所が変わっているかもしれないけど、昨年手紙を発送した時の宛先はこうであった」という様に、
過去のデータのまま残す時に適しています。

ですから、目的に応じてこれらの方法を使い分けて下さい。
またここには書きませんでしたが、結合表を使って入力する表と住所録を
組み合わせる方法もあります。

佐田守弘(KS-00119)
25141 編集初期値式でした 宮城 2004/02/26-20:28
記事番号25051へのコメント
誤:項目初期値式

正:編集初期値式

訂正いたします。(ミス多し。反省)

25179 みなさんありがとうございます。 まだらぼけ 2004/02/29-07:30
記事番号25034へのコメント
桐がよく解からないのにどえらい事を投稿してしまった様で後悔しています。
まだらぼけ故ご勘弁下さい。
皆さんのご意見を参考にもう一度確認作業に入ります。
佐田先生ありがとうございます。
私が思っている事に「ピッタリ」のご意見の様です。再度、トライしてみます。

戻る