過去の桐井戸端BBS (桐ver.8)
12089 一括処理でデータを更新したレコードのみを絞り込みしたい soon 2001/07/02-12:35
データを更新したレコードのみを一括処理で絞り込みしたいのですが、
どんな方法があるでしょうか。
時間関数等を使用すればよいのでしょうか。
具体的にご指導いただければ幸いです。

桐V8SP6で使用しています。

12090 Re:更新レコードのみの絞り込み 悲しげ 2001/07/02-13:07
記事番号12089へのコメント
どもっ、soonさん
更新の有無を判断する項目は実際には結構限られるような気がします
が、ここでは全項目を対象にすることとします。
え〜、方法はふたとおり考えられます。

1)全項目を対象とした併合選択(絞り込み)
表の更新(と後述の処理)が終了した後、もしくは表を開く直前に、
当該表をリネームコピーしておきます。これが更新前の表となります。
表の更新作業が終わって表を閉じた直後に、コピー済の更新前表で
全項目を対象にして併合選択します。
次いで補集合選択。
ここで絞り込まれたレコードが、今回更新されたレコードとなります。
この状態で必要に応じて仮称[更新日時]の値を、
現在の日時類の値で置換しておくといいかもしれません。

2)「挿入初期値式」と「ソース値更新」イベントを利用
仮称[更新日時]には、表定義で挿入初期値を設定して、行挿入または
追加時には日時類の値が自動的に入るようにしておきます。
次にイベントの設定となりますが、全項目分(場合によっては一部項目)の
テキストオブジェクトに「ソース値更新」イベントを設定します。
そしてそれぞれの手続き定義に次のように記述する(この時「ファミリー」オブジェクトが
使えないのは大変残念)。
   項目値代入 [更新日時]=むにゃむにゃ

大体こんなところだったと思います。
出典は、前者は桐ver2用のいわゆる『酒井本』、
後者はいかすぱげてぃ氏に教わりました。
なお、「ソース値更新」イベントは、当該項目で[Enter]を押しただけで
(即ち値を更新しない「空打ち」でも)発生してしまいますから、
イマイチかもしれません。
当面、最も確実なのは、前者だと思います、
所要時間の問題がクリアできさえすれば。
より本格的にやるには、「編集文字列変更」やら「入力前」「入力後」等のイベントを組み合わせて作ることになろうかと思いますが、
ファミリーが使えないので全項目テキストにこれを設定するのは躊躇してしまいます。
要望的には、仮称「項目値更新」的イベントと、これらの「ファミリー」扱いでしょうか?
12101 Re:更新レコードのみの絞り込み いかすぱげてぃ 2001/07/02-21:02
記事番号12090へのコメント

>ゆる『酒井本』、後者はいかすぱげてぃ氏に教わりました。

そんなことお教えいたしましたっけ?
記憶にあるような、ないような… はてはて…

ということで

>なお、「ソース値更新」イベントは、当該項目で[Enter]を押しただけ
>で(即ち値を更新しない「空打ち」でも)発生してしまいますから、
>イマイチかもしれません。
>当面、最も確実なのは、前者だと思います、所要時間の問題がクリア
>できさえすれば。
>より本格的にやるには、「編集文字列変更」やら「入力前」「入力後」
>等のイベントを組み合わせて作ることになろうかと思いますが、ファ
>ミリーが使えないので全項目テキストにこれを設定するのは躊躇して
>しまいます。

そんな面倒くさいことしなくても、
「行訂正開始」イベントで各テキスト値を変数に格納しておいて
「行訂正終了前」イベントで値の変更を比較して、変更があれが、
ワークの項目にフラグを立てるってのじゃ駄目かしら。

ようするに

LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
手続き定義開始 フォーム::行訂正開始(長整数 &明細番号)
 &txt1=[txt1],&txt2=[txt2],………
手続き定義終了

手続き定義開始 フォーム::行訂正終了前(長整数 &明細番号…)
 if((&txt1=[txt1])+(&txt2=[txt2]))
 項目値代入 [訂正]=1
 end
手続き定義終了
TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT

 if((&txt1=[txt1])+(&txt2=[txt2])) っていうのが分かりにくければ

 if(&txt1<>[txt1] .or&txt2<>[txt2]) っていうのでも当然よし!

一応、行挿入の時にもフラグ立てをしてやるのはいうまでもありませんけど。

で、[訂正]項目で選択してやれば更新レコードだけ選べますし、フォームを閉じる前に、
[訂正]をヌルに置換しておけばよいような…

何か問題あるかな…(ご検証、よろしく>悲しげ様)

では、また。

12102 Re:更新レコードのみの絞り込み 悲しげ 2001/07/02-22:43
記事番号12101へのコメント
すばらしい、ポチポチポチ・・・・・
いえ、検証するまでも無いです・・・・って、多分ね(^^;)。

この手は(【多遊】さんとこ含めて)過去何度か話題になりかけてましたが、
こんなのは初めてお目にかかりました。
なるほど、レコード全体を相手にするなら「行訂正*」イベントを使えばいいのか。

行挿入・行追加の場合は、前述したように挿入初期値で対応すればいいし、
あるいは今回のやり方と統一性を持たせたければ「行挿入*」イベントを使うこともできますね。

あと、

> if((&txt1=[txt1])+(&txt2=[txt2])) っていうのが分かりにくければ

について補足説明します。
例えば『表編集』リファレンスp.419〜に「条件式」なるものがサラリと記述されています。
引用すれば
-----------------------------------------------
条件式の結果は、真または偽になります。それぞれを数値で表わすと次のようになります。
  真:1
  偽:0
-----------------------------------------------
このことを上記式に当てはめれば、まず(&txt1=[txt1])なる条件式が、
成立すれば「真」であるから条件式の結果は「1」になり、成立しなければ
「偽」だから「0」となり……
と云う訳で、幾多の条件式のひとつ以上が真となれば、トータルとしても
「1」以上になるので、この場合はいずれかひとつ以上の項目で訂正があったと見なすことができる、と。(^^)v

ps:
>手続き定義開始 フォーム::行訂正開始(長整数 &明細番号)
> &txt1=[txt1],&txt2=[txt2],………

各項目のデータ型と受ける変数のそれは、きちんと対応させておかないと駄目ですよね。
12103 Re:更新レコードのみの絞り込み 悲しげ 2001/07/02-23:56
記事番号12102へのコメント
自レスですが、
後半の条件式の真偽の記述って何か変なような・・・・(?_?)

12108 Re:更新レコードのみの絞り込み 悲しげ 2001/07/03-15:18
記事番号12101へのコメント
う〜ん、一晩、熟睡しながら(^^;)悩んだ(^^;)(^^;)のですが、

> if((&txt1=[txt1])+(&txt2=[txt2])) っていうのが分かりにくければ
>
> if(&txt1<>[txt1] .or&txt2<>[txt2]) っていうのでも当然よし!

の上の方は

 if((&txt1<>[txt1])+(&txt2<>[txt2]))

なのではないでしょうか(?_?)
12110 Re:更新レコードのみの絞り込み いかすぱげてぃ 2001/07/03-17:52
記事番号12108へのコメント

> if((&txt1<>[txt1])+(&txt2<>[txt2]))
>
>なのではないでしょうか(?_?)

言えてる…(^^;

戻る