CDaoIndexInfo 结构

CDaoIndexInfo 结构包含为数据访问对象 (DAO) 定义的索引对象的相关信息。

语法

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 帮助中的“对属性命名”主题。

m_pFieldInfos
指向 CDaoIndexFieldInfo 对象的数组的指针,这些对象指示哪些 tabledef 或 recordset 字段在索引中是键字段。 每个对象标识索引中的一个字段。 默认索引顺序为升序。 索引对象可以有一个或多个字段,用于表示每个记录的索引键。 这些键可按升序和/或降序排列。

m_nFields
m_pFieldInfos 中存储的字段数。

m_bPrimary
如果 Primary 属性为 TRUE,则索引对象表示主索引。 主索引由一个或多个字段组成,这些字段按照预定义的顺序唯一标识表中的所有记录。 索引字段必须是唯一的,因此在 DAO 中,索引对象的 Unique 属性也设置为 TRUE。 如果主索引包含多个字段,则每个字段可包含重复值,但所有索引字段中的值的每个组合必须是唯一的。 主索引由表的键组成,通常包含与主键相同的字段。

为表设置主键时,主键会自动定义为表的主索引。 有关详细信息,请参阅 DAO 帮助中的“Primary 属性”和“Unique 属性”主题。

注意

一个表最多只能有一个主索引。

m_bUnique
指示索引对象是否表示表的唯一索引。 如果此属性为 TRUE,则索引对象表示唯一的索引。 唯一索引由一个或多个字段组成,这些字段按照唯一的预定义顺序根据逻辑排列表中的所有记录。 如果索引由一个字段组成,则该字段中的值对于整个表来说必须是唯一的。 如果索引包含多个字段,则每个字段可包含重复值,但所有索引字段中的值的每个组合必须是唯一的。

如果索引对象的 Unique 和 Primary 属性都设置为 TRUE,则索引是唯一的主索引:它按照预定义的逻辑顺序唯一标识表中的所有记录。 如果 Primary 属性设置为 FALSE,则索引是辅助索引。 辅助索引(键和非键)按照预定义的顺序根据逻辑来排列记录,不充当表中记录的标识符。

有关详细信息,请参阅 DAO 帮助中的“Primary 属性”和“Unique 属性”主题。

m_bClustered
指示索引对象是否表示表的聚集索引。 如果此属性为 TRUE,则索引对象表示一个聚集索引;否则,表示不是聚集索引。 聚集索引由一个或多个非键字段组成,这些字段被看做是整体,按照预定义的顺序排列表中的所有记录。 使用聚集索引时,表中的数据按聚集索引指定的顺序进行存储。 通过聚集索引可高效访问表中的记录。 有关详细信息,请参阅 DAO 帮助中的“Clustered 属性”主题。

注意

对于使用 Microsoft Jet 数据库引擎的数据库,忽略 Clustered 属性,因为 Jet 数据库引擎不支持聚集索引。

m_bIgnoreNulls
指示其索引字段中是否有具有 Null 值的记录的索引项。 如果此属性为 TRUE,则具有 Null 值的字段没有索引项。 若要更快地使用字段搜索记录,可定义字段的索引。 如果允许索引字段中存在 Null 条目,并且预期很多条目都为 Null,则可将索引对象的 IgnoreNulls 属性设置为 TRUE,以减少索引使用的存储空间量。 IgnoreNulls 和 Required 属性设置共同确定了具有 Null 索引值的记录是否具有索引项,如下表所示。

IgnoreNulls 必需 索引字段中的 Null
True False 允许 Null 值;未添加索引项。
False False 允许 Null 值;已添加索引项。
是或否 True 不允许 Null 值;未添加索引项。

有关详细信息,请参阅 DAO 帮助中的“IgnoreNulls 属性”主题。

m_bRequired
指示 DAO 索引对象是否需要非 Null 值。 如果此属性为 TRUE,则索引对象不允许 Null 值。 有关详细信息,请参阅 DAO 帮助中的“Required 属性”主题。

提示

如果可为 DAO 索引对象或字段对象(通过 tabledef、recordset 或 querydef 对象包含在内)设置此对象,请对字段对象设置。 先检查字段对象的属性设置,再检查索引对象的属性设置。

m_bForeign
指示索引对象是否表示表中的外键。 如果此属性为 TRUE,则索引表示表中的外键。 外键由外表中的一个或多个字段组成,这些字段唯一标识主表中的行。 Microsoft Jet 数据库引擎为外表创建索引对象,并且在你创建强制引用完整性的关系时设置 Foreign 属性。 有关详细信息,请参阅 DAO 帮助中的“Foreign 属性”主题。

m_lDistinctCount
指示关联表中包含的索引对象的唯一值的数目。 检查 DistinctCount 属性来确定索引中唯一值或键的数量。 如果索引允许重复值,则任何键仅计数一次,即使可能多次出现该值也是如此。 在尝试通过评估索引信息来优化数据访问的应用程序中,此信息非常有用。 唯一值的数量也称为索引对象的基数。 DistinctCount 属性并不总是反映特定时间的实际键数。 例如,由事务回滚引起的更改不会立即反映在 DistinctCount 属性中。 有关详细信息,请参阅 DAO 帮助中的“DistinctCount 属性”主题。

注解

上面对 Primary、Secondary 和 All 的引用指示了 CDaoTableDefCDaoRecordset 类中的 GetIndexInfo 成员函数是如何返回信息的。

索引对象不由 MFC 类表示。 相反,构成 CDaoTableDefCDaoRecordset 类的 MFC 对象基础的 DAO 对象包含索引对象的集合,称为索引集合。 这些类提供成员函数来访问索引信息的各个项,你也可通过调用包含对象的 GetIndexInfo 成员函数,使用 CDaoIndexInfo 对象一次性访问所有这些项。

CDaoIndexInfo 具有构造函数和析构函数,以便正确分配和解除分配 m_pFieldInfos 中的索引字段信息。

tabledef 对象的 GetIndexInfo 成员函数检索到的信息存储在 CDaoIndexInfo 结构中。 调用包含 tabledef 的对象的 GetIndexInfo 成员函数;索引对象存储在该对象的索引集合中。 CDaoIndexInfo 还在调试生成中定义了一个 Dump 成员函数。 可使用 Dump 来转储 CDaoIndexInfo 对象的内容。

要求

标头:afxdao.h

另请参阅

结构、样式、回调和消息映射
CDaoTableDef::GetIndexInfo