微型机与应用
MICROCOMPUTER & ITS APPLICATIONS
1999年 第18卷 第2期 Vol.18 No.2 1999



VB 5.0数据访问技术及方法
马瑞民　阚志刚　衣治安
　　摘　要：Visual Basic 5.0数据库的体系结构及相应的结构图；介绍微软JET数据库引擎和ODBCDirect 2种数据访问技术；对数据访问对象、数据控件和直接调用ODBC API函数3种数据访问方法进行了说明。
　　关键词：数据访问对象　数据控件　JET数据库引擎　ISAM驱动程序　ODBC API函数
　　在各类应用软件中，数据库应用软件的数量是相当大的。作为一种优秀的开发工具，Visual Basic 5.0提供了相当强的数据库存取功能，将Windows的各种先进特性与强大的数据库管理功能有机地结合在一起，不但能够直接支持Microsoft Access数据库，而且还可以安装ISAM(Indexed Sequential Access Method)驱动程序(支持Paradox、Foxpro及Btrieve等数据库文件)，并且ODBC结构中还有1个接口，可以直接调用ODBC API函数对数据库操作。所有这些数据库存取机制都可通过Microsoft JET(Joint Engineering Technology)引擎和ODBCDirect技术来实现。基于Visual Basic的数据库应用程序可从逻辑上分为3个部分：用户接口、数据库引擎和数据库存储，其中用户接口和数据库存储通过数据库引擎有机地结合在一起，这种体系结构使得相同的应用程序接口可以存取不同类型的数据源。
1　Visual Basic数据库的体系结构
　　为了使用和操纵结构化数据库，Visual Basic提供了如图1所示的数据库体系结构。在此体系结构中，Visual Basic可以使用2种数据访问技术：JET数据库引擎和ODBCDirect技术；3种数据访问方法：数据控件、数据访问对象和直接调用的ODBC API函数(也可以把“直接调用ODBC API函数”看成是一种技术)。其中数据库引擎和ODBCDirect技术是数据访问的核心部分，位于应用程序和数据库存储之间。这种结构使得所访问的数据库有较大的独立性，使用相同的数据访问对象可以访问不同类型的数据库；数据库引擎能够把数据控件和数据访问对象所提出的数据库操作转变成对数据库的物理操作，也能够支持不同类型的数据库。


图1　数据库体系结构
　　数据控件和数据访问对象是基于数据库引擎的2种数据访问方法。数据控件的使用方法比较简单，不需用户编程，但是它访问数据的能力有限。数据访问对象是提供给用户的完整编程接口，它能够对数据库进行全方位的控制。实际上，这2种方法并不相互排斥，在许多情况下，它们之间能互相补充。另外，在ODBC结构中还有1个接口，可以直接调用ODBC API函数对数据库操作。
　　在Visual Basic中除了基本数据库引擎的数据访问方法之外，还支持其它方法，如ODBCDirect技术。另外，在VB5.0企业版中除图1所示的技术以外，还提供了远程数据对象(RDO,Remote Data Object)库和远程数据控件(RDC,Remote Data Control)访问ODBC数据。用户如果要对Microsoft SQL Server进行访问，还可以利用VBSQL(Visual Basic SQL Libraries)，这是VB提供给应用程序访问SQL Server数据库的接口函数。
　　在Visual Basic的数据库应用程序中，可以访问3种类型的数据库。
　　1.Visual Basic数据库。也称为内部数据库，它具有和Microsoft Access相同的数据格式。数据库引擎可以直接创建和操纵内部数据库，具有最高的工作效率。
　　2.外部数据库。外部数据库又称为ISAM数据库，包括：Btrieve、dBASE III、dBASE IV、Microsoft FoxPro V2.0和2.5、Visual FoxPro V3.0、Paradox V3.x和4.0等。用户也可以访问文本文件和Microsoft Excel或Lotus 1-2-3电子表格文件。
　　3.ODBC数据库。ODBC数据库指的是基于ODBC标准的客户/服务器模式的数据库，如Microsoft SQL Server。要想编制真正意义上的客户/服务器应用程序，可以使用ODBCDirect技术，该技术直接把数据库操作命令传给外部服务器。如果有外部数据库的ODBC驱动程序，也可以把外部数据库看作是ODBC数据库。
2　Visual Basic的数据库引擎和ODBCDirect技术
　　Visual Basic数据库的核心结构是JET数据库引擎，它将数据库相关的内存管理、游标管理及错误处理等具体而复杂的细节问题抽象为1个既高度一致又简化的编程接口。它为应用程序提供了：
　　(1)1个符合ANSI SQL标准的语法分析器。
　　(2)为使用查询结果集而提供的内存管理功能。
　　(3)同所支持的数据库的外部接口。
　　(4)为应用程序提供的统一的外部接口。
　　JET数据库引擎内部有1个SQL语法分析器，这个分析器可以接受符合由用户应用程序提供的ANSI标准SQL语句，并且提供了Visual Basic的本地分析和错误处理功能。实际上，这个SQL语法分析器不仅用来支持Microsoft Access数据库的内部库函数，而且可以为JET引擎所支持的其它数据库提供SQL语法分析。
　　另外，基于JET数据库引擎有5种类型的结果集对象，它们分别是：ForwardOnly、Dynamic、Table、Snapshot和Dynaset，合称为记录集对象，应用程序可以创建和管理它们以便操纵和使用数据。
　　ODBCDirect技术是指通过RDO控件和DAO特征直接访问ODBC数据源的技术。当ODBC数据源通过这种方式访问时，被称为“ODBCDirect”数据源；如果ODBC数据源通过微软数据库引擎间接访问时，被称为“Jet ODBC连接”数据源。这2种数据源使用不同的DAO对象、方法和属性。ODBCDirect技术对ODBC数据源有较高的存取效率。
3　数据访问对象DAO、数据控件和直接调用ODBC API函数
　　数据访问模型是数据库引擎的面向对象接口，它的类层次如图2所示。每个类对应关系型数据库系统的逻辑模型，例如数据库本身以及数据库中的二维表格和它们的字段、索引等。利用数据访问对象，用户可以创建和操纵Database对象、Table对象、Field对象和Index对象等数据库对象，这些对象与数据库物理存储是一一对应的，通过这些对象的属性设置和方法使用就可以完成对数据库的操作。用户通过对数据访问对象编程，可以对多种数据源进行访问。这种访问技术简化了程序代码，屏弊了许多复杂的数据提取技术细节，给用户以极大的灵活性。但它只能进行间接的错误处理和错误恢复，对每个数据库操作没有细粒度的控制。
　　数据控件是类似“命令按钮”等的编程构件，能够利用Table、Snapshot和Dynaset 3种数据访问对象对数据库中的数据进行逐条记录存取，并能够把最后结果在数据绑定控件中显示出来。通常所用的数据绑定控件有：DBList、DBCombo、DBGrid和MSFlexGrid。此外，Picture、Label、TextBox、CheckBox、Image、OLE、ListBox和ComboBox控件可以绑定在单一的记录集合上。使用数据控件是最简单的数据访问方法，它的编码量最小，并且能够使用第三厂商制订的控制项，但它不能进行真正的事务处理。


图2　数据访问模型类层次图
　　直接调用ODBC API函数方法对数据库操作提供了最大程度的直接控制。ODBC API函数提供以下功能：分配和释放环境句柄、连接句柄及语句句柄；与数据源及多条语句建立连接；准备执行或直接执行SQL语句；为SQL语句的参数及结果集中的列分配存储参数；检索结果集中的数据；提交或滚回事务；检索错误及状态信息。对于在复杂性、综合性及性能方面有较高要求的应用程序来说，直接调用ODBC API函数是适当的。这种方法最大的特点是：可以直接参与结果集的开发、管理及规范化；对结果集游标提供了更多的控制，并且提供了更多的游标类型和执行动作；可以更好地控制Windows的执行及资源利用。
　　3种数据访问方法各有特点和使用范围，但它们不是互相独立的。通常将这3种方法结合使用是有益的，这样不仅可以得到某种方法的优点，而且可以减少该种方法的限制。笔者对Visual Basic的数据库体系结构进行了归纳和总结，并投入实际应用，取得了较好的效果。
作者单位：黑龙江大庆石油学院计算机科学系(151400)　
参考文献
1　孟小峰.开放数据库互连—ODBC 2.0使用大全.北京：清华大学出版社，1995
2　廖卫东，赵军.Visual Basic编程手册.北京：机械工业出版社，1996
3　宋琦凡，付敬平.使用Visual Basic开发数据库应用软件.北京：电子工业出版社，1996
(收稿日期：1998-08-30)
