CDaoIndexInfo结构

CDaoIndexInfo 结构具有如下形式:
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
};
CDaoIndexInfo结构中包含了有关为数据访问对象(DAO)定义的索引对象的信息。上面对Primary,Secondary和All的引用指明了CDaoTableDef和CDaoRecordset类的成员函数GetIndexInfo是符合返回信息的。
MFC类不代表索引对象。相反,DAO对象构成了属于CDaoTableDef或CDaoRecordset类的MFC对象,它们包含了索引对象的集合,称为索引集合。
这些类提供了用于访问索引信息的单个项的成员函数,还可以调用包含对象的GetIndexInfo成员函数,利用CDaoIndexInfo对象同时访问所有项。
CDaoIndexInfo具有一个构造函数和一个析构函数,用于适当地分配和释放m_pFieldInfos中的索引字段信息。

成员:
m_strName字段对象的唯一名字。有关的细节参见DAO帮助中的“Name属性”主题。
m_pFieldInfos指向一个CDaoIndexFieldInfo对象数组的指针,该数组指明了表定义或记录集中哪个字段是索引的关键字段。每个对象标识了索引中的一个字段。缺省的索引顺序是升序。一个索引对象可以具有一个或多个索引关键字段。它们可以是升序,降序或其组合。
m_nFieldsm_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索引值的记录是否具有索引项,如下面的表格所示:
IgnoreNullsRequired索引字段中的Null
TrueFalse允许有Null值,但没有索引项
FalseFalse允许有Null值,有索引项
True或FalseTrue不允许有Null值,没有索引项
更多的信息参见DAO帮助中的“IgnoreNulls属性”主题。
m_bRequired指明一个DAO索引对象是否要求非Null值。如果这个属性为TRUE,那么索引对象不允许有Null值。更多的信息参见DAO帮助中的“Required属性”主题。
Tip当你能够为DAO索引对象或字段对象(被表定义,记录集或查询定义对象所包含)设置这个属性的时候,就为字段对象设置这个属性。为字段对象设置的属性的有效性检查将在索引对象之前进行。
m_bForeign指明索引对象是否代表了表中的一个外部关键字。如果这个属性为TRUE,则索引对象代表了表中的外部关键字。外部关键字由外部表中的一个或多个字段组成,他唯一确定了主表中的行。当你创建一个要求引用完整性的关系时,Microsoft Jet数据库引擎为外部表创建一个索引对象并设置Foreign属性。更多的信息参见DAO帮助中的“Foreign属性”主题。
m_lDistinctCount指定了相关表中包含的索引对象的唯一值的数目。检查DistinctCount属性以确定索引中唯一值或键的数目。每个键只被计数一次,即使在索引允许重复值时,它们多次出现。这个信息对于试图通过统计索引信息来优化数据访问的应用程序非常有用。唯一值的数目还被当作索引对象的势。DistinctCount属性并不总是反映某一时刻关键字的数目。例如,由于取消事务所引起的改变不会被DistinctCount属性立即反映。更多的信息参见DAO帮助中的“DistinctCount属性”主题。

注释:
用表定义对象的GetIndexInfo成员函数获得的信息被保存在CDaoIndexInfo结构中。调用包含了索引对象的表定义对象的GetIndexInfo成员函数。在调试版本中CDaoIndexInfo还定义了一个Dump成员函数。你可以使用Dump来转储CDaoIndexInfo对象的内容。
有关这个结构以及其他MFC DAO Info结构的使用,参见“Visual C++程序员指南”中的文章“DAO集合:获取DAO对象的信息”。

请参阅:CDaoTableDef::GetIndexInfo