CDaoFieldInfo结构

CDaoFieldInfo结构具有如下形式:
struct CDaoFieldInfo
{
  CString m_strName; // Primary
  short m_nType; // Primary
  long m_lSize; // Primary
  long m_lAttributes; // Primary
  short m_nOrdinalPosition; // Secondary
  BOOL m_bRequired; // Secondary
  BOOL m_bAllowZeroLength; // Secondary
  long m_lCollatingOrder; // Secondary
  CString m_strForeignName; // Secondary
  CString m_strSourceField; // Secondary
  CString m_strSourceTable; // Secondary
  CString m_strValidationRule; // All
  CString m_strValidationText; // All
  CString m_strDefaultValue; // All
};
CDaoFieldInfo结构中包含了为数据访问对象(DAO)定义的字段对象的信息。上面对Primary,Secondary和All的引用指明了CDaoTableDef,CDaoQueryDef和CDaoRecordset类中的GetFieldInfo成员函数是如何返回信息的。
MFC类不代表任何字段对象。相反,DAO对象构成了下面包含字段对象集合的MFC类的对象:CDaoTableDef,CDaoRecordset和CDaoQueryDef。这些类提供了用于访问字段信息中单个项的成员函数,也可以利用CDaoFieldInfo对象以及它的GetFieldInfo成员函数来一次访问所有的信息。
CDaoFieldInfo不仅可以用于检查对象的属性,还可以用于构造一个输入参数,用来创建表中的新字段。对于这个任务,可以使用更简单的选项。但是要想获得更好的控制,可以使用CDaoTableDef::CreateField的带CDaoFieldInfo参数的版本。

成员:
m_strName字段对象的唯一名字。有关的细节参见DAO帮助中的“名字属性”主题。
m_nType一个指明字段数据类型的值。有关的细节参见DAO帮助中的“类型属性”主题。这个属性的取值可能是下列值之一:
·dbBoolean是/否,与TRUE/FALSE相同
·dbByte字节
·dbInteger短整数
·dbLong长整数
·dbCurrencyCurrency,参见MFC类COleCurrency
·dbSingle单精度数
·dbDouble双精度数
·dbDate日期/时间,参见MFC类COleDateTime
·dbText文本,参见MFC类CString
·dbLongBinary长二进制(OLE对象)可能你希望使用MFC类CByteArray来代替CLongBinary,因为CByteArray功能更强,也更易使用
·dbMemo备注,参见MFC类CString。
·dbGUID用于远程过程调用的全局唯一的标识符。更多的信息参见DAO帮助中的“类型属性”主题。 注意:不要对二进制数据使用字符串数据类型。这会使你的数据被传递给Unicode/ANSI转换层,导致负担增加,并且可能会导致不希望出现的转换。
m_lSize指明了包含文本的DAO字段对象的最大大小,以字节为单位,或者是包含了文本或数字值的字段对象的固定大小。有关的细节参见DAO帮助中的“大小属性”主题。大小可能是下列值之一:
类型大小(Bytes)描述
dbBoolean1字节是/否(与TRUE/FALSE相同)
dbByte1字节
dbInteger2整数
dbLong4长整数
dbCurrency8Currency(COleCurrency)
dbSingle4单精度数
dbDouble8双精度数
dbDate8日期/时间(COleDateTime)
dbText1~255文本(CString)
dbLongBinary0长二进制数据(OLE对象,CByteArray,用于代替CLongBinary)
dbMemo0备注(CString)
dbGUID16用于远程过程调用的全局唯一的标识符
m_lAttributes指定了表定义,记录集,查询定义或索引对象中包含的字段对象的特征。返回的值可能是这些值的和,用C++的位或操作符(|)生成:
·dbFixedField字段大小是固定的(数字字段的缺省值)。
·dbVariableField字段大小可变(仅对文本字段成立)。
·dbAutoIncrField新记录的字段值自动增加到一个唯一的长整数,该数不能改变。仅支持Microsoft Jet数据库表。
·dbUpdatableField字段的值可以改变。
·dbDescending字段按照降序(Z~A或100~0)保存(仅适用于索引对象的字段集合中的字段对象。在MFC中,索引对象自己就包含在表定义对象中)。如果你省略了这个常量,字段就按照升序(A~Z或0~100)保存(缺省值)。
在检查这个属性的设置的时候,可以使用C++的位与操作符(&)来测试某个指定的值。在设置多重属性的时候,可以用位或操作符(|)把适当的常量组合起来。有关的细节参见DAO帮助中的“Attribute属性”主题。
m_nOrdinalPosition一个指定了数字顺序的值,将按照这种顺序显示由DAO字段对象所代表的字段。你可以用CDaoTableDef::CreateField来设置这个属性。有关的细节参见DAO帮助中的“OrdinalPosition属性”主题。
m_bRequired指明一个DAO字段对象是否需要非Null值。如果这个属性值为TRUE,那么这个字段不允许有Null值。如果Required被设为FALSE,这个字段就可以有Null值,也可以有符合AllowZeroLength和ValidationRule属性所指定的条件的值。有关的细节参见DAO帮助中的“Required属性”主题。你可以使用CDaoTableDef::CreateField来设置这个属性。
m_bAllowZeroLength指明对于一个文本类型或Memo数据类型的DAO字段对象,空字符串(“”)是否是有效的值。如果这个属性为TRUE,空字符串就是有效值。你可以将这个属性设为FALSE以确保不能将这个字段的值设为空字符串。有关的细节参见DAO帮助中的“AllowZeroLength属性”主题。你可以用CDaoTableDef::CreateField来设置这个属性。
m_lCollatingOrder为字符串比较和排序指定了文本顺序。有关的细节参见DAO帮助中的“为数据访问自定义Windows注册表设置”主题。可能的返回值列表参见CDaoDatabaseInfo结构中的m_lCollatingOrder成员。你可以用CDaoTableDef::CreateField来设置这个属性。
m_strForeignName一个值,在关系中指定了与原始表中的字段对应的外部表中的DAO字段对象的名字。有关的细节参见DAO帮助中的“ForeignName属性”主题。
m_strSourceField指定了一个字段名,是表定义,记录集或查询集对象所包含的DAO字段对象的数据源。例如,你可以使用这个属性来确定一个查询字段的数据源,这个字段的名字与基础表中的字段名无关。有关的细节参见DAO帮助中的“SourceField,SourceTable属性”主题。可以用CDaoTableDef::CreateField来设置这个属性。
m_strSourceTable指定了一个表名,是表定义,记录集或查询集对象的数据源。这个属性指定了与字段对象相关的原始表明。例如,你可以使用这个属性来确定一个查询字段的数据源,这个字段的名字与基础表中的字段名无关。有关的细节参见DAO帮助中的“SourceField,SourceTable属性”主题。你可以用CDaoTableDef::CreateField来设置这个属性。
m_strValidationRule当改变或增加字段的数据时用于检验数据是否有效的值。有关的细节参见DAO帮助中的“ValidationRule属性”主题。你可以用CDaoTableDef::CreateField来设置这个属性。
有关表定义的信息参见CDaoTableDefInfo结构的m_strValidationRule成员。
m_strValidationText一个值,指定了当DAO字段对象的值不符合ValidationRule属性所指定的有效规则时应用程序显示的消息文本。有关的细节参见DAO帮助中的“ValidationText属性”主题。你可以用CDaoTableDef::CreateField来设置这个属性。
m_strDefaultValue一个DAO字段对象的缺省值。当创建了一个新记录时,DefaultValue属性会被作为字段的缺省值自动输入。有关的细节参见DAO帮助中的“DefaultValue属性”主题。你可以用CDaoTableDef::CreateField来设置这个属性。

注释:
通过GetFieldInfo成员函数(属于包含该字段的类)获取的信息保存在CDaoFieldInfo结构中。调用保存了字段对象的包含对象的GetFieldInfo成员函数。在调试版本中,CDaoFieldInfo还定义了一个Dump成员函数。可以使用Dump来转储CDaoFieldInfo对象的内容。
有关这个结构以及其他MFC DAO Info结构的使用,参见“Visual C++程序员指南”中的文章“DAO集合:获取DAO对象的信息”。

请参阅:
CDaoTableDef::GetFieldInfo, CDaoRecordset::GetFieldInfo, CDaoQueryDef::GetFieldInfo