過去の桐井戸端BBS (桐ver.8)
5350 フォームでのデータ更新前後の日時を取得したい TOSHI 2000/03/29-13:12
いつも興味深く拝見し勉強しています。

今、一括処理内でフォーム呼出しを実行していますが
併合の必要があり、データに変更があった場合だけ
併合処理へ進みたい。併合に時間がかかるため・・・・

その、判断に#ファイル属性にて更新日時を取得していますが
うまく行きません。
フォームではフォームを開くと更新されてしまうためです。

フォームのデータ変更前後の日時取得のよい方法はないでしょうか

5351 Re:フォームでのデータ更新前後の日時を取得したい 宮城 2000/03/29-14:03
記事番号5350へのコメント
現在日時でいいなら#年月日・#時刻でとれますが。秒が不要なら取り除きます。

ファイル単位の話かレコード単位の話かがよくわかりませんが、
表の最終更新日時を#ファイル属性で取り出すのは、本来の更新目的以外の
更新が入った場合、区別できませんのであまり賛成はできません。

レコード単位であれば、レコードに最新更新年月日・時刻をもち、
更新とセットで編集します。

ファイル単位であれば、関係表の更新日時という表を作ります。
この場合も更新とセットでこの表にも編集を入れます。


5352 Re:フォームでのデータ更新前後の日時を取得したい 宮城 2000/03/29-14:07
記事番号5351へのコメント
忘れてました。表のレコード数が結構ある場合、#年月日はまだしも#時刻は刻々と変化します。
これを回避するには一旦変数にとりこの変数により更新します。

ついでに、&年月日・&日時は起動時のものですので、ご注意かた。

5353 Re:フォームでのデータ更新前後の日時を取得したい TOSHI 2000/03/29-14:45
記事番号5352へのコメント
宮城さんは、早速のアドバイスありがとうございます。

知識不足の私にもう少しお知恵を拝借させてください。

更新の時刻とかきましたが、データの変更があった場合の時刻です
変更がない場合はフォームを開いた時刻で、変更があった場合のみ
そのフォームを閉じた時刻、この時間の差で処理を分岐したいのですが
やさくしアドバイスください
よろしく


5354 Re:フォームでのデータ更新前後の日時を取得したい 宮城 2000/03/29-14:54
記事番号5353へのコメント
>変更がない場合はフォームを開いた時刻で、変更があった場合のみ
>そのフォームを閉じた時刻、この時間の差で処理を分岐したいのですが

このコメントからちょっと寄り道したくなりました。「変更があった場合」
を検出しなくてはなりませんが、であるならば、いっそその場合、何らかの
識別用項目を追加しておきこれを更新し、それにより分岐させたほうがよく
はありませんか?



5355 Re:フォームでのデータ更新前後の日時を取得したい 悲しげ 2000/03/29-17:08
記事番号5350へのコメント
どもっ、TOSHIさん、
本件類似の問題については、私の試行錯誤の軌跡を【多遊】さんとこ
の過去ログ09は#435,437,439,440にゴチャゴチャと書いたものが残っています。
参考になれば幸いです。
http://www2u.biglobe.ne.jp/~s_tanaka/cgi-bin/bbs/bbs.cgi?function=log&
logno=9

順序が逆になりますが、本件は「会話処理でレコードを訂正した場合」ですよね。
一括処理等で(表示モードで)やる場合は、自動的に日時値も入れておけばいい訳ですし、
新規行追加(挿入)した場合は、挿入初期値で日時値を入れるようにしておけば、自動的に入ります。
問題は、会話処理で訂正した場合ですね。実はこれは、この度新設された「項目値代入」コマンドの
使い方の手本のような処理です。
このコマンドは、従来は会話処理で訂正している最中に、その値を参照しながら
他の項目値も訂正することは不可能でした(項目計算式や初期値式を設定している場合を除いて)。
このコマンドによって、これが可能となった訳です。
参考までに、「行訂正」コマンドは更新モードが表示モードの時に限り、
「項目値代入」は訂正(行挿入や項目訂正を含む)モードの時に
限り使うようです。

5356 更新有無の判断 佐田 守弘 2000/03/29-19:10
記事番号5354へのコメント
MS-DOS版桐時代に行っていた方法ですが、変数&EDTを用意しておき、起動時にこの値を0に
しておきます。
そして、編集メニューを選んだら1を代入するという方法で変更があったかどうか
を判断し、変更がない場合には破棄終了、ある場合には保存終了を選ぶといった方法があります。
今でも私のサイトの桐ver.5の一括処理の雛型に掲載してあると思います。

この方法がご質問のケースでそのまま使えます。
すなわち、フォーム編集ですから、それぞれの項目に対してソース値更新のイベントを設定し、
ソース値が更新されたら、「代入 &EDT=1」のコマンドを実行します。
そして最後に&EDTの値を調べれば、レコードが更新されたかが分かります。

レコード単位でそのレコードが更新されたかどうかも、同じ方法で判断できます。
しかし、ご質問の目的には、表が全体として更新されたかどうかを判断するだけで
良いと思います。

なお、値を一度訂正し、再び元に戻した場合でも変更があったと判断せざるを得ませんが、
これは致し方ありません。

佐田守弘(KS-00119)

5360 Re:フォームでのデータ更新前後の日時を取得したい TOSHI 2000/03/30-21:34
記事番号5350へのコメント
皆さんいろいろとありがとうございます。
今、他にも問題があり思考錯誤していることが多く
なかなか時間が取れません。
結果についてはそのうちお知らせします。
それではまた・・・

5361 Re:フォームでのデータ更新前後の日時を取得したい 悲しげ 2000/03/31-00:27
記事番号5360へのコメント
どもっ、TOSHIさん、お忙しそうですが、思い立った時に書いておきます。(^^;)

表をフォームを通して開くと、中味が未更新にもかかわらず、タイムスタンプが更新される件は、
この度の発言で初めて知りました。
いえ、実は私もMOにバックアップする際に、未更新の筈の表が更新ファイルとして扱われていることを
不思議だと思っておりましたが、これで得心しました。
フォームの設定で表を「更新しない」にしたら使い物になりませんしね。

さて、私ならこうすると云うことで考えてみました。
併合の場合は、選択状態で実行すると遅くなる(筈)ため、更新レコードのみとはしないで
表全体として行うこととします。
ただ、更新レコード自体は、先述した方法(cf.【多遊】さんとこに書いた
「編集文字列変更」でも「入力前」「後」イベントでもお好きな方で)更新があったレコードの、
仮称「更新日時」(文字列型)項目に日付+時刻を入れておくことにします
(一括処理時での「行訂正」や挿入初期値式も活用する)。
併せて、更新有無判定の高速化のために、この項目について
索引なり並べ替え条件を設定しておくことにします。

その上で、私が考えた目玉(^^;)は、前回更新日時を簡単に取り出せる方法は何かと云うことで、
「表題」を使ってみようと云うことです。表題を変えるとパレット辺りから覗いた時に
見にくくなりそうなので、当初は#作成者を使いたかったのですが、
いかんせん「2000年3月30」どまりで、「日」すら入りません、時刻なんてとてもとても。
日付+時刻は確か19文字なので表題なら何とか入ります。
と云うわけで、#表題で前回更新日時を取り出すことにします。
(上記で[更新日時]を文字列型としたのはこのためです)

表の操作終了後に、更新日時で整列させて最新となる値を変数で取得します。
この値と#表題の値とで(必要あれば日時値に変換後)比較して更新があったかどうかを
判断する訳です。で、更新と見なした場合には、続く併合処理のために何からのフラグを
立てておくとともに、ファイル属性コマンドで表題に最新値を記入しておく、と。

ただし、私自身はこのような必要に迫られている訳ではないので、実際に試していませんで、
うまく行かなかったらごめんなさい。

戻る