自 mfc 数据访问对象 (dao) 数据库类在 1995 年 10 月发布以来,mfc 数据库开发人员就已开始考虑该使用哪个类集。
microsoft desktop database drivers 3.0 版(它包含列表中的最后六项)为这些数据源提供最佳性能。这些只限 32 位驱动程序。 rBNyL[Q
@#S%dO
Wn|pb B
将外部数据源(如 sql server)链接到 microsoft access 表是最有效的处理数据访问的方法。在将应用程序连接到远程数据源以前,必须先确保应用程序的用户可以访问远程数据,并且确保正确地设计您的应用程序,以解决远程数据源安全性难题。另外,您还必须确保应用程序能够正确地与区分大小写的数据源进行交流,并且确保正确地初始化可安装的 isam,以用于您想访问的数据源。最后,您必须检查您的代码,以确保在访问非 jet 数据源时,代码没有使用 microsoft jet 数据源专用的对象或调用。 T06079u}
)Z6 .p8}Q
jX e8a g
设置链接最简捷的方法是:进入 microsoft access。如果用的是 microsoft access 2.0 版,则使用“文件”/“附加表”命令;如果用的是 microsoft access 95 和 microsoft access 97,则使用“文件”/“获取外部数据”/“链接表”命令。 yI3^&fp
7?:jh-3^p
B>?N UuX
连接信息存储在您所使用的基本表 (.mdb) 中。如果移动了外部数据的位置,就必须在 microsoft access 中或从代码中调用 cdaotabledef::refreshlink,重新建立链接。 !@Rpq4 o
WS9L`bn+J
1Q+O6R%V
dao 记录字段交换机制与在基于 odbc 的数据库类中的 rfx 有着相同的工作方式。记录集对象的字段数据成员如果联系在一起,就形成一个“编辑缓冲区”,以保存一个记录的选定列。当记录集第一次打开并要读取第一条记录时,dfx 就会将每个选定列与适当字段数据成员的地址绑定(关联)在一起。当记录集更新一条记录时,dfx 调用 dao 以向数据库引擎发送适当的命令。dfx 利用它对字段数据成员所了解的内容,指定要写入的数据源中的列(字段)。 _e?$;vW
H_!_}eJ
ELJzfQ Anr
向导支持列的静态绑定。您可以添加自己的 dfx 调用,就象使用基于 odbc 的类时那样。首先,对于每个绑定字段和参数,都必须将成员添加到 cdaorecordset 派生的类中。接下来,cdaorecordset::dofieldexchange 应被替代。请注意,成员的数据类型很重要。它应与来自数据库字段中的数据匹配,或者至少可转换成那种类型。mfc technical #53 更详细地讲述了此过程。 >=^$~u+U
"Y8WanG9c$
|EgF1Q,
cdaofieldexchange 类支持由 dao 数据库类使用的 dao 记录字段交换 (dfx) 例程。如果您正在编写自定义数据类型的数据交换例程,则使用该类。cdaofieldexchange 对象提供发生 dao 记录字段交换所需要的上下文信息。cdaofieldexchange 对象支持许多操作,包括绑定参数和字段数据成员,以及在当前记录的字段上设置各种标志。 H_'H(hBkxA
6-dN"
Q*CYeK.{!G
dao 数据库类中的动态绑定 'WmF}!a v
?0qf7B
*l!F5 54%
如果可以用基于 odbc 的类动态绑定列,对这种行为的支持就不会内置于 mfc 类中。动态绑定会内置在 dao 数据库类中,而且执行起来相当容易。 fW@-,5{
<(J_jf1
@sVB6^zP
还可以做一些其它的事情以优化性能,如检索记录的一部分而不是整个记录。在本陈述的稍后部分中,我们将提供一些可以优化应用程序的方法。 %m>y wox
]"3tPS@W
L~g'^RY4
dfx 和动态绑定不是互相排斥的选择方案。通过 dao 数据库类,可以将静态和动态绑定调用混合,以实现最大效率。 $Izafk $K
_U8@z9j
vj<<:$_
dao 数据库类中的双缓冲 q4)]y!j0
x v T
fca1Gk
在 mfc 的 cdaorecordset 类中,双缓冲是一种当记录集内的当前记录发生更改时简化检测的机制。当添加新记录和编辑现有记录时,对您的 dao 记录集使用双缓冲会减少必需的工作量。默认情况下,您的 mfc dao 记录集保留编辑缓冲区的第二份副本(记录集类的字段数据成员,全体复制;dao“帮助”中称相应的缓冲区为“复制缓冲区”)。当您对数据成员进行更改时,mfc 会拿它们与副本(“双缓冲区”)进行比较以检测更改。 XACXc
Tc5@BuCs
a ! I_R
双缓冲的代用方法 - 不保留数据的副本 - 当编辑当前记录的字段时,要求您进行其它函数调用。 VP<qz'e
' +}\k$/
'^x&a (c
双缓冲一直是基于 odbc 的数据库类的一部分。对于 dao 数据库类,如果需要,您可以停用该机制以提高效率。 F\$ Q .U
X`YlWHP'
<ocQ#~T'
该机制的主开关名为 m_bcheckcachefordirtyfields,dirty 意思是“已更改”。如果将此开关置于 on(开),就可以对全部或部分字段启用双缓冲。如果该主开关是 off(关),就会禁用整个双缓冲机制。 >FdHjzg;
Y"9S`cCA
;V,N8m }@v
您最想关闭其双缓冲的字段包括备注字段、图片字段,以及其它 blob(大型二进制对象)。 VU,P8]D(7E
/E zAD:P
deq1p^-_2
dao sdk 中含有一些 c++ 数据库类,这些类彼此独立,而且不同于 mfc dao 数据库类。这些 c++ 类将单个对象封装到 dao 层次结构中。虽然您可以将 dao sdk c++ 类与 mfc dao 数据库类混合,但 dao sdk c++ 类不遵循操作符超载的 mfc 准则,并且在混合使用这些类时您必须当心。有关的详细信息,请参阅 microsoft systems journal(1999 年 6 月)中的文章“the dao of databases:using data access objects and the jet engine in c++”。