過去の桐井戸端BBS (桐ver.9)
28722 一括処理で表データ読込時に重複データがあった場合、読み込みは中止しても一括処理は正常に終了したい mimi 2005/01/14-13:46
桐9−2004を使用しています。

一括処理にて表A→表Bへの読込(表)を作成しています。
表AとBは全く同じ項目配列で表Bのある項目に索引(重複不可)を設定しています。

このとき、表Aに表Bに既にある(重複している)レコートを読み込ませると
−−−−−−−−−−−−−−−−−−−−−−−−−−
KD1140:整列項目値が重複しています
行番号 : 1
この行の処理は行いません。読み込みを続けますか?
   はい   いいえ
−−−−−−−−−−−−−−−−−−−−−−−−−−
という警告表示がされます。

この時、「はい」を選ぶと重複レコードを除いたレコードが読み込まれ
一括処理は正常に終了します。
しかし、「いいえ」を選ぶと「一括処理の実行中にエラーが発生しました」
と表示され、一括処理は中止されてしまいます。

「いいえ」を選んだ場合でも読み込みは中止しても一括処理自体は正常に終了したいのですがなにかいい方法はないでしょうか?
よろしくお願いします。


28723 Re:表読込時の重複データの処理 宮城 2005/01/14-14:12
記事番号28722へのコメント
mimiさん、こんにちは。

桐が「読み込みを続けますか?」と聞いてきて、「いいえ」を返してやった場合にも読み込みを続けさせようというのは
いくらなんでも無理なのでは?

おそらく、操作する人にこの局面では常に「はい」を選べと
教育しても徹底できないでしょうから、簡単なのは、読み込み前に重複レコード有無をチェックさせ、
重複がある場合、「至急mimiさんまで連絡のこと!」とかメッセージを表示させてはどうですか?

(一律に重複分削除していいのか相当疑問ですので。)

重複チェックはどちらからでも、問題の項目で照合させ、併合で絞り込み、
絞り込まれたレコードがあればそれが重複分です。

処理続行前に解除をお忘れなく。
28725 Re:表読込時の重複データの処理 野良犬 2005/01/14-17:56
記事番号28722へのコメント
スピードは落ちますが、併合をつかってはどうでしょう?
28727 Re:表読込時の重複データの処理 宮城 2005/01/14-18:52
記事番号28723へのコメント
重複データの発生がやむをえないことで「一律に重複分削除していい」というのがどんな状況なのか、
ちょっと想像しにくいのですが、もし、そういうことがあるなら、ロジックは組めます。

編集表 "A.tbl"
併合 "B.tbl" 絞り込み¥
  ,編集表=しない¥
  ,{[重複不可の項目]照合}
ケース開始
 ケース(.not #終端行)
  行削除 *
ケース終了
絞り込み解除

これを組み込んだ結果、どんなことになっても責任は負いかねますが。

28729 Re:表読込時の重複データの処理 佐田 守弘 2005/01/15-13:42
記事番号28725へのコメント
mimiさん
わたしも野良犬さんの言う通り、併合を使うのが正統な方法だと思います。
表Bのある項目に重複禁止の索引が設定してあるという事は、
その項目でB表のデータをユニークに指定できると言う意味なのだと思います。
ですから、その項目を照合項目として、A表からB表への併合を行うのが本来の方法です。

但しこの質問には、読み込みでどういう読み込みをしたいのかが書いてありません。
たとえばB表のその索引項目に100という値があったとします。
そしてA表の対応する項目にも同じ値があるとします。

この場合に他の項目をどの様に読むのでしょうか。
ケースとして
1)B表のその他の項目はA表のものに置き換える様に読み込む。
 これは通常の挿入・置換の併合で可能です。
2)B表に既にある項目は、A表からは読み込まない。
 挿入だけの併合でできます。
3)その他
 様々な併合の方法がありますから、状況に応じて使えます。

佐田守弘(KS-00119)

28737 Re:表読込時の重複データの処理 mimi 2005/01/16-19:37
記事番号28722へのコメント
宮城さん、野良犬さん、佐田さんコメントいただきありがとうございます。
質問が説明足らずでお手数かけました。

表Aは日々データが追加されていくデーブルで月次単位で新たなデーブルを作成しています。
(1月は表A、2月は表A’・・・という感じ)
この表から特定のデータを抽出し表Bに転記しています。(表Bは月次が更新されても同じ)
表Bの表Aからの読込は月に数回行っており、前回の読込以後ではなく
毎回全てデータ(特定データは抽出後)を読込ませています。読込した日を管理するのがめんどくさいので。
従って、当然重複データは発生します。

みなさんがおっしゃるように今は併合にて表Bと表Aを重複禁止項目で併合(選択)し、その補集合を表Bに読込ませています。

しかし、併合コマンドを使わなくても、読込した時に重複警告で「はい」を選択すれば
重複データを除いて読込んでくれるので、無条件に「はい」を選択すれば問題ないのですが、
誤って「いいえ」を選択した時に一括処理がエラー終了してしまうのが、精神衛生上がまんできないのです。
その時は読込コマンドをキャンセルして次の処理を継続してくれればいいのですが無理みたいですね。
どうもありがとうございました。

28740 Re:表読込時の重複データの処理 佐田 守弘 2005/01/16-22:53
記事番号28737へのコメント
mimiさん
試していないので不確実なコメントです。
読み込みコマンドで終了状態を指定していますでしょうか。

終了状態を指定すれば、一般には一括処理の中断は回避されます。
でもこの場合には、ユーザーが中断を選ぶ様な指示をしているんで、だめかも知れません。

佐田守弘(KS-00119)

基本的には無理筋を通そうとしている様な気がしますが。

28748 Re:表読込時の重複データの処理 mimi 2005/01/18-14:31
記事番号28740へのコメント
佐田さん
>終了状態を指定すれば、一般には一括処理の中断は回避されます。
>でもこの場合には、ユーザーが中断を選ぶ様な指示をしているんで、
>だめかも知れません。
>
>基本的には無理筋を通そうとしている様な気がしますが。
>
おっしゃるとおりです。
終了状態の戻り値は
1.終了した
2.共有違反以外のエラーが発生した
3.他の利用者が実行中
とマニュアルにあります。
このうち2を試してみましたが、無駄でした。
キャンセルを選択をするとコマンド自体を強制終了しているようです。

戻る