過去の桐井戸端BBS (桐ver.8)
3445 イベントでレコード移動前の項目(フラグ)を変更したい 小川 伸二 1999/11/22-17:29
毎度お世話になります。

一覧形式のフォーム(行訂正/行挿入は禁止作業)でマウスで
処理行を指定させます。
処理対象行になったらある項目にフラグをたてます。
レコードが移動(処理行がかわったら)移動前のフラグをけして
移動先にフラグをたてたいのですが、レコード移動イベントでは
移動前のフラグが消せません。

どのイベントを使用すればよいのでしょうか?
よろしくお願いします。

3448 Re:イベントでレコード移動前の項目を変更したい 悲しげ 1999/11/22-21:16
記事番号3445へのコメント
どもっ、小川さん、

何をやろうとしているのかは判りませんが、少なくともここで使
うのは「レコード移動」イベントではなさそうです。と云うか、
実は私は、このイベントの用途自体がそもそもよく判っていない
のですが。(^^;)

>どのイベントを使用すればよいのでしょうか?

何をやりたいのか(どのような状況で何のためにフラグを立てるか)
が先ですね。それによっては、多分、他のやり方があるような気が
します。

3454 Re:イベントでレコード移動前の項目を変更したい 佐田 守弘 1999/11/23-09:00
記事番号3445へのコメント
小川 伸二さん
私にも目的が良く分からないのですが、次の様な目的なのかと仮定して話を進めます。
(目的)処理対象行がある行の[フラグ]の値を1にしておく。
処理対象行が他の行に移動したら[フラグ]の値は0に戻す。

さて、レコード移動イベントは、カーソル操作、マウス操作でカーソルすなわ
ち処理対象行を他の行に移動した時に発生するイベントです。
当然の事ながら、処理対象行は既に新しい行に移動しておりますから、レコード値に対して
操作を行えば、移動した先のレコードの項目が処理対象であり、移動する前のレコードに対しては、
何も行えません。

余談になりますが、レコード移動イベントとは、「引越し」みたいなものですね。
引越しをきっかけに新しいご近所に挨拶に行く、そんな感覚のイベントです。
引越した時に鍵は大家さんに返してしまっていますから、元の部屋には戻れません。

さて、上記目的だとしたら、次の[フラグ]を全てクリアし、処理対象行のみセットする方法を考えて
みて下さい。

・レコード移動イベントが発生したら、置換コマンドで全行の[フラグ]を0にリセットする
・処理対象行のみ行訂正コマンドで1を書き込む

この方法は置換コマンドでフラグをリセットするのに多少の時間を要します。

佐田守弘(KS-00119)

ps:
ここまで書いてみて、ひょっとしたら処理対象行は、他の行と異なる表示をす
るために、フラグを立てようとしているのかとも考えてみました。もしそうな
ら、フラグを使わずに別の方法で可能だと思います。

3460 Re:イベントでレコード移動前の項目を変更したい 小川 伸二 1999/11/24-10:40
記事番号3454へのコメント
悲しげさん、佐田先生、またまた説明が下手ですいません。

目的としては佐田先生の仮定どうりです。

>(目的)処理対象行がある行の[フラグ]の値を1にしておく。処理対象行が他の
> 行に移動したら[フラグ]の値は0に戻す。

であり、理由としては

>ひょっとしたら処理対象行は、他の行と異なる表示をするために、
>フラグを立てようとしている

です。

>もしそうなら、フラグを使わずに別の方法で可能だと思います。

すいませんがこの方法をお教え願います。

3482 Re:イベントでレコード移動前の項目を変更したい いかすぱげてぃ 1999/11/25-12:40
記事番号3460へのコメント
手続き定義開始 フォーム::レコード移動(… )
if(.not#eof .and.not&flg)
 行訂正  [flg]=1
 行マーク定義 2
&flg=1
 ジャンプ 行マーク=1
 行訂正  [flg]=""
 ジャンプ 行マーク=2
 行マーク解除
 行マーク定義 1
end
手続き定義終了
フラグは行マークじゃいけないのでしょうか?
もし、いいのなら…

手続き定義開始 フォーム::レコード移動(… )
if(.not#eof)
 行マーク解除
 行マーク定義 1
end
手続き定義終了

ってことで、じつに簡単なのでしょうが…
しかし、行マークではダメで、あくまで項目によるフラグを希望するなら
例えば、一般的には

手続き定義開始 フォーム::レコード移動(… )
if(.not#eof)
 行訂正  [flg]=1
 行マーク定義 2
 ジャンプ 行マーク=1
 行訂正  [flg]=""
 ジャンプ 行マーク=2
 行マーク解除
 行マーク定義 1
end
手続き定義終了

こんな感じで考えてしまいがちなのでしょうが…実際どうなんでしょうね。
単純に考えると、レコード移動イベント内でレコードを移動すると、それにより
またレコード移動が発生し、いわゆる多重イベントが発生してしまうのではない
かと危惧するのですが、こういうとこどういう仕様になってるのかなぁ。(^^;
それにレコード数が多くなると非常に重くなりそう。

もし仮にうまく動いたとすれば、フォームを開いた時に発生する処理を制御する
こととフォームを閉じる時の処理などが必要になります。
選択やら並び替えにも対応するとなると結構ごてごてになりそうですけど…

ちなみに、もし目的が処理対象行を他のレコードと違う表示にさせるためだった
としたら行マークでもOKです。
編集属性式で#行マーク関数を使えばいいだけですから…

立ち見の書き込みですみません。m(__)m


3483 Re:イベントでレコード移動前の項目を変更したい いかすぱげてぃ 1999/11/25-12:42
記事番号3482へのコメント
げげげ、前コメントの頭の12行は不要です。
変なカットアンドペーストが発生してしまった。(^^;

3499 どちらもOKでした 小川 伸二 1999/11/26-08:56
記事番号3482へのコメント
いかすぱげてぃさんありがとうございました。

行マークとフラグの両方やってみました。
どちらもできました。

余分な項目を持つこともないし、行マークの方がシンプルなので
こちらでいきたいと思います

>手続き定義開始 フォーム::レコード移動(… )
>if(.not#eof)
> 行訂正  [flg]=1
> 行マーク定義 2
> ジャンプ 行マーク=1
> 行訂正  [flg]=""
> ジャンプ 行マーク=2
> 行マーク解除
> 行マーク定義 1
>end
>手続き定義終了
>
>こんな感じで考えてしまいがちなのでしょうが…実際どうなんでしょうね。
>単純に考えると、レコード移動イベント内でレコードを移動すると、それにより
>またレコード移動が発生し、いわゆる多重イベントが発生してしまうのではない
>かと危惧するのですが、こういうとこどういう仕様になってるのかなぁ。(^^;

確かにそういわれると無限ループになりそうな気もしましたが、
大丈夫でした。

PS.報告が遅れてすいませんでした。
今後ともよろしくお願いします。

戻る