($title_img_alt)

こちらからの投稿は、先頭に表示されているコメントへの返信になります。
サブファイルの再表示に関して nmkt さん [ 6月22日(月) 14時33分 ]
初めまして。
現在サブファイルを使用した画面を作成しています。
サブファイルのレコードのうち1フィールドが入力可能項目で他は表示のみの項目です。
この入力項目はエラーチェックが不要なので何を入力されてもOKです。
1回実行キーを押すと、更新確認のメッセージをFMT01に表示し、再度実行キーを押されたらデータ
ベースを更新するという流れにしたいのですが、1度目の実行キーを押されたタイミングでサブファ
イルのデータが見えなくなってしまいます…。
ただし、更新確認のメッセージは表示されていて、デバッグするとサブファイル内にレコードもあり
結果としてデータベースも更新できています。
サブファイルの中にレコードがあるのに画面に表示されない原因が全く分かりません。
コントロールレコードでは
20  SFLDSP      
20  SFLDSPCTL   
21  SFLINZ      
と定義していて
WRITEFMT01                   
SETON          20 
SETOF          21 
EXFMTCTL01     
で画面を出力しています。

この標識20を強制的にOFFにするとサブファイルのデータは見えるようになったのですが
ファンクションキーが全く効かなくなってしまったのでこの対応ではダメのようです。

まとまりのない文章で申し訳ありません。
情報が不足しているようでしたらご指摘ください。
何かアドバイスをいただけると幸いです。
ご教授よろしくお願いいたします。              
RE:サブファイルの再表示に関して IKD さん [ 6月22日(月) 16時8分 ]
デバッグすると SFLレコードは存在しているということなので
考えられる原因は

1. SFL があるが表示されているページが正しくない。
2. SFL があるが表示が指示されていない。
3. 上記の 1でも 2でもない場合

のどれかが想定されます。


実行キーを押してSFLが表示されなくなった時点でロール・ダウンー・キー(PageUp)を
押してみてください。
これで SFLが表示されれば
 「1. SFL があるが表示されているページが正しくない。」
であると予想されます。
表示されなければ
  「2. SFL があるが表示が指示されていない。」
であると予想されます。

【解決方法】
1. の場合
====> A            DSPREC         4S 0H      SFLRCDNBR(CURSOR)

      を DDSに追加してつねに DSPREC = 1 を更新してみてください。

2. の場合

  EXFMT CTL01

    の直前で SFLDSP の標識がオンになっていない。

    なお参考までに SFLINZ の意味はおわかりでしょうか ?
    これは SFLINZ を実行すると SFL の中を空の SFLレコードで埋め尽くすという意味で
    通常の SFL処理プログラムではほとんど必要ありません。
    むしろパフォーマンス低下の原因となってしまいますので SFL の処理にまだ
    慣れていない頃は SFLINZ は使わないほうがいいです。
    ( SFLINZ の誤解が多いのは確かです。)

    SFLINZ を使わなくてSFLの一般の処理に不都合を生じることはありません。
    SFLINZ による誤動作の可能性も考えてみてください。
             
RE:サブファイルの再表示に関して nmkt さん [ 6月23日(火) 10時47分 ]
IKD様

アドバイスありがとうございます!
早速確認してみました。

> 1. SFL があるが表示されているページが正しくない。
→次ページ以降でもデータは表示されませんでした。
(SFLRCDNBRはDDSで定義していて1のセットもできていました)

> 2. SFL があるが表示が指示されていない。
→DDSでSFLDSPとSFLDSPCTLに20をつけていて、
直前で標識20をONにしています。

> 3. 上記の 1でも 2でもない場合
こちらのようです・・・。

実は他のプログラムをお手本に作成していまして
それがSFLINZを使用していたのでそのまま使用しています。
標識のつけ方などもそのプログラムと全く同じにしているのに
なぜかサブファイルが表示されず、近くの人に相談したのですが解決の糸口がみつからず
こちらに投稿させていただきました。

1から作り直せば意外とうまくいくのかもしれませんがあまり時間がないため
できれば今のプログラムで解決できたらと思っています。

他に何か思い当たることがありましたらアドバイスいただけますと幸いです。

よろしくお願いいたします。
RE:サブファイルの再表示に関して IKD さん [ 6月23日(火) 14時10分 ]
SETOFF              21 

というのが気になりますが 折角、サブ・ファイル・レコードを出力しているのに
その後でSFLINZ を実行していたのでは、すべてのサブ・ファイルがブランク・レコードで
埋め尽くされてしまうのでご指摘の症状のように

  ・サブ・ファイル・レコードは存在する
  ・しかし画面上はすべて空白である。

のような状態になります。

そこで、デバッグで

  ・サブ・ファイルの出力後に SFLINZ が実行されていないか ?
  ・どこか別の場所で SFLINZ の標識がオンになっていないか ?
     (この可能性が高いです。)

を調べてみてください。どこか他で標識 21がオンになってはいないでしょうか ?

[参考]
サブ・ファイルを正しく理解されていないと ...

  SFLINZ でサブ・ファイルをブランク・レコードで
  埋め尽くしたもののを UPDATE 命令でレコードを更新する、

という手法で書かれているようなプログラムがあります。(過去に見て、大変驚きましたが)
サブ・ファイルの正しい手法はやはり学習されることをお勧めします。

 http://www.as400-net.com/tips/rpg/101.html            
RE:サブファイルの再表示に関して nmkt さん [ 6月24日(水) 11時13分 ]
IKD様

ご丁寧な回答ありがとうございます。
解決いたしました。
大変お恥ずかしいのですが、全フィールドに
35 DSPATR(ND)
がセットされていまして
この35の標識の制御がうまくいってなかったために2回目は非表示になっておりました。

ご指摘の通り、元のプログラムがまさに
  SFLINZ でサブ・ファイルをブランク・レコードで
  埋め尽くしたもののを UPDATE 命令でレコードを更新する
となっておりまして、メインファイルがREADできなくなったら
標識35をONにして全フィールドを非表示にしており、そのまま35がONになったままでした。。
今回、改めてSFLINZの動きを勉強する良い機会となりました。

本当にありがとうございました。

お名前

パスワード

メールアドレス

タイトル

ホームページ

アドレス

項目