比以往更灵活
MFC 数据库策略
一系列选项
MFC 的 ODBC 数据库类
数据访问对象
DAO SDK 类
比较 MFC 数据库类
优化您的 MFC 数据库应用程序
结论
Jocelyn Garner
比以往更灵活
自 MFC 数据访问对象 (DAO) 数据库类在 1995 年 10 月发布以来,MFC 数据库开发人员就已开始考虑该使用哪个类集。本白皮书并不力图用常规术语回答此问题。相反,这里要强调的是对各种选择进行检查,以便您(即开发人员)可以确定每种情况最适合使用哪个 MFC 数据库类集。
大多数 MFC 开发人员都熟悉开放式数据库连接 (ODBC) 数据库类 - 它们早在三年半以前就出现了。在 MFC 4.2 中,对这些类有一些重要的改进。
身为 开发人员,您可能不熟悉 DAO,因为到目前为止它还只可用于 Microsoft Access 和 Visual Basic® 程序设计系统。如果您熟悉 DAO,就必须了解:DAO 在 MFC 中的实现颇有不同,但包罗广泛。
了解 MFC ODBC 类的开发人员必须知道:虽然 MFC DAO 类比 ODBC 类功能性更强,但 DAO 类不能代替它们。
MFC 数据库策略
对于那些不怎么熟悉 MFC 的人,我想提醒一句:MFC 有一个适用于各种数据库类的设计原则。
MFC 像一张薄薄的包装纸那样,封装 ® 操作系统 API,提供您想要的 性能,同时提供您需要的抽象概念。当基础 API 具有实际意义时,向其添加值。可是多数时候 MFC 力图保持不为人触及。
就如 MFC 封装更复杂的 API 一样,数据库类也封装更复杂的技术。因为 MFC 可以在 Intel、Unix 和 Alpha 之间进行移值,所以数据库应用程序解决方案也是可移值的。
我们与 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 的数据库类。我们不妨尽可能多地检查一些选择方案,以便您认可您想为自己的第一个原型采用的指导。
MFC ODBC 数据库类使用 Microsoft Access 和 Visual Basic 中的记录集模型。您可以用内置于类中的成员函数对记录进行筛选、分类、滚动以及其它处理。基础 ODBC 驱动程序会影响特殊应用程序的功能。因此,若要使可移植性更强,您的应用程序就必须更具有通用性,或者必须依赖于更低级别的 ODBC 功能。如有必要,可以直接调用 ODBC,以完成特殊任务。现在,让我们检查该集合中的单个类。
MFC 的 ODBC 数据库类
就象使用 MFC 那样,必要时可以调用基础 API(在此情况下为 ODBC)。
一个 CDatabase 对象代表一个到数据源的连接,通过此连接您可以在数据源上进行操作。数据源是指以某些数据库管理系统 (DBMS) 作为宿主的指定数据实例。具体示例包括 Microsoft SQL Server、Microsoft Access、Borland dBASE 和 xBASE。您可以在自己的应用程序中同时让一个或多个 CDatabase 对象处于活动状态,并且可以保持到一个数据库对象的多个连接。
一个 CRecordset 对象代表从数据源中选择的一个记录集合。称为“记录集”的 CRecordset 对象有三种可用的形式:动态集、快照、动态记录集。动态集是与其他用户的更新保持同步的记录集。快照是静态记录集,它反映的是抓拍快照时数据库的状态。动态记录集类似于动态集,但通常只用于 Microsoft SQL Server。每种形式都代表在打开记录集时确定的记录集合,但当您在动态集内或动态记录集内滚动到一条记录时,它反映后来由其他用户或您应用程序中的其它记录集对记录所做的更改。
MFC 4.2 以书签的形式向 CRecordset 类中添加新的导航功能,并添加标识及导航到记录的 AbsolutePosition 的能力。书签是唯一的标识符,通过调用该标识符可返回指定的记录。
类 CRecordView 是一种 MFC 构造 - 一种显示数据的形式。因为 CRecordView 是基于 CFormView 的,所以它具有该基础类的所有遗传功能。从本质上说,窗体视图在窗口的客户端区域伸展对话框模板。这使得添加控件与显示字段数据极为容易。
当使用 AppWizard 和 ClassWizard 创建基于 ODBC 的数据库应用程序时,记录集的列会自动绑定到(静态地)成员变量,这些变量可以随后添加到对话框模板中。
一个 CDBException 对象代表一种由数据库类引起的异常错误条件。该类中含有两个公共数据成员,可使用这两个成员确定导致异常错误的原因,或显示对异常错误进行说明的文本消息。CDBException 对象由数据库类的成员函数构造与抛出。
CFieldExchange 类支持由数据库类使用的记录字段 (RFX) 例程。如果您正在编写自定义数据类型的数据例程,则使用该类;否则,您不会直接使用该类。RFX 在您记录集对象的字段数据成员和数据源上当前记录的相应字段之间交换数据。RFX 管理两个方向中的交换,即来自数据源的交换与到数据源的交换。
数据访问对象
在 DAO 的本机格式中,包含 21 个对象和 20 个集合。而且,DAO 不仅提供单个的对象,如表和字段,还提供对象所属的集合。对象的这种清晰的层次结构使得能够轻松地将面向对象的原理应用于数据库开发。
DAO 的存在已有一段时间。DAO 1.0 版出现在 Microsoft Access 1.0 版中,它仅提供到表与查询结构的接口,以及代表具有数量有限的属性的表、动态集、快照的对象。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 位版本而安装的。
【责编:admin】
--------------------next---------------------