過去の桐井戸端BBS (桐ver.8)
17447 フォームで修正した時にだけある項目にチェックを入れたい。 つかまさ 2002/10/04-11:09
フォームで項目値を更新(修正、削除)した時、フォームには見えない編集対象表の"更新"という項目にチェックを入れたいのです。
ただ、編集対照表になっている.tblを直接開いて更新(修正、削除)をした時には、
そのチェックは入れたくないのです。

まあ、フォームに"更新"という項目も入れて手入力でチェックを入れればよいのですが、入れ忘れの心配もあるし。
フォームは自分以外の人が使うのでなるべく簡単にしたいと思いまして。

ちなみに"更新"という項目は、後で更新された行だけを絞り込むために使うのですが、
「そんな項目なんてなくても、フォームから更新した行だけを絞り込めるよ」なんていう高度な知識をお持ちの方は、
併せてお教えいただければ幸いです。

よろしくお願いします。
17450 Re:フォームで修正した時にだけチェックを入れたい。 natsu 2002/10/04-14:42
記事番号17447へのコメント
イベントが使えるのであれば、以下の通りになります

まず、その値が変更されたかどうかの判断が必要になりますから
入力前イベントで、もともとのデータを取り込んでおきます
([A]と言う項目で、オブジェクト名はtAです)

手続き定義開始 tA::入力前(参照 文字列 &編集文字列)
&STR=&編集文字列
手続き定義終了

次に、訂正モードから抜けるときに、値が変更されたかどうかチェックします
(入力後イベントでもいいと思いますが、ここではソース値更新です)
変更されていれば、[更新日時]という項目に、そのときの日時を入れます

手続き定義開始 tA::ソース値更新()
ケース開始
ケース([A]=&STR)
ケース その他
メソッド呼び出し @フォーム.更新モード設定( 0 )
行訂正 [更新日時]=#日時値
ケース終了
手続き定義終了

あとは、[更新日時]が未定義かどうかでフォームのボタンの色など
自由に変更してみましょう
別に、時間ではなく文字でも数字でも構いません
フォームを開くときに、入力担当者の氏名を変数に入れることができれば
[担当者名]を新たに追加し記録する事なども可能です

17457 Re:フォームで修正した時にだけチェックを入れたい。 つかまさ 2002/10/07-14:09
記事番号17450へのコメント
natsuさん、遅くなってすいません。
すごい! できました。
ありがとうございました。

それでnatsuさんのコメントの最後に
>フォームを開くときに、入力担当者の氏名を変数に入れることができれば
>[担当者名]を新たに追加し記録する事なども可能です
と、あったのですが、
そのフォームを
共有=する
更新=する
という設定にして複数のクライアントから修正することを可能にした場合、
入力者が何もしなくても、どのクライアントで修正したのか判るように
パソコンのユーザー番号が修正行の任意の項目に入るように…
なんてことは不可能でしょうか?

いや、ちょっとやってみて私には不可能に思えたのですが、
工夫次第でできる! とゆうことになれば、
また桐の素晴らしさを発見できるだと思いまして…。

よろしくお願いします。

17458 Re:フォームで修正した時にだけチェックを入れたい。 尾形 2002/10/07-17:34
記事番号17450へのコメント
どうも、こんにちは
この方法ですと項目が多い場合が面倒と思います

行訂正終了前イベントあたりで

手続き定義開始 フォーム::行訂正終了前(長整数 &明細番号,長整数 &モード)
条件 (&モード=1) 項目値代入 [更新日時]=#日時値 
手続き定義終了

でどうでしょうか

17460 Re:フォームで修正した時にだけチェックを入れたい。 悲しげ 2002/10/07-19:32
記事番号17458へのコメント
どもっ、尾形さん、
「行訂正終了前」イベントの&モード=1は、単にキャンセルしなかっただけを意味するのであって、
例えば値を変更せずにEnter空打ちしただけでも発生するのではなかったかしら?
とすれば、「項目が多い場合」でも、やはり

http://www.fuku3.com/~habata/kbbs/kakov8/12089.htm
http://www.fuku3.com/~habata/kbbs/kakov8/14229.htm

辺りに落ち着くような気がします。

ついでに#17447 つかもとさん、

>ただ、編集対照表になっている.tblを直接開いて更新(修正、削除)をした時
>には、そのチェックは入れたくないのです。

削除したレコードにはそもそもチェックの入れようがないのでは?
あ、「チェックを入れたくない」から結果オーライですかね。(?_?)
17461 訂正(^^;) 悲しげ 2002/10/07-20:18
記事番号17460へのコメント
「行訂正終了前」イベントのヘルプでは
--------------------------------------
&モード/長整数
入力したデータが確定されたか、キャンセルされたかを示す番号が格納されます。
値を変更せずにレコードを移動した場合は、0(キャンセル)が格納されます。
値 説明
 1 確定
 0 キャンセル
--------------------------------------
と記述されていました。「値を変更せずにレコードを移動した場合」として、
Enter空打ちを試してみましたが、そのとおりでございました。
よって、尾形さんの#17458でよろしいようです。失礼いたしました。<(_ _)>

と云うことは、この手の話題は過去何度か出てきましたが、
最終的にこの方法が超ラクチンってことになりますね。(^^)v
あとは、「行挿入終了前」イベントも付け足すといいと思います。
17462 Re:訂正(^^;) hidetake 2002/10/07-20:45
記事番号17461へのコメント
>値を変更せずにレコードを移動した場合は、0(キャンセル)が格納されます。

ただ,この場合,レコード内で項目を1度変更したあと
あら間違ったと,元の項目に戻ってデータを戻した場合は
実際のデータとしては変更は無いけれど,&モードは 1 になりますよね.

例えば,項目制約などを付けていて,訂正したあと制約に引っかかって,
あら間違ったと,元の値に手で直したりした場合なども


17467 Re:フォームで修正した時にだけチェックを入れたい。 natsu 2002/10/07-23:49
記事番号17457へのコメント
訂正します

>入力後イベントでもいいと思いますが、ここではソース値更新です
としましたが、入力後イベントでは更新モード設定はできませんでした

それから、
>入力者が何もしなくても、どのクライアントで修正したのか判るように
>パソコンのユーザー番号が修正行の任意の項目に入るように…
>なんてことは不可能でしょうか?
ですが、

パソコンのユーザー番号というのが、ちょっと?なんですけど
#ユーザ名という関数がありますから
それで項目値を訂正してみてください
だれがどの端末を使用するか決まっていないときは
それなりの方法がありそうです

桐の環境設定で桐を立ち上げたとき使用者を入力させるフォームを強制的に開かせて、
&担当者という共通変数に担当者名を代入するとか、
これだと、クライアントが何もしないでよいというわけには行かなくなりますが...

17472 Re:フォームで修正した時にだけチェックを入れたい。 尾形 2002/10/08-07:21
記事番号17460へのコメント
どうも、悲しげさん

>「行訂正終了前」イベントの&モード=1は、単にキャンセルしなかった
>だけを意味するのであって、例えば値を変更せずにEnter空打ちしただ
>けでも発生するのではなかったかしら?
自分もそう思ってました (^^;
桐8の初期の頃にこれは確認した記憶があったのですが
現在のsp6で再度確認したら、希望通りの動作をしたのです (^^)
spの途中で変わったのでしょうかね?


17475 Re:皆さん、ご丁寧にありがとうございました。 つかまさ 2002/10/08-12:25
記事番号17467へのコメント
皆さんのおかげでイベントを使って完成しました。

ちなみに、行訂正終了前イベントを使って、
入力者という項目に#ユーザ名が入るようにしました。

これから、natsuさんの、

>桐の環境設定で桐を立ち上げたとき使用者を入力させるフォームを
>強制的に開かせて、&担当者という共通変数に担当者名を代入するとか、

を試してみます。


ほんとにありがとうございました。

戻る