回答箱 No.113: コマンド【UNION】の使い方を知りたい

  ◆ 質問箱No.113:  質問者:  元山 よし子    2000年08月 223号 P.12
      ◆ 質問箱 目次へ
No.113-1     コマンド【UNION】の使い方を知りたい  回答者
   丸岡和正
2000-09
224号 P10
  ◆ No.113(2000年8月号)の回答
  PIPSをネットワークで利用して複数のコンピュータから1つのキャビネットを使えるようにするためにはまずWindowsでファイルの共有が出来るようにしなくてはいけません。これをするとキャビネットを「共同」で使える様になります。しかしこれは「キャビネットの共有」ではありません。「共同」で使えると言うことは「同時」に使わなければ一緒に使えますと言うことです。

  PIPSはあるキャビネットを使って作業している時でもキャビネットを「占有」して使っている訳ではありません。GetやPutあるいはバインダー単位のSORTやCSなどページに書込んだり読み込んだりしている時だけキャビネットを「占有」しています。この「占有」している時は、キャビネ ットを構成しているinform.sp2やmaster.sp2などのファイルがopenされた状態になります。

  書込み時にファイルが破壊されるのを防ぐために、あるユーザーがファイルをopenしている時は別のユーザーはファイルをおopen出来ません。従って誰かがGetしている時は、別の人はそのキャビネットを使えません。これをファイルの排他制御と言います。しかしGetが終わってWriteでデータを書き換えたり、CALで計算をしたりしている時はメイン画面で作業しているだけですので、別の人がGetしたりPutしたりできます。

  例えばAさんがあるページをGetしてCALしているとします。その間にBさんが同じページをGetしても問題なくできます。そしてAさんが計算結果をPutした後、BさんがCFで桁数を変更したページをPutしても何のエラーも発生せずに保存できます。しかし、大きな問題が起きてしまいます。

  それはAさんの保存した計算結果の後に、Bさんの計算していない桁数変更しただけのページが上書きされていしまい、Aさんのデータが消えてしまうと言うことです。
  PIPSのネットワークはファイルの排他制御以外何もしていないので、実務で使うには、
  1.100%オートでコントルールする。
  2.運用ルールを作り厳密にルールを守らせる。
のいずれかの出なければ行けません。

1.オートでコントロール
  Index機能をフル活用します。データの読み込みはすべてISEARCHとIREADを、書込みはすべてIWRITEを使います。まずIUSEするとIENDするまでの間キャビネットはopenされたままになり、他の人は使えません。
  その間にIREADやIWRITEやIAPPENDをします。他の人がopenしているキャビネットのIndexをIUSE使用とすると実行可能なエラーが発生します。従ってIUSEする時にエラーをチェックして、キャビネットが使えるようになるまで繰り返しIUSEする様にプログラムします。

2.運用で使う
  この場合例えば「郵便番号簿」のように読み込むだけで書込む必要がないデータは専用のキャビネットを作成して「UNION」の共有設定をします。
  共有設定をしたキャビネットは読込専用になり書込めなくなります。書込みが出来ないのでファイルを保護するために、排他制御する必要がなくなり「同時」にデータが読み込めるようになります。すなわち誰かがそのキャビネットのデータをCAMのサブページとして使用している最中にGetしたりMPUのサブページとして使用できます。UNIONを上手く利用するには1バインダーのキャビネット作成するのがべんりです。

  ネットワークにしてPIPSを利用すると大変便利ですが、その機能をよく理解していないと、思わぬ失敗をしてしまいます。
  慣れるまで重要なデータを利用しないとか、複数のコンピュータで同時利用しないとか気をつける必要があると思います。

戻る