CDaoTableDef 类

表示基表或附加表的已存储定义。

语法

class CDaoTableDef : public CObject

成员

公共构造函数

名称 描述
CDaoTableDef::CDaoTableDef 构造 CDaoTableDef 对象。

公共方法

名称 描述
CDaoTableDef::Append 向数据库添加新表。
CDaoTableDef::CanUpdate 如果表可以更新,则返回非零(可以修改字段的定义或表属性)。
CDaoTableDef::Close 关闭已打开的 tabledef。
CDaoTableDef::Create 创建可以使用 Append 添加到数据库的表。
CDaoTableDef::CreateField 调用以为表创建字段。
CDaoTableDef::CreateIndex 调用以为表创建索引。
CDaoTableDef::DeleteField 调用以从表中删除字段。
CDaoTableDef::DeleteIndex 调用以从表中删除索引。
CDaoTableDef::GetAttributes 返回一个值,该值指示 CDaoTableDef 对象的一个或多个特征。
CDaoTableDef::GetConnect 返回一个值,该值提供有关表源的信息。
CDaoTableDef::GetDateCreated 返回创建 CDaoTableDef 对象基础基表的日期和时间。
CDaoTableDef::GetDateLastUpdated 返回最近对基表设计所做的更改的日期和时间。
CDaoTableDef::GetFieldCount 返回一个值,该值表示表中的字段数。
CDaoTableDef::GetFieldInfo 返回有关表中字段的特定类型的信息。
CDaoTableDef::GetIndexCount 返回表的索引数。
CDaoTableDef::GetIndexInfo 返回有关表索引的特定类型的信息。
CDaoTableDef::GetName 返回表的用户定义名称。
CDaoTableDef::GetRecordCount 返回表中的记录数。
CDaoTableDef::GetSourceTableName 返回一个值,该值指定源数据库中附加表的名称。
CDaoTableDef::GetValidationRule 返回一个值,当一个字段被更改或被添加到表中时,用于验证该字段中的数据。
CDaoTableDef::GetValidationText 返回一个值,该值指定如果 Field 对象的值不满足指定的验证规则,应用程序将显示的消息文本。
CDaoTableDef::IsOpen 如果表处于打开状态,则返回非零。
CDaoTableDef::Open 打开存储在数据库的 TableDef 集合中的现有 tabledef。
CDaoTableDef::RefreshLink 更新附加表的连接信息。
CDaoTableDef::SetAttributes 设置一个值,该值指示 CDaoTableDef 对象的一个或多个特征。
CDaoTableDef::SetConnect 设置一个值,该值提供有关表源的信息。
CDaoTableDef::SetName 设置表的名称。
CDaoTableDef::SetSourceTableName 设置一个值,该值指定源数据库中附加表的名称。
CDaoTableDef::SetValidationRule 设置一个值,当一个字段被更改或被添加到表中时,用于验证该字段中的数据。
CDaoTableDef::SetValidationText 设置一个值,该值指定如果 Field 对象的值不满足指定的验证规则,应用程序将显示的消息文本。

公共数据成员

“属性” 描述
CDaoTableDef::m_pDAOTableDef 指向 tabledef 对象基础 DAO 接口的指针。
CDaoTableDef::m_pDatabase 此表的源数据库。

备注

每个 DAO 数据库对象都维护一个名为 TableDefs 的集合,该集合包含所有已保存的 DAO tabledef 对象。

使用 CDaoTableDef 对象操作表定义。 例如,可以:

  • 检查数据库中任何本地表、附加表或外部表的字段和索引结构。

  • 为附加表调用 SetConnectSetSourceTableName 成员函数,并使用 RefreshLink 成员函数更新与附加表的连接。

  • 调用 CanUpdate 成员函数以确定是否可以编辑表中的字段定义。

  • 使用 GetValidationRuleSetValidationRule 以及 GetValidationTextSetValidationText 成员函数获取或设置验证条件。

  • 使用 Open 成员函数创建表类型、动态集类型或快照类型的 CDaoRecordset 对象。

    注意

    DAO 数据库类不同于基于开放式数据库连接 (ODBC) 的 MFC 数据库类。 所有 DAO 数据库类名都具有“CDao”前缀。 你仍然可以使用 DAO 类访问 ODBC 数据源;DAO 类通常提供卓越的功能,因为它们是 Microsoft Jet 数据库引擎所特有的。

使用 tabledef 对象处理现有表或创建新表

  1. 在所有情况下,首先构造一个 CDaoTableDef 对象,提供指向表所属的 CDaoDatabase 对象的指针。

  2. 然后,根据需要执行以下操作:

    • 若要使用现有的已保存表,请调用 tabledef 对象的 Open 成员函数,并提供已保存表的名称。

    • 若要创建新表,请调用 tabledef 对象的 Create 成员函数,并提供表名称。 调用 CreateFieldCreateIndex 以向表添加字段和索引。

    • 调用 Append,通过将表追加到数据库的 TableDefs 集合来保存该表。 Create 将 tabledef 置于打开状态,因此在调用 Create 后不会调用 Open

      提示

      创建已保存表的最简单方法是使用 Microsoft Access 创建表并将其存储在数据库中。 然后,就可以在 MFC 代码中打开和使用它们了。

若要使用已打开或已创建的 tabledef 对象,请创建并打开一个 CDaoRecordset 对象,用 nOpenType 参数中的 dbOpenTable 值指定 tabledef 的名称。

若要使用 tabledef 对象创建 CDaoRecordset 对象,通常要创建或打开 tabledef(如上所述),然后构造一个 recordset 对象,在调用 CDaoRecordset::Open 时将指针传递给 tabledef 对象。 传递的 tabledef 必须处于打开状态。 有关详细信息,请参阅 CDaoRecordset 类。

使用完 tabledef 对象后,调用其 Close 成员函数;然后销毁 tabledef 对象。

继承层次结构

CObject

CDaoTableDef

要求

标头:afxdao.h

CDaoTableDef::Append

调用 Create 以创建新的 tabledef 对象后,调用此成员函数,以在数据库中保存 tabledef。

virtual void Append();

备注

该函数将对象追加到数据库的 TableDefs 集合中。 在定义 tabledef 时,可以通过不追加它来将其用作临时对象,但如果想保存并使用它,必须调用 Append

注意

如果尝试追加未命名的 tabledef(包含 null 或空字符串),MFC 将引发异常。

有关信息,请参阅 DAO 帮助中的主题“Append 方法”。

CDaoTableDef::CanUpdate

调用此成员函数以确定是否可以更改 CDaoTableDef 对象基础表的定义。

BOOL CanUpdate();

返回值

如果可以修改表结构(架构)(添加或删除字段和索引),则为非零值;否则为 0。

备注

默认情况下,可以更新新创建的 CDaoTableDef 对象基础表,而无法更新 CDaoTableDef 对象基础附加表。 即使生成的记录集不可更新,CDaoTableDef 对象也可以更新。

要了解相关信息,请参阅 DAO 帮助中的主题“Updatable 属性”。

CDaoTableDef::CDaoTableDef

构造 CDaoTableDef 对象。

CDaoTableDef(CDaoDatabase* pDatabase);

参数

pDatabase
指向 CDaoDatabase 对象的指针。

备注

构造对象后,必须调用 CreateOpen 成员函数。 完成对象的构造后,必须调用其 Close 成员函数,然后销毁 CDaoTableDef 对象。

CDaoTableDef::Close

调用此成员函数以关闭并释放 tabledef 对象。

virtual void Close();

备注

通常,在调用 Close 后,如果 tabledef 对象已分配有 new,则删除该对象。

可以在调用 Close 后再次调用 Open。 这样,便可以重复使用 tabledef 对象。

有关信息,请参阅 DAO 帮助中的主题“Close 方法”。

CDaoTableDef::Create

调用此成员函数以创建新的已保存表。

virtual void Create(
    LPCTSTR lpszName,
    long lAttributes = 0,
    LPCTSTR lpszSrcTable = NULL,
    LPCTSTR lpszConnect = NULL);

参数

lpszName
指向包含表名称的字符串的指针。

lAttributes
对应于由 tabledef 对象表示的表特征的值。 可以使用按位或组合以下任意常量:

常量 说明
dbAttachExclusive 对于使用 Microsoft Jet 数据库引擎的数据库,指示表是处于打开状态的专用附加表。
dbAttachSavePWD 对于使用 Microsoft Jet 数据库引擎的数据库,指示附加表的用户 ID 和密码随连接信息一起保存。
dbSystemObject 指示表是 Microsoft Jet 数据库引擎提供的系统表。
dbHiddenObject 指示表是 Microsoft Jet 数据库引擎提供的隐藏表。

lpszSrcTable
指向包含源表名称的字符串的指针。 默认情况下,此值被初始化为 NULL。

lpszConnect
指向一个字符串的指针,该字符串包含默认连接字符串。 默认情况下,此值被初始化为 NULL。

备注

为 tabledef 命名后,可以调用 Append 以在数据库的 TableDefs 集合中保存 tabledef。 调用 Append 后,tabledef 处于打开状态,可以使用它来创建 CDaoRecordset 对象。

要了解相关信息,请参阅 DAO 帮助中的主题“CreateTableDef 方法”。

CDaoTableDef::CreateField

调用此成员函数,将字段添加到表中。

void CreateField(
    LPCTSTR lpszName,
    short nType,
    long lSize,
    long lAttributes = 0);

void CreateField(CDaoFieldInfo& fieldinfo);

参数

lpszName
指向一个字符串表达式的指针,该字符串表达式指定了此字段的名称。

nType
一个指示字段的数据类型的值。 设置可以是以下值之一:

类型 大小(字节) 说明
dbBoolean 1 个字节 BOOL
dbByte BYTE
dbInteger 2 int
dbLong 4 long
dbCurrency 8 货币 ( COleCurrency)
dbSingle 4 float
dbDouble 8 Double
dbDate 8 日期/时间 ( COleDateTime)
dbText 1 - 255 文本 ( CString)
dbLongBinary 0 长二进制(OLE 对象)、CLongBinaryCByteArray
dbMemo 0 备注 ( CString)

lSize
一个值,该值指示包含文本的字段的最大大小(以字节为单位),或者包含文本或数值的字段的固定大小。 除了文本字段之外,所有字段都忽略 lSize 参数。

lAttributes
一个对应于字段特征的值,可以使用按位或进行组合。

常量 说明
dbFixedField 字段大小是固定的(数值字段的默认值)。
dbVariableField 字段大小是可变的(仅限文本字段)。
dbAutoIncrField 新记录的字段值会自动递增为一个无法更改的唯一长整型。 仅支持用于 Microsoft Jet 数据库表。
dbUpdatableField 字段值可以更改。
dbDescending 该字段按降序(Z - A 或 100 - 0)顺序排序(仅适用于 Index 对象的 Fields 集合中的 Field 对象)。 如果省略此常量,则字段按升序(A - Z 或 0 - 100)顺序排序(默认)。

fieldinfo
CDaoFieldInfo 结构的引用。

备注

会创建 DAOField (OLE) 对象并将其追加到 DAOTableDef (OLE) 对象的 Fields 集合中。 除了用于检查对象属性之外,你还可以使用 CDaoFieldInfo 来构造输入参数,用于在 tabledef 中创建新字段。 第一个版本的 CreateField 使用更简单,但如果想要更精细的控制,可以使用 CreateField 的第二个版本,该版本采用了 CDaoFieldInfo 参数。

如果使用采用了 CDaoFieldInfo 参数的 CreateField 版本,必须仔细设置 CDaoFieldInfo 结构中的以下每个成员:

  • m_strName

  • m_nType

  • m_lSize

  • m_lAttributes

  • m_bAllowZeroLength

CDaoFieldInfo 的其余成员应根据成员的情况设置为 0、FALSE 或空字符串,否则可能发生 CDaoException

要了解相关信息,请参阅 DAO 帮助中的主题“CreateField 方法”。

CDaoTableDef::CreateIndex

调用此函数以向表添加索引。

void CreateIndex(CDaoIndexInfo& indexinfo);

参数

indexinfo
CDaoIndexInfo 结构的引用。

注解

索引指定从数据库表访问的记录的顺序,以及是否接受重复记录。 索引还提供对数据的有效访问。

你不需要为表创建索引,但在未编制索引的大型表中,访问特定记录或创建记录集可能需要很长时间。 另一方面,创建过多的索引会减缓更新、追加和删除操作的速度,因为所有索引都会自动更新。 在确定要创建的索引时,请考虑这些因素。

必须设置 CDaoIndexInfo 结构的以下成员:

  • m_strName 必须提供名称。

  • m_pFieldInfos 必须指向 CDaoIndexFieldInfo 结构的数组。

  • m_nFields 必须指定 CDaoFieldInfo 结构的数组中的字段数。

如果设置为 FALSE,将忽略其余的成员。 此外,创建索引期间会忽略 m_lDistinctCount 成员。

CDaoTableDef::DeleteField

调用此成员函数以删除字段并使其无法访问。

void DeleteField(LPCTSTR lpszName);
void DeleteField(int nIndex);

参数

lpszName
指向一个字符串表达式的指针,该字符串表达式是一个现有字段的名称。

nIndex
表从零开始的 Fields 集合中字段的索引,用于按索引查找。

备注

当一个新对象还没有被追加到数据库中,或者当 CanUpdate 返回非零值时,可以对该对象使用此成员函数。

要了解相关信息,请参阅 DAO 帮助中的主题“Delete 方法”。

CDaoTableDef::DeleteIndex

调用此成员函数以删除基础表中的索引。

void DeleteIndex(LPCTSTR lpszName);
void DeleteIndex(int nIndex);

参数

lpszName
指向一个字符串表达式的指针,该字符串表达式是一个现有索引的名称。

nIndex
数据库从零开始的 TableDefs 集合中索引对象的数组索引,用于按索引查找。

注解

当一个新对象还没有被追加到数据库中,或者当 CanUpdate 返回非零值时,可以对该对象使用此成员函数。

要了解相关信息,请参阅 DAO 帮助中的主题“Delete 方法”。

CDaoTableDef::GetAttributes

对于 CDaoTableDef 对象,返回值指定了由 CDaoTableDef 对象表示的表的特征,可以是以下常量之和:

long GetAttributes();

返回值

返回一个值,该值指示 CDaoTableDef 对象的一个或多个特征。

备注

常量 说明
dbAttachExclusive 对于使用 Microsoft Jet 数据库引擎的数据库,指示表是处于打开状态的专用附加表。
dbAttachSavePWD 对于使用 Microsoft Jet 数据库引擎的数据库,指示附加表的用户 ID 和密码随连接信息一起保存。
dbSystemObject 指示表是 Microsoft Jet 数据库引擎提供的系统表。
dbHiddenObject 指示表是 Microsoft Jet 数据库引擎提供的隐藏表。
dbAttachedTable 指示表是一个非 ODBC 数据库(如 Paradox 数据库)中的附加表。
dbAttachedODBC 指示表是一个 ODBC 数据库(如 Microsoft SQL 数据库)中的附加表。

系统表是由 Microsoft Jet 数据库引擎创建的表,包含各种内部信息。

隐藏表是为 Microsoft Jet 数据库引擎临时使用而创建的表。

要了解相关信息,请参阅 DAO 帮助中的主题“Attributes 属性”。

CDaoTableDef::GetConnect

调用此成员函数以获取数据源的连接字符串。

CString GetConnect();

返回值

包含表的路径和数据库类型的 CString 对象。

备注

对于表示附加表的 CDaoTableDef 对象,CString 对象由一个或两个部分组成(数据库类型说明符和数据库路径)。

下表中所示的路径是包含数据库文件的目录的完整路径,前面必须有标识符“DATABASE=”。 在某些情况下,(与 Microsoft Jet 和 Microsoft Excel 数据库一样),特定文件名包含在数据库路径参数中。

CDaoTableDef::SetConnect 中的表显示了可能的数据库类型及相应的数据库说明符和路径:

对于 Microsoft Jet 数据库基表,说明符是一个空字符串 ("")。

如果需要密码但未提供密码,ODBC 驱动程序会在首次访问表时显示一个登录对话框,如果连接已关闭并重新打开,则会再次显示登录对话框。 如果附加表具有 dbAttachSavePWD 属性,则重新打开表时不会显示登录提示。

要了解相关信息,请参阅 DAO 帮助中的主题“Connect 属性”。

CDaoTableDef::GetDateCreated

调用此函数以确定创建 CDaoTableDef 对象基础表的日期和时间。

COleDateTime GetDateCreated();

返回值

一个包含创建 CDaoTableDef 对象基础表的日期和时间的值。

注解

日期和时间设置派生自创建或上次更新基表的计算机。 在多用户环境中,用户应直接从文件服务器获取这些设置,以避免差异;也就是说,所有客户端都应使用“标准”时间源(也许来自一台服务器)。

有关相关信息,请参阅 DAO 帮助中的主题“DateCreated、LastUpdated 属性”。

CDaoTableDef::GetDateLastUpdated

调用此函数以确定上次更新 CDaoTableDef 对象基础表的日期和时间。

COleDateTime GetDateLastUpdated();

返回值

一个包含上次更新 CDaoTableDef 对象基础表的日期和时间的值。

注解

日期和时间设置派生自创建或上次更新基表的计算机。 在多用户环境中,用户应直接从文件服务器获取这些设置,以避免差异;也就是说,所有客户端都应使用“标准”时间源(也许来自一台服务器)。

有关相关信息,请参阅 DAO 帮助中的主题“DateCreated、LastUpdated 属性”。

CDaoTableDef::GetFieldCount

调用此成员函数以检索表中定义的字段数。

short GetFieldCount();

返回值

表中的字段数。

注解

如果值为 0,表明集合中没有对象。

要了解相关信息,请参阅 DAO 帮助中的主题“Count 属性”。

CDaoTableDef::GetFieldInfo

调用此成员函数以获取有关 tabledef 中定义的字段的各种信息。

void GetFieldInfo(
    int nIndex,
    CDaoFieldInfo& fieldinfo,
    DWORD dwInfoOptions = AFX_DAO_PRIMARY_INFO);

void GetFieldInfo(
    LPCTSTR lpszName,
    CDaoFieldInfo& fieldinfo,
    DWORD dwInfoOptions = AFX_DAO_PRIMARY_INFO);

参数

nIndex
表从零开始的 Fields 集合中字段对象的索引,用于按索引查找。

fieldinfo
CDaoFieldInfo 结构的引用。

dwInfoOptions
指定要检索字段的哪些信息的选项。 此处列出了可用选项以及它们导致函数返回的原因:

  • AFX_DAO_PRIMARY_INFO(默认)名称、类型、大小、属性。 使用此选项可以获得最优的性能。

  • AFX_DAO_SECONDARY_INFO 主要信息以及:序号位置、必需、允许零长度、排序顺序、外部名称、源字段、源表

  • AFX_DAO_ALL_INFO 主要信息和辅助信息,以及:验证规则、验证文本、默认值

lpszName
指向字段对象名称的指针,用于按名称查找。 该名称是一个最多包含 64 个字符的字符串,用于唯一地命名字段。

备注

该函数的一个版本允许按索引查找字段。 使用其他版本可以按名称查找字段。

有关返回的信息的说明,请参阅 CDaoFieldInfo 结构。 此结构的成员对应于上述 dwInfoOptions 说明中列出的信息项。 如果请求某一级别的信息,还可以获得任何先前级别的信息。

要了解相关信息,请参阅 DAO 帮助中的主题“Attributes 属性”。

CDaoTableDef::GetIndexCount

调用此成员函数以获取表的索引数。

short GetIndexCount();

返回值

表的索引数。

备注

如果值为 0,表明集合中没有索引。

要了解相关信息,请参阅 DAO 帮助中的主题“Count 属性”。

CDaoTableDef::GetIndexInfo

调用此成员函数以获取有关 tabledef 中定义的索引的各种信息。

void GetIndexInfo(
    int nIndex,
    CDaoIndexInfo& indexinfo,
    DWORD dwInfoOptions = AFX_DAO_PRIMARY_INFO);

void GetIndexInfo(
    LPCTSTR lpszName,
    CDaoIndexInfo& indexinfo,
    DWORD dwInfoOptions = AFX_DAO_PRIMARY_INFO);

参数

nIndex
表从零开始的 Index 集合中 Index 对象的数值索引,用于按其在集合中的位置进行查找。

indexinfo
CDaoIndexInfo 结构的引用。

dwInfoOptions
指定要检索索引的哪些信息的选项。 此处列出了可用选项以及它们导致函数返回的原因:

  • AFX_DAO_PRIMARY_INFO 名称、字段信息、字段。 使用此选项可以获得最优的性能。

  • AFX_DAO_SECONDARY_INFO 主要信息,以及:主要、唯一、聚集、忽略 Null、必需、外部

  • AFX_DAO_ALL_INFO 主要信息和辅助信息,以及:非重复计数

lpszName
指向索引对象名称的指针,用于按名称查找。

注解

该函数的一个版本使你可以按索引在集合中的位置来查找它。 使用其他版本,可以按名称查找索引。

有关返回的信息的说明,请参阅 CDaoIndexInfo 结构。 此结构的成员对应于上述 dwInfoOptions 说明中列出的信息项。 如果请求某一级别的信息,还可以获得任何先前级别的信息。

要了解相关信息,请参阅 DAO 帮助中的主题“Attributes 属性”。

CDaoTableDef::GetName

调用此成员函数以获取基础表的用户定义名称。

CString GetName();

返回值

表的用户定义名称。

备注

该名称以字母开头,最多可以包含 64 个字符。 它可以包含数字和下划线字符,但不能包含标点符号或空格。

要了解相关信息,请参阅 DAO 帮助中的主题“Name 属性”。

CDaoTableDef::GetRecordCount

调用此成员函数可了解 CDaoTableDef 对象中的记录数。

long GetRecordCount();

返回值

在 tabledef 对象中访问的记录数。

注解

对表类型的 CDaoTableDef 对象调用 GetRecordCount 反映了表中的大致记录数,并且会在添加和删除表记录时立即受到影响。 回滚事务将作为记录计数的一部分出现,直到调用 CDaoWorkSpace::CompactDatabase。 没有记录的 CDaoTableDef 对象的记录计数属性设置为 0。 使用附加表或 ODBC 数据库时,GetRecordCount 始终返回 -1。

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

CDaoTableDef::GetSourceTableName

调用此成员函数以检索源数据库中附加表的名称。

CString GetSourceTableName();

返回值

一个 CString 对象,指定附加表的源名称;如果是本机数据表,则为一个空字符串。

备注

附加表是链接到 Microsoft Jet 数据库的另一个数据库中的表。 附加表的数据保留在外部数据库中,在那里,它可以由其他应用程序操作。

要了解相关信息,请参阅 DAO 帮助中的主题“SourceTableName 属性”。

CDaoTableDef::GetValidationRule

调用此成员函数以检索 tabledef 的验证规则。

CString GetValidationRule();

返回值

一个 CString 对象,当一个字段被更改或被添加到表中时,用于验证该字段中的数据。

注解

验证规则与更新操作一起使用。 如果 tabledef 包含验证规则,那么在更改数据之前,对该 tabledef 的更新必须与预先确定的条件匹配。 如果更改与条件不匹配,会引发一个包含 GetValidationText 值的异常。 对于 CDaoTableDef 对象,CString 对于附加表是只读的,对于基表是读/写的。

要了解相关信息,请参阅 DAO 帮助中的主题“ValidationRule 属性”。

CDaoTableDef::GetValidationText

调用此函数以检索当用户输入与验证规则不匹配的数据时显示的字符串。

CString GetValidationText();

返回值

一个 CString 对象,指定当用户输入与验证规则不匹配的数据时显示的文本。

备注

对于 CDaoTableDef 对象,CString 对于附加表是只读的,对于基表是读/写的。

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

CDaoTableDef::IsOpen

调用此成员函数以确定 CDaoTableDef 对象当前是否处于打开状态。

BOOL IsOpen() const;

返回值

如果 CDaoTableDef 对象处于打开状态,则为非零值;否则为 0。

注解

CDaoTableDef::m_pDatabase

包含指向此表的 CDaoDatabase 对象的指针。

备注

CDaoTableDef::m_pDAOTableDef

包含一个指向 CDaoTableDef 对象基础的 DAO tabledef 对象的 OLE 接口的指针。

注解

如果需要直接访问 DAO 接口,请使用此指针。

CDaoTableDef::Open

调用此成员函数以打开以前保存在数据库的 TableDef 集合中的 tabledef。

virtual void Open(LPCTSTR lpszName);

参数

lpszName
指向一个指定表名称的字符串的指针。

注解

调用此成员函数以更新附加表的连接信息。

void RefreshLink();

备注

可以通过对相应的 CDaoTableDef 对象调用 SetConnect,然后使用 RefreshLink 成员函数更新信息来更改附加表的连接信息。 调用 RefreshLink 时,附加表的属性不会更改。

若要强制修改的连接信息生效,必须关闭基于此 tabledef 的所有打开的 CDaoRecordset 对象。

要了解相关信息,请参阅 DAO 帮助中的主题“RefreshLink 方法”。

CDaoTableDef::SetAttributes

设置一个值,该值指示 CDaoTableDef 对象的一个或多个特征。

void SetAttributes(long lAttributes);

参数

lAttributes
CDaoTableDef 对象表示的表的特征,可以是以下常量之和:

常量 说明
dbAttachExclusive 对于使用 Microsoft Jet 数据库引擎的数据库,指示表是处于打开状态的专用附加表。
dbAttachSavePWD 对于使用 Microsoft Jet 数据库引擎的数据库,指示附加表的用户 ID 和密码随连接信息一起保存。
dbSystemObject 指示表是 Microsoft Jet 数据库引擎提供的系统表。
dbHiddenObject 指示表是 Microsoft Jet 数据库引擎提供的隐藏表。

注解

设置多个属性时,可以通过使用按位或运算符对适当的常量求和来组合它们。 对非附加表进行 dbAttachExclusive 设置会生成异常。 组合以下值也会生成异常:

  • dbAttachExclusive | dbAttachedODBC

  • dbAttachSavePWD | dbAttachedTable

要了解相关信息,请参阅 DAO 帮助中的主题“Attributes 属性”。

CDaoTableDef::SetConnect

对于表示附加表的 CDaoTableDef 对象,字符串对象由一个或两个部分组成(数据库类型说明符和数据库路径)。

void SetConnect(LPCTSTR lpszConnect);

参数

lpszConnect
指向一个字符串表达式的指针,该字符串表达式指定了要传递给 ODBC 或可安装的 ISAM 驱动程序的其他参数。

备注

下表中所示的路径是包含数据库文件的目录的完整路径,前面必须有标识符“DATABASE=”。 在某些情况下,(与 Microsoft Jet 和 Microsoft Excel 数据库一样),特定文件名包含在数据库路径参数中。

注意

在“DATABASE=drive:\\path”格式的路径语句中,不要在等号周围加入空格。 这将导致引发异常,并导致连接失败。

下表显示了可能的数据库类型及其相应的数据库说明符和路径:

数据库类型 说明符 路径
使用 Jet 数据库引擎的数据库 "[ database];" " drive:\\ path\\ filename.MDB"
dBASE III "dBASE III;" " drive:\\ path"
dBASE IV "dBASE IV;" " drive:\\ path"
dBASE 5 "dBASE 5.0;" " drive:\\ path"
Paradox 3.x "Paradox 3.x;" " drive:\\ path"
Paradox 4.x "Paradox 4.x;" " drive:\\ path"
Paradox 5.x "Paradox 5.x;" " drive:\\ path"
Excel 3.0 "Excel 3.0;" " drive:\\ path\\ filename.XLS"
Excel 4.0 "Excel 4.0;" " drive:\\ path\\ filename.XLS"
Excel 5.0 或 Excel 95 "Excel 5.0;" " drive:\\ path\\ filename.XLS"
Excel 97 "Excel 8.0;" " drive:\\ path\ filename.XLS"
HTML Import "HTML Import;" " drive:\\ path\ filename"
HTML Export "HTML Export;" " drive:\\ path"
文本 "Text;" "drive:\\path"
ODBC "ODBC; DATABASE= database; UID= user;PWD= password; DSN= datasourcename; LOGINTIMEOUT= seconds;"(这可能不是所有服务器的完整连接字符串;这只是一个示例。请务必注意,参数之间不能有空格。)
Exchange "Exchange;

MAPILEVEL= folderpath;

[TABLETYPE={ 0 | 1 };]

[PROFILE= profile;]

[PWD= password;]

[DATABASE= database;]"
"drive:\\ path\\ filename.MDB"

注意

从 DAO 3.5 开始,不再支持 Btrieve。

必须在连接字符串中使用双反斜杠 (\\)。 如果使用 SetConnect 修改了现有连接的属性,必须随后调用 RefreshLink。 如果使用 SetConnect 初始化连接属性,则无需调用 RefreshLink,但如果选择这样做,请先追加 tabledef。

如果需要密码但未提供密码,ODBC 驱动程序会在首次访问表时显示一个登录对话框,如果连接已关闭并重新打开,则会再次显示登录对话框。

可以通过向 Create 成员函数提供源参数来设置 CDaoTableDef 对象的连接字符串。 可以检查设置以确定数据库的类型、路径、用户 ID、密码或 ODBC 数据源。 有关详细信息,请参阅具体驱动程序的文档。

要了解相关信息,请参阅 DAO 帮助中的主题“Connect 属性”。

CDaoTableDef::SetName

调用此成员函数以设置表的用户定义名称。

void SetName(LPCTSTR lpszName);

参数

lpszName
指向一个指定表名称的字符串表达式的指针。

备注

名称必须以字母开头,最多可以包含 64 个字符。 它可以包含数字和下划线字符,但不能包含标点符号或空格。

要了解相关信息,请参阅 DAO 帮助中的主题“Name 属性”。

CDaoTableDef::SetSourceTableName

调用此成员函数以指定附加表的名称或 CDaoTableDef 对象所基于的基表的名称,因为它存在于数据的原始来源中。

void SetSourceTableName(LPCTSTR lpszSrcTableName);

参数

lpszSrcTableName
指向一个字符串表达式的指针,该字符串表达式指定了外部数据库中的表名称。 对于基表,该设置是一个空字符串 ("")。

注解

然后,必须调用 RefreshLink。 此属性设置对于基表为空,对于附加表或未追加到集合的对象则为读/写。

要了解相关信息,请参阅 DAO 帮助中的主题“SourceTableName 属性”。

CDaoTableDef::SetValidationRule

调用此成员函数以设置 tabledef 的验证规则。

void SetValidationRule(LPCTSTR lpszValidationRule);

参数

lpszValidationRule
指向一个用于验证操作的字符串表达式的指针。

备注

验证规则与更新操作一起使用。 如果 tabledef 包含验证规则,那么在更改数据之前,对该 tabledef 的更新必须与预先确定的条件匹配。 如果更改与条件不匹配,会显示一个包含 GetValidationText 文本的异常。

只有使用 Microsoft Jet 数据库引擎的数据库才支持验证。 该表达式不能引用用户定义函数、域聚合函数、SQL 聚合函数或查询。 CDaoTableDef 对象的验证规则可以引用该对象中的多个字段。

例如,对于名为 hire_date 和 termination_date 的字段,验证规则可能是:

myTableDef.SetValidationRule(_T("termination_date > hire_date"));

要了解相关信息,请参阅 DAO 帮助中的主题“ValidationRule 属性”。

CDaoTableDef::SetValidationText

调用此成员函数,为具有 Microsoft Jet 数据库引擎支持的基础基表的 CDaoTableDef 对象设置验证规则的异常文本。

void SetValidationText(LPCTSTR lpszValidationText);

参数

lpszValidationText
指向一个字符串表达式的指针,该字符串表达式指定了当输入的数据无效时显示的文本。

注解

不能设置附加表的验证文本。

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

另请参阅

CObject 类
层次结构图
CDaoDatabase 类
CDaoRecordset 类