過去の桐井戸端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文字なので表題なら何とか入ります。 と云うわけで、#表題で前回更新日時を取り出すことにします。 (上記で[更新日時]を文字列型としたのはこのためです) 表の操作終了後に、更新日時で整列させて最新となる値を変数で取得します。 この値と#表題の値とで(必要あれば日時値に変換後)比較して更新があったかどうかを 判断する訳です。で、更新と見なした場合には、続く併合処理のために何からのフラグを 立てておくとともに、ファイル属性コマンドで表題に最新値を記入しておく、と。 ただし、私自身はこのような必要に迫られている訳ではないので、実際に試していませんで、 うまく行かなかったらごめんなさい。 |