CDaoWorkspace

CObject
 └CDaoWorkspace

CDaoWorkspace对象可让一个用户管理从登录到离开期间,指定的密码保护的数据库会话全过程。大多数情况下不需要多个工作区,也不需创建明确的工作区对象;在打开数据库和记录集对象时,它们使用DAO缺省工作区。但是如果需要,可以通过创建额外工作区对象同时运行多个会话。每个工作区对象可以包含它自己的Database收集中的多个打开的数据库对象。MFC中工作区主要是一个事务管理器,指定全部在同一个“事务区”内的一系列打开数据库。
注意:
DAO数据库类与基于开放数据库连接(ODBC)的MFC数据库类截然不同。所有DAO数据库类名都有“CDao”前缀。通常基于DAO的MFC类比基于ODBC的MFC类功能更强。基于DAO的类通过Microsoft Jet数据库引擎访问数据,包括ODBC驱动程序。它们还支持数据定义语言(DDL)操作,例如通过类创建数据库、添加表和字段,而不必直接调用DAO。

功能
类CDaoWorkspace提供以下几点功能:
·如果需要,由初始化数据库引擎创建,明确访问缺省工作区。通常通过创建数据库和记录集对象隐式地使用DAO缺省工作区。
·事务应用工作区中打开的所有数据库的事务区。可以创建额外的工作区管理单独的事务区。
·到基础Microsoft Jet数据库引擎的许多特性的接口(请参阅静态成员函数)。打开或创建工作区,或者在打开或创建之前调用静态成员函数、初始化数据库引擎。
·访问数据库引擎的Workspace收集,存储所有已经附加其后的活动工作区。还可以不把它们附加到收集中创建和处理工作区。

安全性
MFC不实现DAO中用于安全性控制的Users和Groups收集。如果需要DAO的这些特征,必须通过直接调用DAO接口亲自对它们编程。有关信息,请参阅“技术指南54”。

用途
可以用类CDaoWorkspace来:
·显式打开缺省工作区。
通常对缺省工作区的使用是隐式的──在打开新CDaoDatabase或Cdao Rec-ordset对象时。但是也不可能需要显式访问它──例如要访问数据库引擎特性或Workspace收集。有关“隐式使用缺省工作区”,请参阅下面的内容。
·创建新工作区。如果想把它们添加到Workspaces收集中,则调用Append。
·打开工作区收集中现有的工作区。
创建Workspace收集中存在的新工作区在下面的Create成员函数中描述。工作区对象不支持数据库引擎会话之间的任何方法。如果应用静态链接MFC,结束程序不会初始化数据库引擎。如果应用动态链接MFC,MFCDLL卸载时不初始化数据库引擎。
只在专业版和企业版中具有的特征:对MFC的静态链接,只有Visual C++专业版和企业版中支持。
显式打开缺省工作区或者打开Workspaces收集中已有工作区,都在下面的Open成员函数中描述。
通过用Close成员函数关闭工作区来结束工作区会话。Close关闭以前没关闭的任何数据库,回滚任何未提交事务。

事务
DAO在工作区级上管理事务;因此,有多个打开数据库的工作区上的事务适用于所有数据库。例如两个数据库有未提交的更新,然后调用CommitTrans,则提交所有更新。如果想把事务限制于单个数据库,则需要为它的单独工作区对象。

隐式使用缺省工作区
在以下环境中MFC隐式使用DAO缺省工作区:
·如果创建一个新CDaoDatabase对象,但并不是通过现有CDaoWorkspace对象这样做的,则MFC创建一个对应于DAO缺省工作区的临时工作区对象。如果对多个数据库进行这样的操作,则所有数据库对象都对应于缺省工作区。可以通过CDaoDatabase数据成员访问数据库的工作区。
·类似的,如果创建CDaoRecordset对象而不提供指向CDaoDatabase对象的指针,则MFC创建临时数据库对象和扩展后的临时工作区对象。通过一个Cdao Recordset数据成员,可以访问记录集的数据库,以及间接访问它的工作区。

其它操作
还提供了像修复损坏的数据库或压缩数据库等其它数据库操作。
有关CDaoWorkspace的更多信息,请参阅“DAO工作区”。有关直接调用DAO和关于DAO安全性的信息,请参阅“技术指南54”。有关通过DAO处理ODBC数据源的更多信息,请参阅“DAO扩展:使用外部数据源”。有关数据库引擎的信息,请参阅“DAO工作区:数据库引擎”。
所有文章都在联机文档“Visual C++程序员指南”中。MFC数据库样本DAOVIEW图解使用CDaoWorkspace。
#include <afxdao.h>

请参阅:
CDaoDatabase, CDaoRecordset, CDaoTableDef, CDaoQueryDef, CDaoException


CDaoWorkspace类的成员

数据成员
m_pDAOWorkspace指向基础DAO工作区对象

构造函数
CDaoWorkspace构造一个工作区对象。然后调用Create或Open

属性
GetIsolateODBCTrans返回一个值,表示是否通过强制到数据源的多个连接分隔包含相同ODBC数据源的多个事务
GetName返回用于工作区对象的用户定义名字
GetUserName返回创建工作区时指定的用户名。这是工作区所有者的名字
IsOpen如果工作区打开,则返回非零
SetIsolateODBCTrans指定是否通过强制到数据源的多个连接分隔包含相同ODBC数据源的多个事务

操作
Append把新创建的工作区附加到数据库引擎的Workspaces收集
BeginTrans开始新事务,应用于工作区打开的所有数据库
Close关闭工作区和它包含的所有对象。未完成事务回滚
CommitTrans完成当前事务并保存变化
CompactDatabase压缩(或复制)数据库
Create创建一个新DAO工作区对象
GetDatabaseCount返回工作区的Databases收集中的DAO数据库对象数量
GetDatabaseInfo返回有关工作区的Databases收集中定义的指定DAO数据库的信息
GetWorkspaceCount返回数据库引擎的Workspaces收集中DAO工作区对象数量
GetWorkspaceInfo返回有关数据库引擎的Workspaces收集中定义的指定DAO工作区的信息
Open显式打开DAO缺省工作区对应的工作区对象
RepairDatabase试图修复销毁的数据库
Rollback结束当前事务并不保存变化
Idle允许数据库引擎执行后台任务

数据库引擎特性
GetVersion返回一个字符串,包含对应于工作区的数据库引擎版本
GetIniPath返回Windows登记中Microsoft Jet数据库引擎的初始化设置的位置
GetLoginTimeout返回用户试图登录到ODBC数据库时发生错误之前的秒数
SetDefaultPassword不带指定密码的工作区对象创建时,设置数据库引擎使用的密码
SetDefaultUser不带指定用户名的工作区对象创建时,设置数据库引擎使用的用户名
SetIniPath设置Windows登记中Microsoft Jet数据库引擎的初始化设置的位置
SetLoginTimeout设置用户试图登录到ODBC数据库时发生错误之前的秒数