過去の桐井戸端BBS (桐ver.9)
27782 (再度)フォーム表示中、ある値でレコードすべてを置換したい。 Mike 2004/09/30-21:22
桐はVer9−2004をネットワーク環境で利用しています。一括処理については
多少は分かる程度で、イベントは全然分かっていないのが正直なところです。

クラス数の多い学校の教員で、成績処理の入力部分で頭を悩ませています。
フォームを開き、そこに「クラス実施時数入力欄」を設け、そこに値を入力
するとクラス全員の「クラス実施時数」という項目に同じ値がぱっと入力・表示されるようにしたいのです。

ほとんど同じ内容が先日アップされていましたが、
尻切れトンボになってしまいましたので顰蹙を受けることを覚悟で投稿させていただきます。

ところでどうしてこれが必要かと言いますと(違うやり方もあるのでしょうが…)、
教員側から見ると、たとえばA組では前期に25時間授業を実施した
とひとまとめにできるのですが、生徒側では必ずしもそうでない者がいるからなのです。

たとえば転入者・転出者はもっと少ない時間の授業を受けているのです。
ちなみに生徒は授業実施時数の2割を超える欠席をすると
該当科目を履修したとは認められませんので、とても大切なところです。

私は次のような単票ファイル(表形式)を作成しました。(関係分だけ)
[class]、[No]、[氏名]、[前期実施時数ク]、[前期実施時数個]、[前期
実施時数]、[前期欠席]、[前期公欠]という項目があります。

[前期実施時数ク]には教員が実施した授業実施時数が入力されます。
(↑ここが自動的に入るようにしたいところです)
[前期実施時数個]には転入者・転出者のように[前期実施時数ク]の値が
あてはまらない場合だけ正しい値を入力してもらうところです。
[前期実施時数]には #条件選択([前期実施時数個]=0,[前期実施時数ク],
[前期実施時数個]<>"",[前期実施時数個])という式が埋め込まれており、
転出者・転入者の場合だけは[前期実施時数個]の値が授業実施時数となるように、
それ以外の者は[前期実施時数ク]の値が授業実施時数となるようにしてあります。

この表に対応して一覧表形式のフォームを作成しました。グループ項目は[class]です。
[前期欠席]の値が授業実施時数の2割を超えたら背景の色が変わるように編集属性式を設定しました。

ここまではできたのですが、一番最初に書いた問題にブチ当たってしまいました。

実は最初は別の表(授業時数入力ファイル)を用意し、そこに入力された値を表引き関数を用いて
上記の単票ファイルの[前期実施時数ク]に表示させるようにしたのですが、
なぜかA組(フォームで現れる最初のクラス)だけはフォームを開いた途端に実施時数が表示されるのですが、
B組以後は『右クリック→項目置換→再計算』を実行しないと表示されないため
桐に不慣れな職員の多い本校では文句の嵐が殺到することは必定です。

というわけで(説明がとても長くなってスミマセン)、どなたかお助け願えませんでしょうか?
「もっとこう考えて表を作った方がよい」などのアドバイスも大歓迎です。

あ、実は授業時数入力、各教科単票入力、HR出席入力は全て一括処理で書いてあります。
27784 Re:(再度)フォーム表示中、ある値でレコードすべてを置換したい。 うにん 2004/10/01-09:36
記事番号27782へのコメント

>実は最初は別の表(授業時数入力ファイル)を用意し、そこに入力された
>値を表引き関数を用いて上記の単票ファイルの[前期実施時数ク]に表示
>させるようにしたのですが、

それでいいと思います。

>なぜかA組(フォームで現れる最初のクラス)
>だけはフォームを開いた途端に実施時数が表示されるのですが、B組以後
>は『右クリック→項目置換→再計算』を実行しないと表示されないため
>桐に不慣れな職員の多い本校では文句の嵐が殺到することは必定です。

これの原因がわかりませんが、表引きの検索項目は[class]でしょうから、
それを変更したときしか自動的に再計算されることはありえません。
(つまり、個人のレコードを作った後で授業時数入力ファイルに時数を入れても
そのままでは反映されない)
しかしその場合は、単に全レコードを再計算させればいいだけだと思うのですが。
ある生徒のクラスか、そのクラスの授業時数が変更されたときだけ再計算が必要なので、
「表示中に」という意図がわかりません。

27794 Re:(再度)フォームを開いているとき、ある値でレコードすべてを置換したい。 Mike 2004/10/01-13:33
記事番号27784へのコメント
Mikeです。早速のレスありがとうございます。

>これの原因がわかりませんが、表引きの検索項目は[class]でしょうから、
>それを変更したときしか自動的に再計算されることはありえません。

検索項目はまさしく[class]です。フォームを一覧表形式で作成し、
グループ項目を[class]としていることが何らかの影響を及ぼしているのでしょうか。
ちなみに計算式は #表引き([class],=,"教科実施授業時数.tbl",[class],[科目名],"")です。

>なので、「表示中に」という意図がわかりません。

ここは私のタイトルの書き方が悪かったのです。正しくは今回のように
「フォームを開いているとき、…」と書くべきだったのです。失礼しました。
27861 Re:(再度)フォームを開いているとき、ある値でレコードすべてを置換したい。 kochin 2004/10/05-22:27
記事番号27794へのコメント
Mikeさんこんにちは
kochinです。桐9−2004です。
自分の勉強のつもりで書き込んでいます。

1つ前のコメントで
>なぜかA組(フォームで現れる最初のクラス)
>だけはフォームを開いた途端に実施時数が表示されるのですが

最初に表示されるグループのみ再計算されているのであれば
おそらく書かれている一括処理の中で?フォームを開いた後に
どこかで再計算をさせている記述があるのではないでしょうか。
例えば置換による再計算ならば、グループ化されていればグループ内でのみ
再計算されますから当然そういう結果になるのではないかと・・。
イベントならば、編集対象表を開いてグループ化する前(メイン処理)か後(表開始イベント等)かで違ったりしますが
一括処理にそんなタイミングがあったかしらん?

原因が何であれ、再計算の問題だけならば。
グループ解除してから再計算して、再計算後に再度グループ化すれば
全レコード再計算をしてくれます。

複数回再計算されるグループがあっても実害が無いようでしたら。
原因究明は、後でじっくりやるとして。お気楽な方法としては。
コマンドボタンで

   機能      パラメータ
1.グループ解除
2.項目置換     [計算項目名]
3.グループ再抽出
4.グループ指定

フォームのオブジェクト属性設定ダイアログ−オプションタブで
実行コマンド−開始時にこのボタンを登録。ではいかが?。

ちなみに上記で1.3.4を設定せずに2だけ設定すると
現在と同じ状況(最初に表示されるグループだけ再計算される)が
再現できると思います。蛇足です。

リアルタイムでマスタ側の変更を編集側に反映させたいのであれば
細かい問題は、たくさんあると思いますが
参照整合性と結合表で、反映させたい項目を、主キー側(マスタ側)にすれば
可能だと思います。
参照整合性と結合表に抵抗がないようでしたら
お試しになるとよろしいかと思います。

戻る