次の方法で共有


CDaoIndexInfo 構造体

CDaoIndexInfo 構造体には、データ アクセス オブジェクト (DAO) に定義されたインデックス オブジェクトに関する情報が含まれています。

Note

DAO は、Office 2013 でサポートされています。 DAO 3.6 は最終バージョンであり、古いと見なされます。

構文

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 プロパティ" に関するトピックを参照してください。

m_pFieldInfos
インデックス内のキー フィールドである tabledef または recordset フィールドを示す CDaoIndexFieldInfo オブジェクトの配列へのポインター。 各オブジェクトで、インデックス内の 1 つのフィールドを識別します。 既定のインデックスの順序は昇順です。 インデックス オブジェクトには、各レコードのインデックス キーを表す 1 つまたは複数のフィールドを含めることができます。 これらは、昇順、降順、またはその組み合わせにすることができます。

m_nFields
m_pFieldInfos に格納されているフィールドの数。

m_bPrimary
Primary プロパティが TRUE の場合、インデックス オブジェクトはプライマリ インデックスを表します。 プライマリ インデックスは、定義済みの順序でテーブル内のすべてのレコードを一意に識別する 1 つまたは複数のフィールドで構成されます。 インデックス フィールドは一意である必要があるため、インデックス オブジェクトの Unique プロパティも DAO では TRUE に設定されます。 プライマリ インデックスが複数のフィールドで構成されている場合、各フィールドには重複する値を含めることができますが、すべてのインデックス付きフィールドの値の各組み合わせは一意である必要があります。 プライマリ インデックスはテーブルのキーで構成され、通常は主キーと同じフィールドが含まれます。

テーブルの主キーを設定すると、その主キーがテーブルのプライマリ インデックスとして自動的に定義されます。 詳細については、DAO ヘルプの "Primary プロパティ" と "Unique プロパティ" に関するトピックを参照してください。

Note

テーブルには、最大で 1 つのプライマリ インデックスを指定できます。

m_bUnique
インデックス オブジェクトがテーブルの一意のインデックスを表すかどうかを示します。 このプロパティが TRUE の場合、インデックス オブジェクトは一意であるインデックスを表します。 一意のインデックスは、テーブル内のすべてのレコードを一意の定義済みの順序で論理的に配置する 1 つまたは複数のフィールドで構成されます。 インデックスが 1 つのフィールドで構成されている場合、そのフィールドの値はテーブル全体で一意である必要があります。 インデックスが複数のフィールドで構成されている場合、各フィールドには重複する値を含めることができますが、すべてのインデックス付きフィールドの値の各組み合わせは一意である必要があります。

インデックス オブジェクトの Unique および Primary の両方のプロパティが TRUE に設定されている場合、インデックスは一意でプライマリになります。テーブル内のすべてのレコードは定義済みの論理的順序で一意に識別されます。 Primary プロパティが FALSE に設定されている場合、インデックスはセカンダリ インデックスになります。 セカンダリ インデックス (キーと非キーの両方) では、テーブル内のレコードの識別子として機能することなく、定義済みの順序でレコードを論理的に配置します。

詳細については、DAO ヘルプの "Primary プロパティ" と "Unique プロパティ" に関するトピックを参照してください。

m_bClustered
インデックス オブジェクトがテーブルのクラスター化インデックスを表すかどうかを示します。 このプロパティが TRUE の場合、インデックス オブジェクトはクラスター化インデックスを表します。それ以外の場合は、そのようになりません。 クラスター化インデックスは、テーブル内のすべてのレコードをまとめて定義済みの順序で配置する 1 つまたは複数の非キー フィールドで構成されます。 クラスター化インデックスでは、テーブル内のデータは文字どおり、クラスター化インデックスで指定された順序で格納されます。 クラスター化インデックスを使用すると、テーブル内のレコードに効率的にアクセスできます。 詳細については、DAO ヘルプの "Clustered プロパティ" に関するトピックを参照してください。

Note

Jet データベース エンジンではクラスター化インデックスがサポートされないため、Microsoft Jet データベース エンジンを使用するデータベースではクラスター化プロパティは無視されます。

m_bIgnoreNulls
インデックス フィールドに Null 値を持つレコードのインデックス エントリがあるかどうかを示します。 このプロパティが TRUE の場合、Null 値を持つフィールドにはインデックス エントリはありません。 フィールドを使用するレコードの検索をより迅速に行うために、そのフィールドに対してインデックスを定義することができます。 インデックス付きフィールドで Null エントリを許可し、エントリの多くが Null と予想される場合は、インデックス オブジェクトの IgnoreNulls プロパティを TRUE に設定し、インデックスで使用される記憶域の量を減らすことができます。 IgnoreNulls プロパティ設定と Required プロパティ設定を組み合わせて使用し、次の表に示されているように、Null インデックス値を持つレコードにインデックス エントリがあるかどうかを判断します。

IgnoreNulls 必須 インデックス フィールドの Null
True False Null 値が許可されます。インデックス エントリは追加されていません。
False False Null 値が許可されます。インデックス エントリが追加されました。
True または False True Null 値は許可されません。インデックス エントリは追加されていません。

詳細については、DAO ヘルプの "IgnoreNulls プロパティ" に関するトピックを参照してください。

m_bRequired
DAO インデックス オブジェクトに Null 以外の値が必要かどうかを示します。 このプロパティが TRUE の場合、インデックス オブジェクトでは Null 値が許可されません。 詳細については、DAO ヘルプの "Required プロパティ" に関するトピックを参照してください。

ヒント

DAO インデックス オブジェクトまたはフィールド オブジェクト (tabledef、recordset、または querydef オブジェクトに含まれる) にこのプロパティを設定できる場合は、フィールド オブジェクトに設定します。 フィールド オブジェクトのプロパティ設定の有効性は、インデックス オブジェクトのものより前に確認されます。

m_bForeign
インデックス オブジェクトがテーブル内の外部キーを表すかどうかを示します。 このプロパティが TRUE の場合、インデックスはテーブル内の外部キーを表します。 外部キーは、プライマリ テーブル内の行を一意に識別する外部テーブル内の 1 つまたは複数のフィールドで構成されます。 Microsoft Jet データベース エンジンにより、外部テーブルのインデックス オブジェクトが作成され、参照整合性を適用するリレーションシップを作成するときに Foreign プロパティが設定されます。 詳細については、DAO ヘルプの "Foreign プロパティ" に関するトピックを参照してください。

m_lDistinctCount
関連付けられたテーブルに含まれるインデックス オブジェクトの一意の値の数を示します。 DistinctCount プロパティを確認し、インデックス内の一意の値 (キー) の数を判別します。 インデックスで重複する値が許可されている場合は、その値が複数回出現する可能性があっても、すべてのキーは 1 回だけカウントされます。 この情報は、インデックス情報を評価してデータ アクセスを最適化しようとするアプリケーションで役立ちます。 一意の値の数は、インデックス オブジェクトのカーディナリティとも呼ばれます。 DistinctCount プロパティでは、特定の時点での実際のキー数が常に反映されるとは限りません。 たとえば、トランザクションのロールバックによって発生した変更は、DistinctCount プロパティにすぐに反映されません。 詳細については、DAO ヘルプの "DistinctCount プロパティ" に関するトピックを参照してください。

解説

上記の Primary、Secondary、All への参照は、クラス CDaoTableDef および CDaoRecordsetGetIndexInfo メンバー関数によって情報が返される方法を示しています。

インデックス オブジェクトは MFC クラスでは表されません。 代わりに、クラス CDaoTableDef または CDaoRecordset の MFC オブジェクトの基になる DAO オブジェクトには、Indexes コレクションと呼ばれるインデックス オブジェクトのコレクションが含まれています。 これらのクラスにより、インデックス情報の個々の項目にアクセスするためのメンバー関数が提供されます。含んでいるオブジェクトの GetIndexInfo メンバー関数を呼び出すことで、CDaoIndexInfo オブジェクトを使用して一度にそれらすべてにアクセスすることもできます。

CDaoIndexInfo には、m_pFieldInfos のインデックス フィールド情報を適切に割り当てて、その解除を行うためのコンストラクターとデストラクターがあります。

tabledef オブジェクトの GetIndexInfo メンバー関数によって取得された情報は、CDaoIndexInfo 構造体に格納されます。 インデックス オブジェクトが格納される Indexes コレクションの含んでいる tabledef オブジェクトの GetIndexInfo メンバー関数を呼び出します。 CDaoIndexInfo では、デバッグ ビルドで Dump メンバー関数も定義します。 Dump を使用して、CDaoIndexInfo オブジェクトの内容をダンプすることができます。

要件

ヘッダー: afxdao.h

関連項目

構造体、スタイル、コールバック関数とメッセージ マップ
CDaoTableDef::GetIndexInfo