過去の桐井戸端BBS (桐ver.8)
11003 併合処理を行ごとに置換、挿入、削除 関口喜人 2001/04/24-06:37
桐8SP6です。
過去桐の中でうまい例が検索できませんでした。

会員管理を行っています。
会員情報変更台帳を入力し、会員情報マスター台帳を併合処理により更新する作業を行いたいと思っています。
次のようなテーブルを作成しています。

|処理年月日|処理項目 |会員番号|氏名  |住所 |会費 |
| 4月1日|置換挿入 |  0001|桐桐太郎|東京 | 5000|
| 4月2日|置換挿入 |  0002|松松花子|大阪 | 6000|
| 4月2日|削除   |  0003|松風次郎|長野 | 6000|
| 4月3日|置換挿入 |  0001|桐桐太郎|東京 | 8000|
| 4月5日|削除   |  0002|松松花子|大阪 | 6000|
| 4月6日|置換挿入 |  0002|松松花子|大阪 | 6000|


このような変更台帳を作成し、日付順に処理項目の区分にしたがって、置換、挿入、削除を行いたいのです。
はじめは、処理項目ごとに絞込みして、それぞれ併合をかけていたのですが、それですと松松花子さんのように、
複数処理行がある場合に、日付順を反映した正規な処理結果が出てこない場合が出てきます。
何かいい方法がありましたら、お教えください。
11010 Re:併合処理を行ごとに置換、挿入、削除 宮城 2001/04/24-17:43
記事番号11003へのコメント
関口喜人さん、こんにちは。「4月会費」のような、ある期間で会員1名につき1件だけ最新レコードをメンテするというご主旨ですね。

これは面倒ですが、存在する日付のインデックスを作っておき、最初の日付から最後まですべての日付ごとに、
削除・置換挿入を繰り返すしかないのでは。

当然一括処理を組みます。
また同一日に削除と置換挿入が発生した場合のルール(これはややこしいです!)や、
同一日に置換挿入が複数件発生した場合の入力順を保証しておく仕組みを工夫する必要があります。

11014 Re:併合処理を行ごとに置換、挿入、削除 関口喜人 2001/04/24-20:22
記事番号11010へのコメント

>4月会費」のような、ある期間で会員1名につき1件だけ最新レコードをメンテするというご主旨ですね。
そのとおりです。
会員の登録データの更新を管理します。
実際には、会員マスター台帳と、今回考えている登録内容変更台帳を作成し、最新のデータは、
会員マスター台帳へ登録内容変更台帳のデータを併合させ、最新の会員データを閲覧できるテーブルを書き出したいと
考えています。
登録内容変更台帳は、レコードごとに印刷と後々会員ごとの変更履歴が必要なためこのようなデータ管理を思いつきました。


>当然一括処理を組みます。また同一日に削除と置換挿入が発生した場合の
>ルール(これはややこしいです!)や、同一日に置換挿入が複数件発生し
>た場合の入力順を保証しておく仕組みを工夫する必要があります。

やはり、一括処理が必要になりますかね(^^;
処理項目で判断させ、ケース分岐で1行づつ処理していく方法ですね!
このような一括処理の、何かサンプルはないでしょうか??
桐のサンプルにあるかな??

11023 Re:出血大サービス 宮城 2001/04/25-10:01
記事番号11014へのコメント
サンプルと言われれば・・・。こんなもんですかね。

変数宣言 固有,整数{&終了状態}
変数宣言 固有,文字列{&処理年月日}
表 "会員情報マスター台帳"
表 "会員情報変更台帳"
並べ替え {[処理年月日]昇順}
絞り込み 単一化={[処理年月日]}
書き出し 表,"INDEX",終了状態=&終了状態,{[処理年月日]}
絞り込み解除
表 "INDEX"
ジャンプ 行番号=先頭
繰り返し (.NOT #終端行)
 &処理年月日=[処理年月日]
 編集表 "会員情報変更台帳"
 絞り込み [処理年月日]_&処理年月日
  絞り込み [処理項目]{"削除"}
  ケース開始
   ケース(.NOT #終端行)
    併合 "会員情報マスター台帳"¥
      ,削除¥
      ,{[会員番号]照合¥
       }
  ケース終了
  絞り込み解除 1
  絞り込み [処理項目]{"置換挿入"}
  ケース開始
   ケース(.NOT #終端行)
    併合 "会員情報マスター台帳"¥
      ,両方¥
      ,{[会員番号]照合¥
       ,[処理年月日]複写¥
       ,[会費]複写¥
       }
  ケース終了
 絞り込み解除
 編集表 "INDEX"
 ジャンプ 行番号=次行
繰り返し終了

動作確認はしておりません。とんまなバグがあるかも。(^^;; 
あえて説明もせず。

同一日に置換挿入後削除はなし、同一日複数件置換挿入が入った場合、[日連番]でも持って入力順を記録し上記で
会員情報変更台帳を開いた後の並び替えでさらに[日連番]でも並び替えておく前提です。

[処理年月日]も文字列前提です。


11025 Re:併合処理を行ごとに置換、挿入、削除 natsu 2001/04/25-10:52
記事番号11014へのコメント
さて、同じような処理をしたことがありますので ご参考までに以下の一括処理は、以前自作したものを少し変更しました
検証はしていませんので あしからずそれから、併合の削除の時は パラメーターも変更する必要があります
使用の際は、そこも工夫をお願いします(これだと、あまり「コマンド」コマンドを使う必然性はないですね
ケース処理の方が圧倒的に楽です
元々は、併合処理項目を場合により変更するためコマンドを使いました)
あとは、適当にトランザクションとするか、&処理確認で判断して問題なければ
会員情報変更台帳.tblに処理済みのチェックを入れてもよいでしょう


変数宣言 固有,整数{&処理行番号,&処理確認}
表 "会員情報マスター台帳",表番号=1
表 "会員情報変更台帳",表番号=2

&処理行番号=1
繰り返し
ジャンプ 行番号=&処理行番号
条件 ( #eof=1 ) 繰り返し中止
絞り込み 行数=1
編集表 1

コマンド "併合 "+""""+"会員情報変更台帳.tbl"+""""+","+[処理項目]+",\
編集表=する,終了状態=&処理確認,{[会員番号]照合[会員番号],[会費]複写[会費]}"

* 上記[コマンド]コマンドは、[ケース]コマンドにしてください

&処理行番号=&処理行番号+1
編集表 2
絞り込み解除
繰り返し終了

11026 Re:併合処理を行ごとに置換、挿入、削除 natsu 2001/04/25-11:05
記事番号11025へのコメント
朝投稿画面にして、そのままにしておいて投稿したら宮城さんのレスが
ありました 処理速度はそちらの方が絶対に速いはずです

さて、前提条件を一つだけ・・・
会員情報変更台帳.tblは、レコードは入力処理時刻順に並んでいることになっています
宮城さんのコメント通り、処理の順番によって結果が異なることは十分予想されます


11028 併合の代りに行訂正、行追加を使ってみて下さい 佐田 守弘 2001/04/25-12:08
記事番号11023へのコメント
関口喜人 さん
大筋では宮城さんが#11023「Re:出血大サービス」で書かれている通りですが、
絞りこんで併合するのは時間が掛るおそれがあるので、併合を使わずに行追加、行訂正を使ってみてはどうでしょう。
宮城さんの例をもとに一部加筆してみます。

変数宣言 固有,整数{&終了状態,&会員番号}
変数宣言 固有,数値{&会費}
変数宣言 固有,文字列{&処理年月日,&氏名,&住所}
表 "会員情報マスター台帳"
表 "会員情報変更台帳"
並べ替え {[処理年月日]昇順}
繰り返し (.not #終端行)
 ケース開始
  ケース ([処理項目]="置換挿入")
   代入 &会員番号=[会員番号],&氏名=[氏名],&住所=[住所],&会費=[会費]
   編集表 "会員情報マスター台帳"
   検索 [会員番号]{=&会員番号}
    ケース開始
     ケース (#終端行)
      行追加 [氏名]=&氏名,[住所]=&住所,[会費]=&会費
     ケース その他
      行訂正 [氏名]=&氏名,[住所]=&住所,[会費]=&会費
    ケース終了
  ケース ([処理項目]="削除")
   代入 &会員番号=[会員番号]
   編集表 "会員情報マスター台帳"
   検索 [会員番号]{=&会員番号}
    ケース開始
     ケース (.not #終端行)
      行削除
    ケース終了
 ケース終了
 編集表 "会員情報変更台帳"
 ジャンプ 行番号=+1
繰り返し終了
終了 表

佐田守弘(KS-00119)
11029 Re:出血大サービス 尾形 2001/04/25-13:10
記事番号11023へのコメント
関口喜人さん、こんにちは

表 "会員情報マスター台帳"
並べ替え 索引="会員番号"
併合 "会員情報変更台帳"¥
      ,両方¥
      ,{[会員番号]照合¥
       ,[処理年月日]複写¥
       ,[会費]複写¥
       ,[処理項目]複写¥
       }
絞り込み [処理項目]{="削除"}
行削除 *
絞り込み解除 *

みたいなのもどうでしょう
[処理項目]複写後、処理をするような感じです

11042 Re:出血大サービス 関口喜人 2001/04/26-00:51
記事番号11029へのコメント
尾形さんは No.11029「Re:出血大サービス」で書きました。
>関口喜人さん、こんにちは
>
>表 "会員情報マスター台帳"
>並べ替え 索引="会員番号"
>併合 "会員情報変更台帳"¥
>      ,両方¥
>      ,{[会員番号]照合¥
>       ,[処理年月日]複写¥
>       ,[会費]複写¥
>       ,[処理項目]複写¥
>       }
>絞り込み [処理項目]{="削除"}
>行削除 *
>絞り込み解除 *
>
>みたいなのもどうでしょう
>[処理項目]複写後、処理をするような感じです
>
緒方さんありがとうございます。
自分のケースの場合は、処理をどうしても日付順にする必要があり、一人の会員でも、
削除のあとに、挿入があったり、その上置換があったりと、この方法ではうまくいきませんでした(^^;
自分も、一番初めに思いついたのがこの方法でした。

11043 鋭利製作中です! 関口喜人 2001/04/26-00:54
記事番号11003へのコメント
宮城さん、出血大サービスありがとうございました
佐田先生、natsuさん、尾形さん大変参考になりました。
ただいま、鋭意開発中です!

戻る