Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

姓をキーとして従業員データを検索するプログラムを、素朴に実装した例です。ユーザーが姓またはその一部を指定すると、これに合致する従業員データがリスト・ビューされます。

     ********

...

   Define work variables and browse list to be used
DEFINE     FIELD(#L1COUNT)

...

 TYPE(*DEC)

...

 LENGTH(7)

...

 DECIMALS(0)
DEF_LIST   NAME(#L1)

...

 FIELDS((#SURNAME)

...

 (#GIVENAME)

...

 (#EMPNO)

...

 
           #ADDRESS1))

...

 COUNTER(#L1COUNT)
********

...

   Loop until terminated by EXIT or CANCEL
BEGIN_LOOP
********

...

   Get surname to search for
REQUEST    FIELDS(#SURNAME)
********

...

   Build list of generically identical names
CLR_LIST   NAMED(#L1)
SELECT     FIELDS(#L1)

...

 FROM_FILE(PSLMSTV1)

...

 
           WITH_KEY(#SURNAME)

...

 GENERIC(*YES)
ADD_ENTRY  TO_LIST(#L1)
ENDSELECT
********

...

   If names found, display list to user
IF         COND('

...

#L1COUNT *GT 0')
DISPLAY    BROWSELIST(#L1)
********

...

   else issue error indicating none found
ELSE
MESSAGE    MSGTXT('No employees have a surname
                   matching request')
ENDIF
********

...

   Loop back and request next name to search for
END_LOOP

機能的にはこれで充分ですが、例えば検索キーとして「D」を指定し、これに合致する従業員が800人いたとすればどうなるでしょうか。

この場合、800行ものリストが表示されることになってしまい、ユーザーにとって見にくい上に、相当の時間とコンピュータ資源を要します。

これを解消するため、所定の行数ごとにページで区切って表示する方法がよく使われます。すなわち、条件に合致するレコードを「1ページ分」だけ検索し、これを表示するという方法です。次のページに進むためのキーが押されれば、改めてレコードを検索し、表示することになります。