ホーム   フォーラム   FAQ
 
メインメニュー
ログイン
ユーザー名:

パスワード:


パスワード紛失

レコード削除後の一覧表示が不適切

  • このフォーラムに新しいトピックを立てることはできません
  • このフォーラムではゲスト投稿が禁止されています
depth:
0
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2008-12-10 11:34
kawabata  一人前 居住地: 群馬  投稿数: 86
こんにちは。
皆様のお力をお借りできれば幸いです。
よろしくお願いいたします。

マスタデータを一覧表示し、選択したデータをワークに移し、任意に情報を更新させ、該当するマスタデータを削除した上でワークの内容をマスタに書き込み、一覧表示の画面に戻ります。
この際、一覧表示の並び順が狂う、という現象に悩まされております。
環境は、MAGIC V7.1B2 + Btrieve 6.15 です。

プログラムの構成は下記のようになっております。


タスクA(オンライン):
 マスタのデータを一覧表示。
 一覧は、項目Xを第一キー、項目Yを第二キーとして並んでいます。
 一覧から任意の明細を選択させ、タスクBへ

タスクB(バッチ):
 選択した明細の項目Xと同じ値を持つレコードを抽出し、
 ワークファイルへ書き写す。
 タスクCへ

タスクC(オンライン):
 ワークファイルを一覧表示。
 ユーザーが任意に項目の修正が可能。
 レコードの削除や追加も許している。
 画面に配置した「キャンセル」ボタンをクリックした場合、
 ワークを廃棄し、マスタは更新せず、タスクAに戻る。
 「更新」ボタンを押した場合は、タスクDへ

タスクD(バッチ):
 タスクCで追加と削除を許している都合上、
 タスクBと同じ条件でマスタからレコードを削除。
 タスクEへ

タスクE(バッチ):
 ワークファイルの内容を、マスタファイルへ書き込み。
 タスクAへ戻る


この処理を実行し、タスクEからAに戻った際に、一覧の並び順が狂います。
更新対象となったレコードのみが、逆順に並んでしまいます。(処理されたレコードのみ項目Yが逆順で習います)

いろいろと試してみたところ、おそらくは、タスクDでマスタのレコードを削除していることが影響しているのではないか、という仮説にたどり着いております。
マジックおよびビートリーブのレコード削除に関する特性と私のプログラムの作りにミスマッチがあるのだと思うのですが、こういった動作について、詳しい方がいらっしゃいましたら、ご説明いただけると助かります。
よろしくお願いいたします。

補記:
・一旦プログラムを終えて再度実行すれば、適切な並びで表示されます。
・タスクEからAに戻った後、キーを切り替える、修正モードや照会モードに切り替えるなど、データを展開しなおすような動作も試みましたが、これらでは適切な並び順に戻ることはありませんでした。


長々と申し訳ございません。
なんらかの情報が得られれば幸いです。
投票数:0 平均点:0.00
depth:
1
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2008-12-11 9:26
pu_mahalo  長老 居住地: 大阪  投稿数: 775
こんにちは  Puです

想像ですが Btrieveの問題ではなく
Magicの問題だと推測します。

試しに タスクAをプログラムにし
タスクB、Cを一つのプログラムにし
タスクDもプログラムにし
タスクEもプログラムにして

大元にバッチPGを作成し
それぞれのPGをCALLしたらどうなりますか?
投票数:0 平均点:0.00
depth:
2
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2008-12-11 11:33
kawabata  一人前 居住地: 群馬  投稿数: 86
Puさん、こんにちは。
お力をお借りでき、感謝いたします。

個々のタスクは用途毎にプログラム分けしてありますが、タスクAが大元となり、そこから各タスク(=プログラム)をコールする構成になっております。

puさんのおっしゃる構成のキモは、
新たに大元となるバッチを設け、タスクAも他のタスクと並列になるように並べ、呼び出す。マスタ更新後、タスクAに入りなおすことになるので適切な表示になる、という理解でよいでしょうか?
(プログラムかタスクかというよりも、大元のバッチで個々の処理をコントロールするのがキモ?)
投票数:0 平均点:0.00
depth:
3
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2008-12-11 12:15
pu_mahalo  長老 居住地: 大阪  投稿数: 775
こんにちは   Puです

-------以下引用---------------------------------------
puさんのおっしゃる構成のキモは、
新たに大元となるバッチを設け、タスクAも他のタスクと並列になるように並べ、呼び出す。マスタ更新後、タスクAに入りなおすことになるので適切な表示になる、という理解でよいでしょうか?
(プログラムかタスクかというよりも、大元のバッチで個々の処理をコントロールするのがキモ?)
------------------------------------------------------

そうです(^^
私の検証したい事は MagicがPervasiveのTBLを
CLOSEするタイミングがプログラムの終了レベルと
考えていますので
個々のPGでメインとなるTBLをCLOSEさせたかった訳です
ほとんどバッチ処理なので OPEN CLOSEに伴う
処理速度の劣化はないと思います。
投票数:0 平均点:0.00
depth:
4
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2008-12-11 13:25
kawabata  一人前 居住地: 群馬  投稿数: 86
Puさん、こんにちは。

分かりやすく解説していただきありがとうございました。

ファイルのアクセスや共有(R=読込/W=書出)が異なるタスクへ移動する際に、ファイルのクローズとオープンが発生するものと思っておりました。
今回のプログラムでいえば、一覧表示ではアクセスをR、マスタの更新ではアクセスをWに設定してあります。これによってファイルが一旦クローズされると考えておりました。
どうも認識が誤っていたようですね。

Puさんに教えていただいた方法で試してみます。
結果が確認出来次第、ご報告いたします。
投票数:0 平均点:0.00
depth:
5
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2008-12-11 15:07 | 最終変更
kawabata  一人前 居住地: 群馬  投稿数: 86
Puさん、こんにちは。

教えていただいた方法で正常に表示されました。
助かりました。
ありがとうございました。


少し気になったことがあり追加で試してみました。
Puさんに教えていただいた形で、正常な動作ができたことを確認した上で、新たに設置した大元のバッチタスクで問題のファイルをプレオープンしてみました。
結果、これでも正常な表示になりました。

ということは、ファイルのオープンクローズによる影響ではなかったのではなかろうか、と思えます。
うまく説明できないのですが、当初の現象は、親タスクでつかんでいたレコード(一覧表示していたレコード)を、子タスクで削除・追加してしまったために、親へ戻ったときに、ディスク上の登録しなおしたレコードと表示していたレコードが一致せず生じた現象ではないか、と。
で、一覧に表示されるレコードを読み込みなおすには、一覧のタスクを終えるしか方法がないのかな、などど想像をめぐらせております。
投票数:0 平均点:0.00
depth:
6
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2008-12-11 16:02
pu_mahalo  長老 居住地: 大阪  投稿数: 775
こんにちは Puです

うまく動作してよかったですね

--------------  以下引用 ------------------------
ファイルのアクセスや共有(R=読込/W=書出)が異なるタスクへ移動する際に、ファイルのクローズとオープンが発生するものと思っておりました。
----------------------------------------------------
ISAM(Pervasive等)の場合 アクセスが異なるタスクへ移る場合
基本的にはopen closeオペレーションが発生します。

今回の現象について これが不具合である
と言う断定はできませんが
Magic等のキャッシュやPervasive等のキャッシュが
高速化する為働いていたのかもしれません
投票数:0 平均点:0.00
depth:
7
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2008-12-12 8:40
kawabata  一人前 居住地: 群馬  投稿数: 86
Puさん、こんにちは。

問題も解決し、勉強にもなりました。
ありがとうございました。

また何かありましたら、お力お貸しください。
投票数:0 平均点:0.00

  条件検索へ


Copyright (C) Magic Software Japan K.K. All Rights Reserved.
個人情報保護方針 会員規約