CDaoIndexInfo 構造体
更新 : 2007 年 11 月
CDaoIndexInfo 構造体は、データ アクセス オブジェクト (DAO: Data Access Objects) 用に定義されたインデックス オブジェクトについての情報を保持します。
struct CDaoIndexInfo {
CDaoIndexInfo( ); // Constructor
CString m_strName; // Primary
CDaoIndexFieldInfo* m_pFieldInfos; // Primary
short m_nFields; // Primary
BOOL m_bPrimary; // Secondary
BOOL m_bUnique; // Secondary
BOOL m_bClustered; // Secondary
BOOL m_bIgnoreNulls; // Secondary
BOOL m_bRequired; // Secondary
BOOL m_bForeign; // Secondary
long m_lDistinctCount; // All
// Below the // Implementation comment:
// Destructor, not otherwise documented
};
パラメータ
m_strName
フィールド オブジェクトの一意名。詳細については、DAO ヘルプの「Name Property」を参照してください。m_pFieldInfos
テーブル定義またはレコードセット フィールドのどのフィールドがキー フィールドとしてインデックスに設定されているかを示す、CDaoIndexFieldInfo オブジェクト配列へのポインタを示します。各オブジェクトはインデックスの 1 つのフィールドを表しています。既定のインデックスの順序は昇順です。インデックス オブジェクトは各レコードのインデックス キーを表すフィールドを 1 つ以上持つことができます。昇順、降順、または組み合わせで使用できます。m_nFields
m_pFieldInfos に格納されたフィールド数を示します。m_bPrimary
Primary プロパティが TRUE のときは、インデックス オブジェクトはプライマリ インデックスを表します。プライマリ インデックスは、あらかじめ定義された順序でテーブル内のすべてのレコードを一意に識別する 1 つ以上のフィールドで構成されます。インデックス フィールドは一意でなければならないので、インデックス オブジェクトの Unique プロパティも DAO では TRUE に設定されます。プライマリ インデックスが複数のフィールドで構成されている場合は、各フィールドに重複する値を指定できますが、すべてのインデックス フィールドの値の組み合わせのそれぞれについては、一意にする必要があります。テーブルのキーで構成されるプライマリ インデックスは、通常、主キーと同じフィールドを持ちます。テーブルに主キーを設定したとき、主キーはテーブルのプライマリ インデックスとして自動的に定義されます。詳細については、DAO ヘルプの「Primary Property」と「Unique Property」を参照してください。
メモ : 1 つのテーブルに設定できるプライマリ インデックスは 1 つだけです。
m_bUnique
インデックス オブジェクトがテーブルの一意なインデックスを表すかどうかを示します。このプロパティが TRUE のとき、インデックス オブジェクトは一意のインデックスを表します。一意のインデックスは、あらかじめ定義されている一意の順序でテーブル内の全レコードを論理的に整列する 1 つ以上のフィールドから構成されます。インデックスが 1 つのフィールドで構成されているときは、そのフィールドの値はテーブル全体で一意であることが必要です。インデックスが複数のフィールドで構成されているときは、各フィールドが重複した値を持つことはできますが、すべてのインデックス フィールドの値の各組み合わせが一意であることが必要です。インデックス オブジェクトの Unique プロパティと Primary プロパティがともに TRUE に設定されていると、インデックスは一意でまたプライマリになります。つまり、テーブル内のすべてのレコードをあらかじめ定義された論理的な順序で一意に識別するインデックスになります。Primary プロパティが FALSE に設定されているときは、インデックスはセカンダリ インデックスになります。セカンダリ インデックス (キーもキー以外も) は、あらかじめ定義された順序でレコードを整列しますが、テーブル内のレコードの識別子としては機能しません。
詳細については、DAO ヘルプの「Primary Property」と「Unique Property」を参照してください。
m_bClustered
インデックス オブジェクトがテーブルのクラスタ化インデックスを表すかどうかを示します。このプロパティが TRUE のときは、インデックス オブジェクトはクラスタ化インデックスを表します。それ以外の場合は、クラスタ化インデックスではありません。クラスタ化インデックスは、テーブル内の全レコードをあらかじめ定義された順序で整列する 1 つ以上の非キー フィールドで構成されます。クラスタ化インデックスでは、文字どおりクラスタ化インデックスが指定する順序でテーブル内のデータが格納されます。クラスタ化インデックスは、テーブル内のレコードに効果的にアクセスできます。詳細については、DAO ヘルプの「Clustered Property」を参照してください。メモ : Microsoft Jet データベース エンジンは、クラスタ化インデックスをサポートしていないため、Jet データベース エンジンを使用するデータベースでは Clustered プロパティが無視されます。
m_bIgnoreNulls
インデックス フィールドに Null の値を持つレコードのインデックス エントリがあるかどうかを示します。このプロパティが TRUE のときは、Null 値を持つフィールドはインデックス エントリを持てません。フィールドを使ってレコード検索を高速化するためにフィールドのインデックスを定義できます。インデックス フィールドが Null のエントリを許し、多くのエントリが Null のときは、インデックス オブジェクトの IgnoreNulls プロパティに TRUE を設定して、インデックスが使う記憶空間の量を減少させることができます。次のテーブルに示すように、IgnoreNulls プロパティと Required プロパティの設定で Null インデックスを持つレコードがインデックス エントリを持つかどうかを決定します。IgnoreNulls
Required
インデックス フィールド内の Null 値
True
False
Null の値は許されます。インデックス エントリは追加されません。
False
False
Null の値は許されます。インデックス エントリが追加されます。
True または False
True
Null の値は許されません。インデックス エントリは追加されません。
詳細については、DAO ヘルプトピックの「IgnoreNulls Property」を参照してください。
m_bRequired
DAO インデックス オブジェクトが Null 以外の値を必要としているかどうかを示します。このプロパティが TRUE のとき、インデックス オブジェクトは Null の値を許可しません。詳細については、DAO ヘルプの「Required Property」を参照してください。ヒント : このプロパティを DAO のインデックス オブジェクトとフィールド オブジェクト (テーブル定義、レコードセット、またはクエリ定義の各オブジェクトに含まれる) の両方に対して設定できる場合は、フィールド オブジェクトに対して設定してください。インデックス オブジェクトのプロパティよりも先に、フィールド オブジェクトのプロパティの有効性が検査されます。
m_bForeign
インデックス オブジェクトがテーブルの外部キーを表すかどうかを示します。このプロパティが TRUE のときは、インデックスはテーブルの外部キーを表します。外部キーは、主テーブルの行を一意に識別する外部キー テーブルの 1 つ以上のフィールドから構成されます。Microsoft Jet データベース エンジンは外部キーテーブルのインデックス オブジェクトを作成し、そして参照整合性を持たせるリレーションシップを作成するときに Foreign プロパティを設定します。詳細については、DAO ヘルプの「Foreign Property」を参照してください。m_lDistinctCount
関係したテーブルに含まれているインデックス オブジェクトの一意な値の数を示します。インデックスの一意な値またはキーの数を調べるために DistinctCount プロパティをチェックしてください。インデックスが重複する値を許可しているときにその値が複数回現れても、キーがカウントされるのは一度だけです。この情報はインデックス情報を評価することによりデータ アクセスを最適化しようとするアプリケーションで有用です。一意な値の数は、インデックス オブジェクトのカーディナリティとも呼ばれます。DistinctCount プロパティは、特定の時点におけるキーの数をいつでも確実に反映しているわけではありません。たとえば、トランザクション ロールバックによる変更は DistinctCount プロパティにはすぐに反映されません。詳細については、DAO ヘルプの「DistinctCount Property」を参照してください。
解説
上の "プライマリ"、"セカンダリ"、および "すべて" は、CDaoTableDef および CDaoRecordset クラスで、GetIndexInfo メンバ関数によってどの情報が返されるかを示しています。
MFC クラスでは、インデックス オブジェクトを表していません。代わりに、CDaoTableDef クラスまたは CDaoRecordset クラスの MFC オブジェクトに基づく DAO オブジェクトが、Indexes コレクションと呼ばれるインデック オブジェクトのコレクションを保持します。これらのクラスは、インデックス情報の各アイテムにアクセスするメンバ関数を提供しています。また、上の 2 つの MFC オブジェクトの GetIndexInfo メンバ関数を呼び出して CDaoIndexInfo オブジェクトを取得し、これらのアイテムに一度にアクセスすることもできます。
CDaoIndexInfo は、m_pFieldInfos のインデックス フィールド情報を適切に割り当て、解放するためにコンストラクタとデストラクタを持っています。
テーブル定義オブジェクトの GetIndexInfo メンバ関数で取得した情報が CDaoIndexInfo 構造体に格納されます。目的のインデックス オブジェクトが属している Indexes コレクションを持つテーブル定義オブジェクトに対して GetIndexInfo を呼び出してください。デバッグ用のビルドでは、CDaoIndexInfo は Dump メンバ関数も定義しています。Dump 関数を使って CDaoIndexInfo オブジェクトの内容をダンプできます。
必要条件
ヘッダー : afxdao.h