過去の桐井戸端BBS (桐ver.9)
24774 計算項目で表引き関数を設定したらヌルを返してしまう neco 2004/02/12-11:10
お世話になります。
親・子・孫・ひ孫のようなツリー状構成テープルがあり、
別に独立したテーブル(イベントテーブル)もあります。

各表定義でコード項目(全て文字列)
親: A
子: A,B
孫: A,B,C
ひ孫: A,B,C,D とします。
を組み合わせて表引き用項目(計算式)[H]を作りました
 子: #RTRIM(#連結(A," ",B))
 孫: #RTRIM(#連結(A," ",B," ",C))
 ひ孫: #RTRIM(#連結(A," ",B," ",C," ",D))
こうすると、
それぞれのテーブルから直接イベントテーブルに関連レコードを持てます。
別の項目(計算式)で、
#COND([H]=#表引き([H],=,"イベントテーブル",[H],[H]),"有",1,"")
※イベントテーブルにも[H]項目があります。

上記テーブルをフォーム上に
 親: 一覧表形式  子・孫・ひ孫: 伝票形式  として配置し、
それぞれからイベントレコードを持てるようにしました。

前置きが長くなりましたが、ここで問題が発生しました。
イベント釦を押してイベントレコードを作成して戻ってくるのですが、
計算項目を再計算させなければ反映されないので、戻ってくる途中で
置換を行うと反映されないどころか元々"有"となっていたものまでヌルになっています。
どうも表引きがうまく行われていないようです。
テーブル単体で置換をすると問題なく反映されます。

どなたかうまく反映させる方法を教えていただけないでしょうか?

なお、フォーム上でのテーブルはすべて多重化設定しています。

24776 Re:計算項目の表引きがヌルを返してしまう うにん 2004/02/12-11:53
記事番号24774へのコメント

イベントというのが桐用語なので難解な文になっていますが、

> 子: #RTRIM(#連結(A," ",B))
> 孫: #RTRIM(#連結(A," ",B," ",C))
> ひ孫: #RTRIM(#連結(A," ",B," ",C," ",D))

#連結を使うのもわかりにくくないでしょうか。普通+で済みます。

>イベント釦を押してイベントレコードを作成して戻ってくるのですが、
>計算項目を再計算させなければ反映されないので、戻ってくる途中で
>置換を行うと反映されないどころか元々"有"となっていたものまでヌルに
>なっています。

複数行一度に作成しないと思うので、置換よりは、キー項目を同じ値で項目訂正した方がいいと思います。

>どうも表引きがうまく行われていないようです。

#COND(#表引き([H],=,"イベントテーブル",[H],[H],"",1),"有")

じゃないですか?

24780 Re:計算項目の表引きがヌルを返してしまう 悲しげ 2004/02/12-13:02
記事番号24776へのコメント
え〜、うにんさんの投稿を解説します。(^^;)

No24774
× #COND([H]=#表引き([H],=,"イベントテーブル",[H],[H]),"有",1,"")

No24776
○ #COND(#表引き([H],=,"イベントテーブル",[H],[H],"",1),"有")

違いはふたつ。
ひとつは末尾の「・・・,1,"")」でして、条件選択関数の場合、
該当なければ未定義を返すので、蛇足となるからです。
ふたつめは「・・・,[H],"",1),・・・」の部分。桐のヘルプで曰く。
〜〜〜〜〜〜〜〜〜〜ヘルプより〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
#表引き( val , op , file , item1 , item2 【 | , str 【 | , f 】 】 )

f 編集対象となっているレコードを検索対象にするかどうかを指定します。

0 file で指定した表が編集中であれば編集対象となっているレコードを
 検索対象にし、そうでなければ表全体を検索対象にします。
1 つねに表全体を検索対象にします。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
パラメータを省略すれば0と見なされます。
ヌルとなってしまうのは、想像するに、表引き対象表が絞り込み状態になっているからではないでしょうか?
 とすれば、絞り込まれていないデータはヌルを返します。

次、
>>イベント釦を押してイベントレコードを作成して戻ってくるのですが、
>>計算項目を再計算させなければ反映されないので、戻ってくる途中で
>>置換を行うと・・・・
>
>複数行一度に作成しないと思うので、置換よりは、キー項目を同じ値で
>項目訂正した方がいいと思います。

おそらく表引き対象表の[H]項目に何らかのデータを作成してから戻って来ているのだと思われるので、
まず、今回表引き対象となっているイベントテーブルとやらの方で
 &STR=[H]
として、元表(イベントテーブルとやらではない表)に戻ってから、当該レコードのみを
 条件(&STR<>"") 行訂正 終了状態=&OK,[別な項目]="有"
とやればいいと思います。置換は全行対象ですが、行訂正なら1行だけ。

……と、読み直してみると「別の項目(計算式)で」とあるので、これじゃ
だめですね。なら
 条件(&STR<>"") 行訂正 終了状態=&OK

計算項目の項目名省略しての行訂正です。
〜〜〜〜〜〜〜〜〜〜ヘルプより〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
計算項目が設定されている項目を再計算します。
<項目名>に、計算項目を指定してはいけません。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

24782 うにんさん、悲しげさん、感謝です。 neco 2004/02/12-13:39
記事番号24774へのコメント
うにんさん、悲しげさん、感謝・感謝です。
これまで表引き関数で
#表引き( val , op , file , item1 , item2 【 | , ixname 【 | , n 】 】 )
の内、item2までしか使ったことがありませんでした。
また、再計算させるのに行訂正が使用できるということも見落としていました。
またまた、目からうろこが落ちました。ありがとうございました。

戻る