4D v16.3セット |
|||||||||||||||||||||||
|
4D v16.3
セット
セット
セットはレコードセレクションを素早くパワフルに操作する方法を提供します。作成したセットに対して、カレントセレクションとの関連付け、書き出し、読み込み、消去の処理が行えるだけでなく、4Dは3つの基本機能を提供しています。
セットはレコードセレクションを簡潔に表現します。セットの概念はカレントセレクションと密接な関連があります。セットは一般的に以下の目的で使用します:
カレントセレクションは、現在選択されている各レコードを指し示す参照のリストです。リストはメモリ上に存在します。現在選択されているレコードのみがリストに含まれます。セレクションは実際にレコードを含んでいるわけではなく、レコードに対する参照リストを保持しているだけです。レコ-ドに対する参照はそれぞれ1レコードに対してメモリを4バイト使用します。テーブルに対して作業を実行する場合にも、常にカレントセレクションのレコード用いて作業を行います。セレクションをソートした場合でも、参照のリストがソートされるだけです。カレントセレクションは1つのプロセス内で各テーブルごとに1つしか存在しません。 カレントセレクションと同様に、セットもレコードセレクションを表わします。セットはこれを行うために、非常にコンパクトなレコード参照を使用します。1レコードに対してメモリを1ビット (1/8バイト) 使用します。コンピュータはビットに対する演算を非常に高速に行うため、セットを使った処理は高速に行われます。セットは、セット内にレコードが含まれているかどうかに関係なく、テーブル上に存在するすべてのレコードに対して1ビットずつ使用します。実際、各ビットは1または0であり、この値はレコードがセット内にあるかどうかを表します。 セットはRAMスペースの面から見ると、非常に経済的です。テーブルのレコード件数を8で割れば、そのテーブルのセットサイズをバイト数で求めることができます。例えば、10,000件のレコードを持つテーブルに対してセットを作成すれば、セットはRAMを1,250バイト (約1.2K) 使用します。 各テーブルに対して複数のセットを持つことができます。またデータベースとは別にセットをディスクに保存することもできます。セットに属するレコ-ドを変更するには、最初にセットをカレントセレクションとして使用し、それから1つまたは複数のレコ-ドを修正します。 セットは、ソートした順番には決してなりません。レコードがセットに含まれるか含まれないかだけを示します。これに対して、命名セレクションはソートの順番を保持することができますが、ほとんどの場合より多くのメモリを必要とします。命名セレクションに関する詳細は、を参照してください。 セットは、セットが作成された時点のカレントレコードを“記憶”しています。以下の表は、カレントセレクションとセットの概念を比較したものです:
セットを作成する際、セットはそれを作成したテーブルに属します。セット演算は同じテーブルに属するセット間でのみ可能です。 セットは実在するデータとは別に存在します。これはテーブルを更新をした後では、セットが正確でなくなる可能性があることを意味します。セットが不正確になる可能性のある処理は数多くあります。例えば、すべての東京出身の人でセットを作成した後でその中の1つのレコードを大阪出身に修正しても、セットは更新されません。これは、セットがレコードのセレクションを表現しているに過ぎないためです。レコードを削除した後で新しいレコードを追加した場合やデータの圧縮なども、セットを不正確にします。セットは、その対応するセレクションのデータが更新されていない場合にのみ正確なものであることが保証されます。 3種類のセットを使用できます:
注:
以下の表はセットのスコープおよびそれが作成された場所による、セットの可視性についてまとめたものです: トランザクション中でセットを作成できます。トランザクション中で作成されたレコードのセットやトランザクションの外で作成・更新されたレコードの セットを作成できます。トランザクションが終了したとき、トランザクション中に作成されたセットはクリアされるべきです。なぜなら、特にトランザクション がキャンセルされた場合、そのセットはレコードセレクションの表現として正しくないものになっているかもしれないからです。 以下の例では、重複する情報を持つレコードをテーブルから削除します。インストールとアクティベーションルー プはカレントレコードと1つ前のレコードの内容を比較する処理をすべてのレコードに対して行います。名前、住所、郵便番号がすべて一致する場合には、その レコードをセットに追加します。ループが終了したところでセットをカレントセレクションにし、カレントセレクションを削除します: CREATE EMPTY SET([People];"Duplicates") メソッドの終りで即座にレコードを削除するのではなく、画面にレコードを表示したり印刷したりして、より詳細な比較を行うこともできます。 4DはUserSetというシステムセットを維持します。UserSetにはユーザによって画面上で最後に選択されたセレクションが自動的に保持されます。したがって、MODIFY SELECTIONやDISPLAY SELECTIONでセレクションを表示し、ユーザにそれから必要なレコードを選択させて、選択結果によるセレクションあるいはセットを作成できます。 4D Server: 名前が"$"で始まっていませんが、UserSetシステムセットはクライアントセットです。そのため、INTERSECTION、UNION、DIFFERENCEで使用する際は、UserSetをクライアントセットと比較していることを確認してください。詳細はこれらのコマンドの説明や、4D Server Referenceマニュアルのの節を参照してください。 UserSetは1つのプロセスに対して1つしかありません。各テーブルごとにUserSetがあるわけではありません。UserSetは、その時点でセレクションを表示しているテーブルに所有されます。 4Dは、デザインモードあるいはMODIFY SELECTIONやDISPLAY SELECTIONコマンドで表示されるリストフォームのUserSetを管理します。ただし、このメカニズムはサブフォームには使用されません。 以下のメソッドはレコードを一覧表示し、ユーザにレコードを選択させ、UserSetを使用してその選択されたレコードを表示します: ` 全レコードを表示し、ユーザに必要なだけレコードを選択させる APPLY TO SELECTION、DELETE SELECTION、そしてARRAY TO SELECTIONコマンドは、マルチプロセス環境で使用された場合、 LockedSet という名前のセットを作成します。
参照
|
プロパティ
プロダクト: 4D
履歴
ARTICLE USAGE
ランゲージリファレンス ( 4D v16) |
|||||||||||||||||||||