ロータスアプローチにアプローチ?
アプローチ? ヒント集 サンプル集 当初の開設目的 活用情報掲示板 お知らせ
リンク Links Links 更新履歴 管理人へメール トップページへ サイト内検索

トップページ >> ヒント集 >> 反復パネルを作るその前に 1

 反復パネルを作るその前に 1
 「連結のオプション」でデータの整合性確保

反復パネルは、伝票形式の入力画面によく利用する、便利なフォームビューの一種です。

反復パネルは連結(リレーション)を利用していますが、
この連結は、ちょっと注意しないと、データの整合性が崩れてしまいます。
データの整合性が崩れたリレーショナルデータベースは、
便利どころか、混乱と余計な作業をもたらす、やっかいなしろものになってしまいます。

でも、これから説明する2つのポイントに注意すれば、
リレーショナルデータベースのデータの整合性を維持して、
便利に、快適に、アプローチを利用することができます。


1. サンプルに使う反復パネルは、よくあるパターンのこのようなものです。

2.この反復パネルの構成しているデータベースは、
  下図のように連結しています。

3.さっそく1つ目のポイント、「連結のオプション」です。

  では、「連結のオプション」の画面を開きます。

  そのためには、まず、「販売」データベースの「伝票番号」と、
  「販売明細」データベースの「伝票番号」を結んでいる線(連結ライン)を、
  マウスでクリックします。

  クリックすると下図のように、連結ラインが太く表示されます。

  連結ラインの表示が太くなったら、画面右側の「トリガー」ボタンをクリックして、
  「連結のオプション」画面を開きます。

  なお、連結ラインをクリックして太い表示にしないと、「トリガー」ボタンは
  利用できません。
 [ 余談 ]
 「トリガー」ボタンをクリックして「連結のオプション」画面を開くというのは何か、おかしな感じがします。
 「トリガー」ボタンをクリックして開くのは、「連結のオプション」画面だけですから、
 ボタンの表示を「連結のオプション」に変更すべきだと思いますが...。

4. 「連結のオプション」画面を開くと、下図のように、「削除」にはチェックマークが
  付いていません。

  このままでは、「販売」データベースのあるレコードを削除しても、
  そのレコードに連結している「販売明細」データベースのレコードは削除されずに
  残ってしまいます。
  いわば、伝票の上半分を破って捨て、下半分の明細部分は残こしておくような、
  つじつまの合わない状態になってしまいます。

  このようなことを避けるためには、
  「連結のオプション」画面の上側の「削除」項目に
  チェックマークを付ける必要があります。

5. それでは、ちょっと横道にそれて、「連結のオプション」の「挿入」
  について説明をしましょう。

  通常、連結を設定しただけの場合、「連結のオプション」は下図の設定に
  なっています。
  この設定は、連結の多くのケースにふさわしい設定になっているので
  自動的にこの設定になるのだと思います。

  連結を反復パネルに利用する場合も、データの入力と修正に限れば、
  この設定で反復パネルを利用できます。
  試しに、上図の二つある「挿入」のチェックマークを両方とも消すと、
  反復パネルには入力できなくなります。

  次に、上の「挿入」だけにチェックマークを付けると、
  反復パネルに入力できるようになります。

  今度は、下の「挿入」だけにチェックマークを付けると、
  反復パネルには入力できなくなります。

  これらのことから、上の「挿入」の意味を解釈すると、
  つぎのようになります。

  「販売」データベースの連結フィールドに入力されたデータと同じものが
  「販売明細」データベースの連結フィールドにない場合は、
  「販売明細」データベースに新規レコードを追加する。  

  言い換えると、
  「販売明細」データベースの連結フィールドにはないデータが
  「販売」データベースの連結フィールドに入力されたら、
  「販売明細」データベースに新規レコードを追加する、ということです。

  それで、上の「挿入」にチェックマークを付けると、
  反復パネルを使うことができます。

  また、通常、反復パネルのフォームでは、
  連結フィールドはメインのデータベースに入力するようにし、
  明細側の連結フィールドは表示しませんので、反復パネルでは、
  明細側の連結フィールドの入力・修正ができません。

  (もし、明細側の連結フィールドも入力できるようにしたら、
   データの整合性を崩しましょう、というのと同じで、
   トラブルを起こす原因になります。)   

  したがって、下の「挿入」のチェックマークの有無は、
  反復パネルの動作には影響を与えません。

6. 話をもとに戻して、今度は「削除」の説明をしましょう。

  
「連結のオプション」画面の、上のほうの「削除」にチェックマークを付けると、
  反復パネルのフォーム上で、メインデータベースの「販売」データベースの
  フィールドのどれかをクリックしてから、「レコード」−「削除」と
  クリックすれば、「販売」データベースのそのレコードと、それに連結して
  いる「販売明細」データベースのレコードを削除することができます。

  つまり、上の「削除」にチェックマークを付ければ、
  伝票の上半分を切って捨てても、下半分の明細部を残すようなことは
  起きなくなります。

  次に、下の「削除」ですが、これにチェックマークを付けても、
  反復パネルでは、「連結のオプション」の説明のようには動作しません。

  下の「削除」にチェックマークを付けて、
  反復パネルの明細部のデータを削除しても、そのレコードが削除される
  だけで、メインデータベースのレコードは削除されません。

  現実的には、このように動作してくれるほうが安全です。
  明細データを削除したら、メインのデータも削除されるのでは、
  危険すぎますから。

  ということで、上下ふたつの「削除」にチェックマークを付け、
  「OK」ボタンをクリックします。

   なお、このように設定すると、次のような欠点があるので注意が必要です。

   「販売明細」データベースのレコードを表示するワークシートで、
   「販売明細」データベースのレコードを削除すると、
   それに連結している「販売」データベースのレコードも削除する。

   この場合、「販売明細」と「販売」の各データベースの連結しているレコードが一つずつなら、
   問題はないが、「販売明細」データベースのレコードが複数あると、削除したレコード以外は、
   削除されず、残されたレコードは迷子レコードになってしまう。

   この問題を避けるには、「連結のオブション」で、
   「明細側のレコードを削除するとき、メイン側の一致するレコードを削除する」には
   チェックマークを付けない、
   あるいは、明細データベースのレコードを表示するワークシートは作らない、
   このいずれかの対策が必要です。 ( 2005.9.23 追加 )  
   

  そして「連結」画面の右上の「OK」ボタンをクリックします。

  このように、「連結のオプション」画面で、「削除」にチェックマークを付けると、
  データの削除により、データの整合性が崩れることを防ぐことができるように
  なります。

  言い換えると、「連結のオプション」画面で「削除」にチェックマークを付けない
  まま、メインデータベースのレコードを削除すれば、それに連結していた明細データ
  ベースのレコードは反復パネルには表示されなくなるので、あたかも一緒に削除したの
  だと勘違いしがちです。ところが、明細データベースをレポートに印字したり、
  ワークシートで見たりすると、削除したはずの明細データが、しっかり残っています。

  このようにしてデータの整合性が崩れると、データ全体の信頼性が落ちてしまい、
  そのデータを安心して使うことができなくなります。

  もし、そうなったら、メインデータベースと明細データベースのデータを手作業で
  照合しながら、データの追加・削除などのメンテナンス作業をしなくてはなりません。

  ですので、反復パネルを作ったら、必ず、「連結のオプション」画面で、
  「削除」にチェックマークを付けるようにしましょう。
  このチェックマークを付けるだけで、どれだけムダな作業を減らせるか、
  わかりません。それほど影響の大きい設定です。
  そして、それは、データの信頼性を確保できるということでもあります。


このページでは、データの整合性を保持するために、
反復パネルを作成したら、同時に、「連結のオプション」画面で「削除」に
チェックマークを付ける重要さを説明しました。

次のページでは、データの整合性を保持するためには、
連結を設定する際の、連結フィールドの選択も重要であることを説明します。

1.「連結のオプション」でデータの整合性確保   
2.連結に適したフィールド、適さないフィールド 次のページ
データの整合性を保持するために
データの入っている連結したデータベースの連結フィールドを
切り替える方法については、こちらのページをご覧下さい。
既存データベースの連結フィールドの切り替え

一行目に戻る


since May 20, 2002 :

更新日 :