過去の桐井戸端BBS (桐ver.8)
6865 グループ追加時のテキストボックス kaz 2000/07/15-08:37
v8sp5の一覧表フォームで質問です。

ヘッダー部にグループ項目を設けています。
そのグループ追加時に同じヘッダー部のテキストボックス(ソースはグループ項目の値で表引き)の自動入力をしたいのですが、うまく行きません。
テキストボックスのタブオーダーはoffで、グループ項目入力後カーソルは明細部に移動するのですが、テキストボックスは空のままです。
既存のデータの編集ではグループ項目、テキストボックス共にちゃんと表示されます。

どなたかご教授願います。
6869 Re:グループ追加時のテキストボックス bonito 2000/07/15-11:36
記事番号6865へのコメント
kazさん、こんにちは。
何がしたいのかもよくわからないし、表現も(<私の)適当でないかも知れませんが…、桐のヘルプによると

>グループを追加しても、レコードが追加されるわけではありません。
>新規グループに登録するレコードのグループ値を設定するだけです。
>レコードを追加せずに、ほかのグループに移動した場合は、追加した
>グループが消去されます。

という事で、グループ追加直後は処理対象行は終端行にあります。
(レコードが1行もないから…)、これでは表引きは出来ませんね。
行を1行でも追加した時点で件のテキストボックスには値が表示される筈です。

グループ追加直後にも、件のテキストボックスには値を表示するにはいろいろな方法が考えられますが…、もっとも安直なのは
グループ追加直後に(例えばグループ追加終了イベント等で)空の1行を強制的に(?)追加すればいいと思います。
  行追加 [ダミー]=1
その後どうするか?は設計上の問題なので…いろいろ (^^;


6870 Re:グループ追加時のテキストボックス 野良犬 2000/07/15-14:27
記事番号6865へのコメント
こんにちは野良犬です

>ヘッダー部にグループ項目を設けています。そのグループ追加時に同じヘッダー部
>のテキストボックス(ソースはグループ項目の値で表引き)の自動入力をしたいの
>ですが、うまく行きません。

こういう場合は、テキストではなく、グループ項目にするとうまくいきます。

では。

6871 Re:グループ追加時のテキストボックス kaz 2000/07/15-15:59
記事番号6865へのコメント
bonitoさん、野良犬さんどうもありがとうございます。

bonitoさんの"グループ追加終了イベントでダミーデータを行追加する件"やってみましたが、テキストボックスは空のままでした。
フォームの対象表を保存終了して、再度開かないと更新されないようです。
bonitoさんご指摘のヘルプの仕様から言えば、当然かも知れません。

野良犬さんご指摘の"グループ項目に変える件"はそのものずばりでした。
ソース値が#表引き()のテキストボックスをグループ項目に変えることにより、望み通りの結果となりました。
でも、これってどうしてこうなるのか良くわからないな〜。

いずれにしろ、ご教授ありがとうございました。
6872 Re:グループ追加時のテキストボックス bonito 2000/07/15-16:30
記事番号6871へのコメント
あっ、テキストオブジェクトのソースは#表引きの設定してある項目値ではなく
#表引きの計算式(そのもの)なんですね。
またまた誤解していました… (^^; (^^;

6874 Re:グループ追加時のテキストボックス kaz 2000/07/15-23:48
記事番号6872へのコメント
どうも書き方が拙くて誤解を招いてしまいどうもすみません。

別の質問もそのうちにUPすると思うのでよろしくお願いします。
6878 グループ項目とグループ操作について 佐田 守弘 2000/07/16-23:06
記事番号6870へのコメント
kazさん
>テキストボックス(ソースはグループ項目の値で表引き)
との事なので、そのテキストボックスは計算式なのだと思います。計算式の場合、
(項目計算式の場合でも同様ですが)行追加したレコードが確定した後で値が計算されます。
ですから、新規のグループを追加している時には表引き値が表示されず、
既存データの編集の時に表示されるといった事が起きるのだと思います。
(グループ項目の場合にはグループ値が必要なので自動的に再計算されるのでしょう)

●グループ項目に設定する事の可否
さて、野良犬さんが#6870にて、
>こういう場合は、テキストではなく、グループ項目にするとうまくいきます。
との事ですが、これは多少(本当はかなり)問題がある方法です。
と言いますのは、ヘッダ部やフッタ部にグループ項目を設けるという事は、その項目でグループ化すると言う意味になります。
ここでの場合には、最初のグループ項目によって表引き関数で決まる値ですから、グループ項目の値によって、
2番目のグループ項目は唯一に値が決まります。このために、最初のグループ項目だけでグループ化した場合も、
最初と2番目の2つのグループ項目でグループ化した場合も、同じグルーピングになり、実質的に問題は発生しません。
(ただし、最初のグループか項目による索引が無効になり、索引なしでのグループ化が行われるので、
レコード数が増えると、極端な速度低下が発生する可能性があります。)
しかし、2番目のグループ項目の値が最初のグループ項目と関連性がない値だと、
異なるグルーピングになり、目的とするレコードが表示されなくなります。

●正しくは
グループ化する必要のないオブジェクトをヘッダセクションに置く場合には、グループ項目にすべきでないと考えます。
そして、質問の様な状況が発生しますので、別の形で対処します。
例えば、新規のグループ項目を追加して編集に入った後、追加したレコードを確定し、
再度更新モードに変更してレコード編集を行うといった方法を試みて下さい。

■ グループ追加の操作はどの様に行っておられますか?
普通に作ったフォームで新規グループを追加する操作はあまり便利ではありません。
グループ操作バーでグループ操作する方法が普通の方法ですが、この方法はあまりお勧めできません。
つまり、グループ項目を意識せず、自動的にグループ選択や操作を行える様にする方法が便利です。
ここでは詳しい話は割愛しますが、簡単にいえば、
@自動的に追加できるグループ値は編集させない。
Aグループ移動はコマンドボタンを使うのが便利
Bグループ値を入力させたり選ばせる時には、テキストボックスで変数に入力し、
既存のグループ値であればそのグループを選択し、新規の値なら自動的にグループ追加を行う
といった方法を取って下さい。
詳しい事は、私のHPに掲載しておりますいくつかのフォームの例や、「桐ガイドブック」の中のフォームなどを参考にしてみて下さい。

佐田守弘(KS-00119)
質問の目的と状況が一部把握し切れてないため、外しておりましたら失礼します。
6881 Re:グループ項目とグループ操作について kaz 2000/07/17-12:45
記事番号6878へのコメント
佐田 守弘さん 詳しい解説どうもありがとうございます。

HP拝見させてもらいました。
「あっなんだ!そうか」
というわけで、メイン&サブフォームにしました。

今まで、結合表を編集対象表に一覧表フォームを作っていたのですが、結合表を使わないで結合元の表で
メインフォーム、サブフォームを作りました。これによって、今までのグループ追加に相当するのがメイン部の行追加になり、問題なく動きそうです。

又、今まで任意のグループ移動時には一覧がでて選択していたのですが、これからは表編集〜フォーム編集の切替でとりあえず対応できそうです。
6893 Re:グループ項目とグループ操作について きりぎりす 2000/07/18-12:54
記事番号6878へのコメント
佐田 守弘さんは No.6878「グループ項目とグループ操作について」で書きました。
グループ領域の扱いについて、誤解があるようです。
グループ項目になりうるのは、あくまで項目名を記述した場合であって、計算式を記述した場合にはグループ項目にはなり得ません。
グループ項目に計算式を記述することは、Ver5でヘッダ部に計算式を記述する場合と等価です。
6894 Re:グループ項目とグループ操作について 佐田 守弘 2000/07/18-13:28
記事番号6893へのコメント
きりぎりすさん
>グループ項目になりうるのは、あくまで項目名を記述した場合であって、計算式を記述した場合
>にはグループ項目にはなり得ません。
実は私もそう思っておりました。少なくとも、V5の帳票ではそうでした。

所が、この質問の確認のため、フォーム上に計算式をソースとしたテキストオブジェクトを作成し、
そのテキストオブジェクトをグループオブジェクトに修正することができるんですね。
もちろん最初からグループオブジェクトを作成し、そこに計算式を設定することもできます。

テキストオブジェクトなら、V5のヘッダ部に設けた計算式の領域と同じと解釈できるのですが、
あえてグループオブジェクトに設定できるのは、何か理由があるのではと思った次第です。

確かに、私としてもかなり疑問がある事なので、正しい所を調べて再度報告させて頂きます。

佐田守弘(KS-00119)

6895 Re:グループ項目とグループ操作について kaz 2000/07/18-20:01
記事番号6881へのコメント
自己レスです。

階層型のデータベース(商品テーブルとか積算書とかetc)にはメイン&サブフォームが最適なんだな、
と今更ながらわかりました。4階層まで組めるし、なんか自分の目の前の霧がパーッと晴れて来たような感じです。

皆さんどうもありがとうございます。
6897 ヘッダ・フッタ部のグループオブジェクトの機能 佐田 守弘 2000/07/18-23:43
記事番号6894へのコメント
フォームのヘッダ部、フッタ部に設けたグループオブジェクトの機能について前回発言の訂正と、改めての
報告をさせて頂きます。
■ 前回発言の誤りの訂正
●背景
このコメントツリーの最初の質問にて、フォームのヘッダ部にテキストオブジェクトを設けた場合、
新規グループを追加した時に、値が表示されないが、グループオブジェクトであれば値が表示されるとの話がありました。
計算式はグループ項目にできないはずと考えていた所、フォームヘッダ・フッタ部に設けたグループオブジェクトに計算式が設定できる事から、
グループ化の機能が変わったのではなかろうかと勘違いし、#6878では誤った書き込みをしてしまいました。
#6878の書き込みは取り消させて頂き、改めてヘッダ・フッタ部に設けたグループオブジェクトの機能について説明させて頂きます。

●グループオブジェクトのソースを項目値とした場合
グループ化の機能になり、この項目値についてのグルーピングが行われます。ここで設定できる項目は、
通常項目だけで、計算項目は設定できません(設定するとその時点でエラーになります)。

●グループオブジェクトのソースに計算式を設定した場合
ソースに設定した計算式の値が表示されます。この値によるグループ化は行われません。この点については、
#6893にてきりぎりすさんがからの御指摘があった通りで、#6878にて書きました「計算式でもその値でグループ化される」は誤りです。
なお、計算項目は前述の通り、そのままではグループオブジェクトのソースに設定できませんが、計算式として設定すれば、
値を表示する事は可能です。
この場合には、ソースに「(<計算項目名>)」の様に括弧でくくって記述します。
項目名を括弧でくくる事により、計算式となり、グループ化せずに値を表示するだけのオブジェクトになります。

■ヘッダ・フッタ部に設けたテキストオブジェクトとグループオブジェクトとの機能の違い
ここでは明細部に一覧表オブジェクトないし伝票オブジェクトがあり、ヘッダ部に項目[a]を設定したグループオブジェクトAと、
計算式がソースに設定されているグループオブジェクトBがあるとします。
このグループ項目Bは、最初の質問にある[a]の値で表引きを行う計算式を考えて頂いて結構です。
Bがグループオブジェクトの場合、計算式で参照される[a]の値は、グループ値としての値です。
一方、Bがテキストオブジェクトの場合には、[a]の値が参照される事には変わりないのですが、
グループ値ではなく、明細部上で処理対象行(カーソルがある行)の[a]の値です。
この様なグループ項目で明細部のレコードをグループ化している場合、明細部のレコードの[a]の項目値は、
いずれもグループ項目の値と実質的に同じなのですが、一致しないケースが存在します。
@明細部で終端行が処理対象行になった時
終端行では[a]の項目値が意味を持ちません。従いまして、テキストオブジェクトでは意味を持たない項目
値を参照する事になり、計算式の値が表示されなくなります。
Aグループを追加した直後の状態
グループを追加した直後は、実際にはレコードが追加されていないので、明細部の[a]も意味を持ちません。
従って、最初の質問にある「テキストボックスは空のままです。」の状態になるものかと思われます。

そして、野良犬さんが書かれている様に、グループ項目に設定すれば、そのグループ値が計算式で参照される項目値になるので、
新規グループを追加した直後も含めて、グループ値を参照した計算式の値が有効になる様です。

佐田守弘(KS-00119)

戻る