サブファイルの使い方は、入力と照会でやや異なります。ここでは、照会について、細かく説明します。データ入力は、別の機会にします。
サブファイルを使った照会プログラムのロジック
照会したいデータファイル(たとえば、顧客マスタなど)を仮に、「Aファイル」とします。
サブファイルレコードを「SFLRCD」、
サブファイルコントロールレコードを「SFLCTL」、
処理するプログラムを「INQ」とします。これらをもとに、簡単にプログラムINQの基本的なロジックを表現すると、
SFLRCDを初期化(SFLCTLのキーワードを指定)
↓
Aファイルからデータを取り出す
↓
SFLRCDにRRN(相対レコード番号)を一件ずつカウントアップしてRecordを書き出す
↓
必要なだけ、レコードを書き出ししたら、SFLRCDとSFLCTLを表示する
となります。
サブファイルのプログラム内部処理パターン
表示したいファイルを読み込んで、サブファイルを作成して、画面に表示するという単純なことにも、詳しく見ると3つ方法があります。
パターン1 |
Aファイルの全レコードをSFLRCDに書き出して、表示する。 |
パターン2 |
AファイルのデータをSFLRCDの1ページ分読み込んで表示して、ロールアップを押したら、現在の内容をメモリに貯えてから、次の1ページを読み込んで表示して...を繰り返す。ロールダウンは、Aファイルを読まずに、メモリに貯えていた内容を表示する。 |
パターン3 |
AファイルのデータをSFLRCDの1ページ分読み込んで表示して、ロールアップを押したら、現在の内容をメモリに貯えずに、次の1ページを読み込んで表示して...を繰り返す。ロールダウンは、Aファイルを再び、読み込んで表示する。 |
プログラムの難易度
- パターン1が一番簡単で、次が、パターン2、さらにもっとも難しいのがパターン3です。
各パターンの欠点
パターン1 |
たとえば、Aファイルのレコードが5000件あると、表示するまでに時間がかかる。(これは致命的です。) |
パターン2 |
Aファイルが、変動の激しいレコードを含むとすると、ロールアップを押した後、メモリに待避されたレコード内容と、実際のAファイルのレコード内容が違うことになります。 |
パターン3 |
パターン1やパターン2の欠点は克服できますが、プログラムの作成がやや面倒。 |
各パターンのまとめ
|
特徴 |
システム負荷 |
作成難易度 |
パターン1 |
全レコード一括表示 |
大 |
易しい |
パターン2 |
ロールアップごとに1ページ表示して、メモリに格納する |
中 |
普通 |
パターン3 |
ロールアップやロールダウンごとに1ページ表示して、メモリに格納しない。 |
小 |
難しい |
- 慣れた人なら、パターン1など2時間くらいで作成できるでしょう。しかし、パターン1は作成しやすいという長所よりも、全レコード一括処理の時間や資源の無駄使いという短所の方が重いのです。よく、IBMのプログラムのマニュアルには、パターン1が載っていますが、あれは真似しない方がいいでしょう。
- 但し、レコード件数が100件以内のデータ(たとえば、1つの伝票の明細レコードなど)の照会に使用するのであれば、むしろ、パターン1の長所が生かされて、いいと思います。
- ここで、私が強くお勧めするのは、 パターン2とパターン3です。
|