SQL Server MFC DAO类和MFC ODBC类

时间:2009-11-25 00:26来源: 作者: 点击: 347次
内容概要:大多数 mfc 开发人员都熟悉开放式数据库连接 (odbc) 数据库类 - 它们早在三年半以前就出现了。在 mfc 4.2 中,对这些类有一些重要的
 大多数 mfc 开发都熟悉开放式数据库连接 (odbc) 数据库类 - 它们早在三年半以前就出现了。在 mfc 4.2 中,对这一些类有一些很重要的改进。

身为 c++ 开发,您估计不熟悉 dao,由于到目前为止它还只可用于 microsoft access 和 visual basic® 设计程序系统。假如您熟悉 dao,就必需了解:dao 在 mfc 中的出现颇有不相同,但包罗广泛。

了解 mfc odbc 类的开发必需明白:虽然 mfc dao 类比 odbc 类功能性更强,但 dao 类不能代替它们。

对于那些不怎样熟悉 mfc 的人,我想提醒一句:mfc 有一个的适用于各种数据库类的设计原则。

mfc 像一张薄薄的包装纸那样,封装 win界面® 操作系统 api,帮助您想要的 c++ 性能,同时帮助您需求的抽象概念。当基础 api 具有实际意义时,向其添加value。可是多数时间 mfc 力图保持不为人触及。

就如 mfc 封装更复杂的 api 相同,数据库类也封装更复杂的性能。由于 mfc 没成绩在 intel、unix 和 alpha 之间停止移value,所以数据库实际运用程序解决方案也是可移value的。

咱们与 microsoft access、visual basic 应用相同的记录集模型,因此,已经应用那些产业商品的开发不必研究新的范例。另外,两个类集的体系框架基本相同,应用其中一个的类集的开发没成绩简易地切换到另一个的类集并应用它。

mfc 数据库类

自从 1.5 版之后,mfc 中就已经包含 odbc 数据库类。visual c++ 2.0 版帮助了含有相同类的 32 位版本。这一些类基于一个的工业认可达标,并已得到广泛实际运用,且因其 odbc 具有可移植性而受到其它数据库开发选取方案的青睐。这种可移植性是指能够将许多 odbc 数据源与用这一些类创建的实际运用程序一起应用。近来的性能改进使得 odbc 数据库类成了一个的吸引人的选取方案。

在多数情况下,mfc 4.0 中的 dao 数据库类允许您直接访问桌面数据源而无须应用 odbc。dao 数据库类所具有的同时打开多个数据库类别的胜任、应用多数据源的胜任以及数据定义语言胜任,使其成了很重要的开发选取方案。

目前,您已经准备好提出那个难点,自己应应用哪个数据库类集合。假如您所帮助的有关自己工程的消息不多,就很难确定那个难点的正确回答。但是,第一件要策划的事件是您应用什么数据源。假如您通常应用桌面数据,咱们鼓励您策划 mfc dao 数据库类,由于您将会发明它们极为有效且功能强大。假如您主要应用 odbc(基于服务器)的数据,则应用基于 odbc 的类会使您工程的进展更富成效。

其它策划事项包括互联网种类、可伸缩性要求,以及速度也许是最很重要的因素。最好是用您以为打工得最好的数据库类集让实际运用程序保持原型。没成绩停止一些基准测试,以确定您的最佳性能选取。

真正的决定权在您

您可用来创建数据库实际运用程序的选项集合很大。它实际是完整的一集锦选项,一端是桌面数据库实际运用程序,另一端是严格的客户/服务器数据库实际运用程序。仅有的两种看似明显的选取估计是:在 microsoft access 97 mdb 数据中应用 mfc dao 数据库类,而在 microsoft sql server ™ 6.5 中应用 mfc odbc 数据库类。这两种组合主要是互相配合应用的,均非比寻常有效。但您估计已对这一些选取有所了解,其它情况又该如何呢?

简要地说,以下是您赖以决策的过程:

◆确定数据源需求

您需求的数据库有多大? 一次会有多人需求访问数据吗? 有时,其余的大多数步骤均取决于您选取的数据源。

◆确定接口需求

假如您需求的接口有大量的用户输入(如用户没成绩设计自己的查询),那么在调整和分发数据库(一个的或多个)时就必需要慎重。例如,假如需求用变化不大的数据填充列表框,并且已选取基于服务器的数据源,则将通常不变化的数据存储在本地而非服务器上,是一种有意义的做法。

◆确定连接性需求

目前应用的互联网规则有很多种,每种规则都对经过互联网传送的数据各有不相同效果。涉及互联网的研讨不是本编程份内之事,但您需求了解如何优化自己的数据库实际运用程序,以避免遇到互联网的数据陷阱。

◆选取适当的道具(一个的或多个)

microsoft 为数据库开发帮助了多种可选取的道具(microsoft access、visual basic、visual basic enterprise、visual c++/mfc 以及 sql server),在某些情况下它们的功能略有重叠。本编程旨在研讨 visual c++/mfc 选项。但假如您还未策划其它选项,应该也对它们稍加了解。

◆在实施前保持原型

在本文中您将数次看到此陈述,由于它很很重要。您估计已做了很好的选取,但除非您的解决方案真的起了功能,否则打工就不算完成!

此外,涉及本文,咱们假设您想了解的是 mfc 的数据库类。咱们不妨尽估计多地检查一些选取方案,以便您认可您想为自己的第一个的原型采用的指导。

类 crecordview 是一种 mfc 构造 - 一种显示数据的形式。由于 crecordview 是基于 cformview 的,所以它具有该基础类的所有遗传功能。从本质上说,窗体视图在窗口的客户端区域伸展对话框模板。这使得添加控件与显示字段数据极为简易。

当应用 appwizard 和 classwizard 创建基于 odbc 的数据库实际运用程序时,记录集的列会自动绑定到(静态地)成员变量,这一些变量没成绩随后添加到对话框模板中。

一个的 cdbexception 对象代表一种由数据库类导火索的异常错误要求。该类中含有两个社会交流数据成员,可应用这两个成员确定导致异常错误的理由,或显示对异常错误停止说明的文档消息。cdbexception 对象由数据库类的成员参数构造与抛出。

cfieldexalter 类支持由数据库类应用的记录字段交换 (rfx) 例程。假如您正在编写自定义数据类别的数据交换例程,则应用该类;否则,您不会直接应用该类。rfx 在您记录集对象的字段数据成员和数据源上当前记录的相应字段之间交换数据。rfx 管理两个方向中的交换,即来自数据源的交换与到数据源的交换。

在 dao 的本机格式中,包含 21 个对象和 20 个集合。而且,dao 不仅帮助单个的对象,如表和字段,还帮助对象所属的集合。对象的这种清晰的层次框架使得能够简易地将面向对象的思想实际运用于数据库开发。

dao 的存在已有一段时间。dao 1.0 版呈目前 microsoft access 1.0 版中,它仅帮助到表与查询框架的接口,以及代表具有数量有限的属性的表、Dynamic集、快照的对象。visual basic 3.0 版中的 data access objects 1.0 添加了 tabledef、querydef 和 field 对象,以帮助可编程的框架。

microsoft access 2.0 版中的 dao 2.0 版有 ole 自动化的雏形,以及对几乎所有 microsoft jet 功能的全部编程访问权限。它拥有具有可靠的对象与属性集合的全部对象模型。

dao 2.5 版中含有 odbc 桌面数据库驱动程序 (odbc desktop database driver),这一些驱动程序是为 16 位平台能与 odbc desktop database drivers 2.0 版一起应用而创建的。该 16 位版本是为用于 visual basic 4.0 版的 16 位版本而安装的。

dao 3.0 版随带在 microsoft access for win界面 95、visual basic 4.0 版(32 位)、microsoft excel 7.0 版 和 visual c ++ 4.0 版中。dao 得到了增强,以支持任何兼容主机的单机接口。

dao 3.5 版随带在 microsoft access for win界面 97 中,并且含有新的 odbcdirect com 对象。mfc dao 数据库类不包括这一些对象的类。

最为很重要的是,dao 接口是基于 ole com 的,它很好地安置 dao 以适应不断发展的性能和操作系统。

示意图1

此处是 dao 层次框架图表。在顶端,将看到 dbengine 对象,该对象中含有所有其它对象。这是一个没有集合的对象,由于您只能有一个的引擎。但没成绩有多个打工区 (workspace)、数据库 (database) 等等,这正是余下的对象都有自己所属集合的理由。

在打工区中,没成绩有多个数据库,一个的基本表 (.mdb) 或一个的附加/链接的表。在每个数据库中将有一个的或多个表、查询、记录集,而其中的每个表、查询、记录集不仅包含字段和(或)索引,还有其它类别的对象。

另外,与打工区连接的是用户对象和组对象,它们形成了 dao 的安全模型。

独立但与引擎对象连接的是 errors 对象。

errors 集合中对象的附加方法不相同于其它 dao 集合。最详细的错误放在集合的末尾,最常规的错误放在开头。

mfc 和 dao

目前要谈的是 mfc 如何出现 dao。由于咱们不是分别包装每个 dao 对象,所以实际上 mfc 会平展 dao 的层次框架。咱们为您帮助 8 个对象而不是 21 个对象。

咱们封装所有的 dao 功能,除 security 对象外 - users 对象、assembles 对象以及新的 odbcdirect 对象。这是咱们有意而为。例如,咱们觉得在查看安全性对象时,围绕它们创建类将不会给 dao 的应用添加任何value,因此还是让您直接调用 dao,来处理那些对象。这也是与 mfc 原则一致的:应该在对添加value的立场而言有意义的地方创建类。但咱们仍会在 mfc technical e 54 中帮助涉及如何出现安全性模型的指导。

另外,咱们还管理 dao 要将对象追加到集合的要求。在 dao 中,您创建对象,然后将它追加到集合中。除一种例外情况外,这种添加是自动完成的。对于这种例外情况,可作为一个的单独的步骤来设置开发能否追加对象,这是很用的。

虽然估计用 odbc 数据库类停止Dynamic绑定,但出现这一目的功能并非 mfc 类的内置功能。它被置入 dao 数据库类,您没成绩相当简易地停止Dynamic绑定。目前咱们的第二个演示将更多地谈及这一点。

dao 帮助来自 sql 的数据定义语言 (ddl),以便您创建数据库、表、记录集等。在 odbc 中没有 ddl。

最后,当您需求时,总是没成绩对基础 dao ole 对象停止直接调用。

mfc dao 数据库类的层次框架

示意图2

五个由 cobject 派生的 mfc dao 类(cdaoworkspace、cdaodatabase、cdaotabledef、cdaoquerydef 和 cdaorecordset)具有该基础类的所有功能。

cdaoexception 由 cexception 派生得到,具备该类的优点,包括显示来自基础 dao errors 对象的错误消息的胜任。

如前面提到的那样,cdaorecordview 由 cformview 派生得到,而 cformview 又由 cscrollview 派生得到,依次类推。没成绩看到 cdaorecordview 类在快速而简易地出现基于窗体的数据显示方面所具有的全部优点。此外,还有对于 cdaorecordview 的向导支持。该类中的功能实质上是与 crecordview 类相同的。

cdaofieldexalter 类支持由 dao 数据库类应用的 dao 记录字段交换 (dfx) 例程。假如要创建自定义的 dfx 例程,只要直接调用该对象即可。

mfc dao 数据库类

cdaoworkspace 封装 dbengine 对象和 workspace 对象。mfc dao 类帮助打工区的事实非比寻常很重要。odbc 数据库类不相同时支持多个数据库连接。

事务处理是在 dao 数据库类中的 workspace(打工区)级别完成的,而不是在 odbc 类中的 recordse(记录集)级别完成的。一个的事务估计会效果所有打开的数据库和记录集,或者您没成绩隔离事务,使其只会效果指定的数据库,等等。

多数时间,您不必担心打工区对象的创建。假如您未创建,mfc 就将为您打开一个的打工区对象。假如您需求的话,dao 数据库类可支持多个打工区。

最后,您不必担心打工区对象超出范围或是在数据库对话完成前关闭。没成绩应用打工区指针访问打工区集合,访问数据库集合,以及访问数据库引擎的属性等。

cdaodatabase

cdaodatabase 在体系框架上类似于基于 odbc 的 cdatabase 类。cdaodatabase 也封装数据库连接。由于您不必总是应用 odbc,所以对于大多数桌面数据源,数据源的位置就表达为路径。cdaodatabase 没成绩存储 tabledef 和 querydef 对象,为您的开发帮助了极大方便。cdaodatabase 可应用本地及远程数据源。在本编程的稍后部份,有一个的可供您应用的数据源的列表。

该数据库对象在对话期间也一直继续存在。必要时没成绩明确地关闭数据库连接。仅就较量而言,cdatabase 类有 21 个成员参数,而 cdaodatabase 有 26 个成员参数。这一些成员参数中彼此相应的都非比寻常相似,在 cdaodatabase 中还有几个没有对应成员参数。

在 odbc 数据库类中没有与 cdaotabledef 相应的类。tabledef 对象让您检查数据库的架构(框架),不论表是本机 microsoft access 表(基本表)还是链接的表。假如用 dao 直接打开外部数据源,就可向其中添加字段和索引。假如您链接了表,就没成绩检查框架,但不能更改它。没成绩将表作为记录集的基础。那样做会使您获得几个好处,包括应用名为 seek 的快速搜索成员参数。

应用 cdaotabledef 没成绩确定也授权经过调用 cdaotabledef::canupdate 编辑表中的数据。mfc 负责为您管理 dao field 和 index 集合。应用 cdaotabledef 时,您没成绩选取也许向 tabledefs 集合中追加表;而应用所有其它对象时,会自动停止追加。

您用来INDEX记录的 sql 存储在 cdaoquerydef 对象中。您可用该对象存储您提出的有关数据的“难点”,如“how a lot customers did x dollars of business continue month?”。没成绩INDEX或重新应用存储的查询,可按下列三种窍门之一应用它们:

经过将指针传递到 cdaoquerydef 对象而创建记录集。

直接运行操作查询,即移动或更改数据的查询。操作查询包括追加、删除、生成表以及更新查询。删除查询和更新查询会更改现有数据;附加查询和生成表查询会移动现有数据。

运行 sqlpassthrough 查询:sql 直接传递查询是直接发送到数据库服务器而不会被 microsoft jet 数据库引擎中断的 sql 语句。sql 直接传递查询为您的实际运用程序帮助直接应用数据库服务器的功能的胜任。

另外,cdaorecordset 还很类似于基于 odbc 的 crecordset 类。记录集不仅没成绩基于表,也没成绩基于Dynamic集和快照。请记住,记录集代表您已INDEX到的记录和穿过数据的窍门。移动并滚动数据的窍门包括 seek(只用于表类别的记录集)、search 和 arouse 操作,以及 absoluteposition 和(假如您的数据源支持的话)书签。书签是一个的标识符,可经过调用该标识符来返回指定的记录。

mfc dao 数据库类中的大部份功能是存在于 cdaorecordset 中的。crecordset 只有 44 个成员参数,与之相比 cdaorecordset 有 91 个成员参数。这种额外的功能表现为字段value的导航、高速缓存、设置和INDEX中,以及记录集属性的设置和INDEX。

cdaorecordview 和 crecordview 类有几乎相同的功能。另外,它们都还具有因基于 cformview 而获得的优点。请记住,窗体视图就好象在窗口的客户端区域伸展的对话框模板相同,有了它,添加控件与显示字段数据就很简易。appwizard 和 classwizard 支持基于窗体的数据显示。假如应用 appwizard 创建初始实际运用程序,您数据库中的列就会自动绑定到成员变量。

对于 dao 数据库类,异常错误处理略有不相同。类 cdaoexception 将返回基础 dao ole 对象的错误消息。多数时间,您没成绩INDEX的错误消息要比通常采用基于 odbc 的类所获得的错误消息多。在 mfc 中,所有 dao 错误都表达为 cdaoexception 类别的异常错误。

当捕获到这种类别的异常错误时,没成绩应用 cdaoexception 成员参数从任何存储在数据库引擎 errors 集合中的 dao 错误对象中INDEX消息。每个错误除了时,都会有一个的或多个错误对象放入 errors 集合中。当另一个的 dao 操作生成错误时,errors 集合被清除,新的错误对象被放入 errors 集合。

cdaofieldexalter 类支持由 dao 数据库类应用的 dao 记录字段交换 (dfx) 例程。假如您正在编写自定义数据类别的数据交换例程,则应用该类;否则,您不会直接应用该类。dfx 在您 cdaorecordset 对象的字段数据成员和数据源上当前记录的相应字段之间交换数据。dfx 管理两个方向中的交换,即来自数据源的交换与到数据源的交换。若需涉及编写自定义 dfx 例程的消息,请参见 technical e 53(可在 books online 中的 mfc 下找到)。

cdaofieldexalter 对象帮助除了 dao 记录字段交换所需求的上下文消息。cdaofieldexalter 对象支持许多操作,包括绑定参数和字段数据成员,以及在当前记录的字段上设置各种标志。dfx 操作是在类别的记录集类数据成员上运行的,这一些类别由 cdaofieldexalter 中的 enum fieldtype 定义。估计的 fieldtype value有:

用于字段数据成员的 cdaofieldexalter::outputcolumn。

用于参数数据成员的cdaofieldexalter::param。

图1:mfc 的 odbc 数据库类

那里是基于 odbc 的数据库类的图片,与您所了解的相同。顶端的栏代表基于 odbc、与 odbc 交谈的 mfc 类。每个数据库的 odbc 驱动程序都解释 sql 调用,并针对每个数据源对其停止convert。许多数据源都与相应的驱动程序一起显示在联系图的底部,以提醒您 odbc 的灵活性。

图 2 是 dao 数据库类的图片。它们经过含有 dao 的 ole 停止通信,dao 与 jet 数据库引擎交谈。jet 数据库引擎有一些独立的 dll,用于与各种桌面数据源停止通信。

图2:mfc dao 数据库类 - 桌面数据源

microsoft jet 数据库引擎没成绩直接打开诸如 foxpro® 数据库和 paradox 等的数据源。但只要您不需求更改这一些数据源的架构,就没成绩将这一些表链接到 microsoft access 数据库中,实际上这会更有效。这那是 foxpro 和 paradox 表(它们仅是示例)显示在两个位置的理由。虚线用以暗示当估计直接打开数据源时,它的效率会更低。

被链接表的外观及打工方法与 microsoft jet 数据库中的任何其它表相同(虽然在连接到远程数据和INDEX远程数据方面略微有些性能差异)。建立和MAIntenance与远程数据源连接所需求的消息存储在表定义中。

相反,当您直接打开表时,必需在每个对话开始时帮助连接消息,以便建立与数据源的连接。建立与远程数据源的连接所需求的消息都不存储在 microsoft jet 数据库中。若要直接打开表,就必需应用 cdaotabledef::create,并且必需帮助连接消息(如数据源、用户名、密码和数据库名称)。

图3:mfc dao 数据库类,包括 sql 数据库

假如应用 dao 数据库类,就没成绩经由 odbc 访问服务器类别的数据库(如 microsoft sql server 和 oracle)。图 3 不是完整的图片,由于它并没有包括对所有类别数据源的访问。

最后,图 4 是涉及 mfc 数据库类的完整图片。请留意,mfc 栏和 odbc 栏上的垂直线表明指派两个数据库类集用作“非此即彼”决策。您没成绩选取访问所有类别的数据源,但不能混合两个集合中的 mfc 数据库类。

图4:mfc 数据库类

odbc 数据库类的数据源选取

当您用 mfc odbc 类编写实际运用程序时,没成绩连接到任何数据源(只要您有它的 odbc 驱动程序)。odbc 驱动程序管理器和 odbc 驱动程序的操作在您用这一些类编写的实际运用程序中是透明的,但个别驱动程序性能会效果实际运用程序的功能。

通常,mfc Dynamic集(但并非只向前滚动的记录集)要求 odbc 驱动程序具有 2 级 api 一致性。假如数据源的驱动程序符合 1 级 api 设置,您就仍没成绩应用可更新且只读的快照与只向前滚动的记录集,但不能应用Dynamic集。然而,假如 1 级驱动程序支持扩展的提取和键集驱动游标,它就没成绩支持Dynamic集。

odbc desktop driver pack 3.0 版支持 2 级 odbc api 调用 sqlextendedfetch。

appwizard 和 classwizard 会自动将数据源的列静态地绑定到您实际运用程序的成员变量中。这是在您实际运用程序与数据源之间建立连接的最简单的窍门,但不是最灵活的窍门。没成绩用类 cfieldexalter 将自定义的记录字段交换 (rfx) 调用添加到您的实际运用程序中。请参见“technical e 43:rfx routines”,以获取更多消息。

另外,还没成绩策划Dynamic地绑定数据库的列。在最普通的级别中可运行下列步骤:

◆构造您的主要记录集对象。然后,没成绩将指针传递给一个的打开的 cdatabase 对象,或者也没成绩用其它窍门向列记录集帮助连接消息。

◆运行一些步骤,Dynamic地添加列。

◆打开您的主要记录集。

◆记录集会选取记录,并应用记录字段交换 (rfx) 绑定“静态”列(映射到记录集字段数据成员的列)和Dynamic列(映射到您分配的额外存储的列)。

dao 数据库类的数据源选项

目前咱们要谈的是您没成绩用 dao 数据库类连接的数据源、列的静态绑定、列的Dynamic绑定,以及记录的双缓冲。

既然 microsoft access 数据库是 jet 的本机数据库,您自然就没成绩以最快速度访问它们。microsoft access 97 具有的数据库格式是 dao 3.5 版的本机数据库格式。假如应用 microsoft access 97 数据库,将获得最为快速的性能。

jet 应用单独的 dll 帮助对 microsoft jet 1.x 和 2.0 版数据库的访问权限。存储引擎和格式完全是用 microsoft jet 3.0 版修订的。假如更改之处很多,microsoft jet 3.0 版就会将 2.0 版数据库视为外部 isam,这会效果性能。因此,这也是促使您应该策划将 microsoft access 数据库升级的符合逻辑理由。

另外,您还没成绩访问可安装的 isam 数据库和 odbc 数据源。isam(基于索引的连续访问窍门)数据库,如 foxpro 和 dbase,没成绩直接打开,也没成绩链接到 access 数据库以出现最佳性能。下面是 dao 没成绩访问的数据源的列表:

◆microsoft foxpro 的 2.0、2.5 和 2.6 版。在 3.0 版中没成绩导入与导出数据,但不能创建对象。

◆dbase iii、dbase iv 和 dbase 5.0

◆paradox 的 3.x、4.x 和 5.x 版

◆btrieve 的 5.1x 和 6.0 版

◆microsoft excel 的 3.0、4.0、5.0、7.0 和 8.0 版打工表

◆lotus wks、wk1、wk3、wk4 电子表格

文档文档

请记住,microsoft access 的 1.x、2.0 和 7.0 版数据库都属于此类别。

没成绩经过 odbc 访问 odbc 数据源,如 sql server 和 oracle,因此您没成绩选取针对这一些数据源应用 dao。一个的 odbc 数据源没成绩来自任何 dbms,只要您拥有该 dbms 的适当的 odbc 驱动程序。对于 visual c++ 2.0 版或更高版本,您需求 32 位的 odbc 驱动程序(但 win32 除外,在 win32 中需求 16 位的 odbc 驱动程序)。下面是此版本 visual c++ 所包含的 odbc 驱动程序列表。

sql server

◆microsoft access

◆microsoft foxpro

◆microsoft excel

◆dbase

◆paradox

◆文档文档

microsoft desktop database drivers 3.0 版(它包含列表中的最后六项)为这一些数据源帮助最佳性能。这一些只限 32 位驱动程序。

将外部数据源(如 sql server)链接到 microsoft access 表是最有效的处理数据访问的窍门。在将实际运用程序连接到远程数据源以前,必需先确保实际运用程序的用户没成绩访问远程数据,并且确保正确地设计您的实际运用程序,以解决远程数据源安全性难题。另外,您还必需确保实际运用程序能够正确地与区分大小写的数据源停止沟通,并且确保正确地初始化可安装的 isam,以用于您想访问的数据源。最后,您必需检查您的源代码,以确保在访问非 jet 数据源时,源代码没有应用 microsoft jet 数据源专用的对象或调用。

设置链接最简捷的窍门是:进入 microsoft access。假如用的是 microsoft access 2.0 版,则应用“文档”/“附加表”命令;假如用的是 microsoft access 95 和 microsoft access 97,则应用“文档”/“获取外部数据”/“链接表”命令。

连接消息存储在您所应用的基本表 (.mdb) 中。假如移动了外部数据的位置,就必需在 microsoft access 中或从源代码中调用 cdaotabledef::refreshlink,重新建立链接。

dao 记录字段交换机制与在基于 odbc 的数据库类中的 rfx 有着相同的打工方法。记录集对象的字段数据成员假如联系在一起,就形成一个的“编辑缓冲区”,以保存一个的记录的选定列。当记录集第一次打开并要读取第一条记录时,dfx 就会将每个选定列与适当字段数据成员的地址绑定(关联)在一起。当记录集更新一条记录时,dfx 调用 dao 以向数据库引擎发送适当的命令。dfx 利用它对字段数据成员所了解的内容,指定要写入的数据源中的列(字段)。

向导支持列的静态绑定。您没成绩添加自己的 dfx 调用,就象应用基于 odbc 的类时那样。首先,对于每个绑定字段和参数,都必需将成员添加到 cdaorecordset 派生的类中。接下来,cdaorecordset::dofieldexalter 应被替代。请留意,成员的数据类别很很重要。它应与来自数据库字段中的数据匹对相配,或者至少可convert成那种类别。mfc technical #53 更详细地讲述了此过程。

cdaofieldexalter 类支持由 dao 数据库类应用的 dao 记录字段交换 (dfx) 例程。假如您正在编写自定义数据类别的数据交换例程,则应用该类。cdaofieldexalter 对象帮助除了 dao 记录字段交换所需求的上下文消息。cdaofieldexalter 对象支持许多操作,包括绑定参数和字段数据成员,以及在当前记录的字段上设置各种标志。

dao 数据库类中的Dynamic绑定

假如没成绩用基于 odbc 的类Dynamic绑定列,对这种行为的支持就不会内置于 mfc 类中。Dynamic绑定会内置在 dao 数据库类中,而且运行起来相当简易。

还没成绩做一些其它的事件以优化性能,如INDEX记录的一些而不是整个记录。在本陈述的稍后部份中,咱们将帮助一些没成绩优化实际运用程序的窍门。

dfx 和Dynamic绑定不是互相排斥的选取方案。经过 dao 数据库类,没成绩将静态和Dynamic绑定调用混合,以出现最大效率。

dao 数据库类中的双缓冲

在 mfc 的 cdaorecordset 类中,双缓冲是一种当记录集内的当前记录除了更改时简化检查测试的机制。当添加新记录和编辑现有记录时,对您的 dao 记录集应用双缓冲会递减必需的打工量。默认情况下,您的 mfc dao 记录集保留编辑缓冲区的第二份副本(记录集类的字段数据成员,全体复制;dao“帮助”中称相应的缓冲区为“复制缓冲区”)。当您对数据成员停止更改时,mfc 会拿它们与副本(“双缓冲区”)停止较量以检查测试更改。

双缓冲的代用窍门 - 不保留数据的副本 - 当编辑当前记录的字段时,要求您停止其它参数调用。

双缓冲一直是基于 odbc 的数据库类的一些。对于 dao 数据库类,假如需求,您没成绩停用该机制以升高效率。

该机制的主开关名为 m_bcheckcachefordirtyfields,dirty 意思是“已更改”。假如将此开关置于 on(开),就没成绩对全部或部份字段启用双缓冲。假如该主开关是 off(关),就会禁用整个双缓冲机制。

您最想关闭其双缓冲的字段包括备注字段、图片字段,以及其它 blob(大型二进制对象)。

dao sdk 中含有一些 c++ 数据库类,这一些类彼此独立,而且不相同于 mfc dao 数据库类。这一些 c++ 类将单个对象封装到 dao 层次框架中。虽然您没成绩将 dao sdk c++ 类与 mfc dao 数据库类混合,但 dao sdk c++ 类不遵循操作符超载的 mfc 准则,并且在混合应用这一些类时您必需当心。

mfc odbc 数据库类应用 microsoft access 和 visual basic 中的记录集模型。您没成绩用内置于类中的成员参数对记录停止筛选、分类、滚动以及其它处理。基础 odbc 驱动程序会效果特殊实际运用程序的功能。因此,若要使可移植性更强,您的实际运用程序就必需更具有通用性,或者必需依赖于更低级别的 odbc 功能。如有必要,没成绩直接调用 odbc,以完成特殊任务。目前,让咱们检查该集合中的单个类。

就象应用 mfc 那样,必要时没成绩调用基础 api(在此情况下为 odbc)。

一个的 cdatabase 对象代表一个的到数据源的连接,经过此连接您没成绩在数据源上停止操作。数据源是指以某些数据库管理系统 (dbms) 作为宿主的指定数据举例。具体示例包括 microsoft sql server、microsoft access、borearth dbase 和 xbase。您没成绩在自己的实际运用程序中同时让一个的或多个 cdatabase 对象处于聚会状态,并且没成绩保持到一个的数据库对象的多个连接。

一个的 crecordset 对象代表从数据源中选取的一个的记录集合。称为“记录集”的 crecordset 对象有三种可用的形式:Dynamic集、快照、Dynamic记录集。Dynamic集是与更多相关用户的更新保持同步的记录集。快照是静态记录集,它反映的是抓拍快照时数据库的状态。Dynamic记录集类似于Dynamic集,但通常只用于 microsoft sql server。每种形式都代表在打开记录集时确定的记录集合,但当您在Dynamic集内或Dynamic记录集内滚动到一条记录时,它反映后来由更多相关用户或您实际运用程序中的其它记录集对记录所做的更改。

mfc 4.2 以书签的形式向 crecordset 类中添加新的导航功能,并添加标识及导航到记录的 absoluteposition 的胜任。书签是一个的标识符,经过调用该标识符可返回指定的记录。

大多数 mfc 开发都熟悉开放式数据库连接 (odbc) 数据库类 - 它们早在三年半以前就出现了。在 mfc 4.2 中,对这一些类有一些很重要的改进。

身为 c++ 开发,您估计不熟悉 dao,由于到目前为止它还只可用于 microsoft access 和 visual basic® 设计程序系统。假如您熟悉 dao,就必需了解:dao 在 mfc 中的出现颇有不相同,但包罗广泛。

了解 mfc odbc 类的开发必需明白:虽然 mfc dao 类比 odbc 类功能性更强,但 dao 类不能代替它们。

对于那些不怎样熟悉 mfc 的人,我想提醒一句:mfc 有一个的适用于各种数据库类的设计原则。

mfc 像一张薄薄的包装纸那样,封装 win界面® 操作系统 api,帮助您想要的 c++ 性能,同时帮助您需求的抽象概念。当基础 api 具有实际意义时,向其添加value。可是多数时间 mfc 力图保持不为人触及。

就如 mfc 封装更复杂的 api 相同,数据库类也封装更复杂的性能。由于 mfc 没成绩在 intel、unix 和 alpha 之间停止移value,所以数据库实际运用程序解决方案也是可移value的。

咱们与 microsoft access、visual basic 应用相同的记录集模型,因此,已经应用那些产业商品的开发不必研究新的范例。另外,两个类集的体系框架基本相同,应用其中一个的类集的开发没成绩简易地切换到另一个的类集并应用它。

mfc 数据库类

自从 1.5 版之后,mfc 中就已经包含 odbc 数据库类。visual c++ 2.0 版帮助了含有相同类的 32 位版本。这一些类基于一个的工业认可达标,并已得到广泛实际运用,且因其 odbc 具有可移植性而受到其它数据库开发选取方案的青睐。这种可移植性是指能够将许多 odbc 数据源与用这一些类创建的实际运用程序一起应用。近来的性能改进使得 odbc 数据库类成了一个的吸引人的选取方案。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值