自 mfc 数据访问对象 (dao) 数据库类在 1995 年 10 月发布以来,mfc 数据库开发人员就已开始考虑该使用哪个类集。
cdaodatabase *4sD`8U
+ X}w=vv
Q#0F<y V
cdaodatabase 在体系结构上类似于基于 odbc 的 cdatabase 类。cdaodatabase 也封装数据库连接。因为您不必总是使用 odbc,所以对于大多数桌面数据源,数据源的位置就表达为路径。cdaodatabase 可以存储 tabledef 和 querydef 对象,为您的开发提供了极大方便。cdaodatabase 可使用本地及远程数据源。在本白皮书的稍后部分,有一个可供您使用的数据源的列表。 ]o0jg[T
_6G 1^}
$Oo&-2`0
该数据库对象在会话期间也一直继续存在。必要时可以明确地关闭数据库连接。仅就比较而言,cdatabase 类有 21 个成员函数,而 cdaodatabase 有 26 个成员函数。这些成员函数中彼此相应的都非常相似,在 cdaodatabase 中还有几个没有对应成员函数。 kl:!A $L
8Udz!skPf:
_ D>5zCU
在 odbc 数据库类中没有与 cdaotabledef 相应的类。tabledef 对象让您检查数据库的架构(结构),不论表是本机 microsoft access 表(基本表)还是链接的表。如果用 dao 直接打开外部数据源,就可向其中添加字段和索引。如果您链接了表,就可以检查结构,但不能更改它。可以将表作为记录集的基础。这样做会使您获得几个好处,包括使用名为 seek 的快速搜索成员函数。 `.[GwZ?5
Hl%kO&sFg
Qqj_9lvI )
使用 cdaotabledef 可以确定是否可通过调用 cdaotabledef::canupdate 编辑表中的数据。mfc 负责为您管理 dao field 和 index 集合。使用 cdaotabledef 时,您可以选择是否向 tabledefs 集合中追加表;而使用所有其它对象时,会自动进行追加。 f6SQAXu
F2qo[YLD
5S@Ed ?2
[%W&h.B
您用来检索记录的 sql 存储在 cdaoquerydef 对象中。您可用该对象存储您提出的有关数据的“问题”,如“how many customers did x dollars of business last month?”。可以检索或重新使用存储的查询,可按下列三种方法之一使用它们: C nM|a1#
vR]i$"P$D
gunb=6 />
EDMI&
:{XKBj;kJa
通过将指针传递到 cdaoquerydef 对象而创建记录集。 9!|d$_V'n
\qAH,DD
直接执行操作查询,即移动或更改数据的查询。操作查询包括追加、删除、生成表以及更新查询。删除查询和更新查询会更改现有数据;附加查询和生成表查询会移动现有数据。 x3zn$;UD
e=F{nou
执行 sqlpassthrough 查询:sql 直接传递查询是直接发送到数据库服务器而不会被 microsoft jet 数据库引擎中断的 sql 语句。sql 直接传递查询为您的应用程序提供直接使用数据库服务器的功能的能力。 yzLY{$.`
CMV6+d>m]
O'^WW_(n
P``0L+S
另外,cdaorecordset 还很类似于基于 odbc 的 crecordset 类。记录集不仅可以基于表,也可以基于动态集和快照。请记住,记录集代表您已检索到的记录和穿过数据的方法。移动并滚动数据的方法包括 seek(只用于表类型的记录集)、find 和 move 操作,以及 absoluteposition 和(如果您的数据源支持的话)书签。书签是唯一的标识符,可通过调用该标识符来返回指定的记录。 ta{ta
Id\eL*)
= EQ/T7
mfc dao 数据库类中的大部分功能是存在于 cdaorecordset 中的。crecordset 只有 44 个成员函数,与之相比 cdaorecordset 有 91 个成员函数。这种额外的功能表现为字段值的导航、高速缓存、设置和检索中,以及记录集属性的设置和检索。 b-@B8 }H
C%.$.5
"\d%X,n
cdaorecordview 和 crecordview 类有几乎相同的功能。另外,它们都还具有因基于 cformview 而获得的优点。请记住,窗体视图就好象在窗口的客户端区域伸展的对话框模板一样,有了它,添加控件与显示字段数据就很容易。appwizard 和 classwizard 支持基于窗体的数据显示。如果使用 appwizard 创建初始应用程序,您数据库中的列就会自动绑定到成员变量。 @_4Rhf.}&
F_fv? 3\Q
T)H ek8
对于 dao 数据库类,异常错误处理略有不同。类 cdaoexception 将返回基础 dao ole 对象的错误消息。多数时候,您可以检索的错误信息要比通常采用基于 odbc 的类所获得的错误信息多。在 mfc 中,所有 dao 错误都表达为 cdaoexception 类型的异常错误。 0*uPAO-tp8
K)uufmN
\@f[<G
当捕获到这种类型的异常错误时,可以使用 cdaoexception 成员函数从任何存储在数据库引擎 errors 集合中的 dao 错误对象中检索信息。每个错误发生时,都会有一个或多个错误对象放入 errors 集合中。当另一个 dao 操作生成错误时,errors 集合被清除,新的错误对象被放入 errors 集合。 @?*P11)
}olGjJfz
,>-u6sr
cdaofieldexchange 类支持由 dao 数据库类使用的 dao 记录字段交换 (dfx) 例程。如果您正在编写自定义数据类型的数据交换例程,则使用该类;否则,您不会直接使用该类。dfx 在您 cdaorecordset 对象的字段数据成员和数据源上当前记录的相应字段之间交换数据。dfx 管理两个方向中的交换,即来自数据源的交换与到数据源的交换。若需关于编写自定义 dfx 例程的信息,请参见 technical note 53(可在 books online 中的 mfc 下找到)。 GY'uo(gj
A4 LA=,C
i/J_NR
cdaofieldexchange 对象提供发生 dao 记录字段交换所需要的上下文信息。cdaofieldexchange 对象支持许多操作,包括绑定参数和字段数据成员,以及在当前记录的字段上设置各种标志。dfx 操作是在类型的记录集类数据成员上执行的,这些类型由 cdaofieldexchange 中的 enum fieldtype 定义。可能的 fieldtype 值有: \ai0P9_
d9 i=L
An"X5'$Z
B]EEmK
3w}pMB?
用于字段数据成员的 cdaofieldexchange::outputcolumn。 e!FnjoG*
M4|Pl?1
用于参数数据成员的cdaofieldexchange::param。 o8o28QNa.
U5$ddp|,a
%U`3>^: