欢迎阅读《中文版Access 2003宝典》,它将指导读者学习和掌握Access 2003这个强大且容易使用的数据库管理系统。该书现在是第9次修订,这次是完全重新编写的,具有全新的内容、图片和示例。本书使用了比其他任何Access书籍都要多的示例来帮助读者更好地理解和掌握Access 2003。我们认为,Access是当今市场上最优秀的数据库管理软件和最好的Windows数据库。我们的目标是通过本书与你分享我们关于Access的知识,使你的工作和生活更加轻松。
本书包括了达到Access中级水平所需要的全部知识。本书从Microsoft Access的基本知识开始讲起,一章一章地讲解每个话题。在每章需要用到前面所讲述的内容时,会再次陈述这些概念并且复习如何执行指定的任务。尽管每一章都是本书整体的组成部分,但它们也互相独立,并具有自己的示例。因此,读者可以按照自己喜欢的顺序阅读本书,可以从一章跳到另一章,从一个话题跳到另一个话题。本书中的示例尽量模仿大多数人在执行常见的商业行为时需要创建的表、查询、窗体和报表的类型。为了帮助读者更好地理解Access 2003这一产品,本书有许多注释、提示和技术知识(甚至一些技术内幕)。
本书完全可以取代Access软件附带的手册。实际上,许多用户没有手册,而只是依靠联机帮助。本书将指导读者完成想在Access中做的每一项工作。本书后面的附录可以作为常见Access规范的参考手册。与Access手册相比,本书在结构上更合理,对每个话题阐述得更深入,并且展示了许多不同类型的示例。
读者对象
适合使用本书的读者包括Access 2003的初学者、中级用户甚至高级开发人员。面对一个新发布的软件,大多数用户都要从头开始学起。但是,如果你已经读过Access手册,并且使用过罗斯文(Northwinds)示例文件,可能会想从本书的后半部分开始学起。但请注意,从一本书的最开头读起通常是没错的,因为这样不会漏掉前面章节中的技术内幕和提示内容。
我们认为本书比目前市场上的任何其他书籍对Access的讲述都要详细。希望本书对使用Access的读者会有所帮助,并希望读者喜欢本书的创新风格。
没有数据库经验的读者
如果你在数据库管理方面是个新手,本书拥有你从头开始学习Access所需要的全部内容。接下来还会提供高级话题供读者参考和进一步学习。
使用过dBASE或Filemaker数据库管理软件的读者
如果你以前使用过其他数据库(如dBASE,Filemaker,Alpha,Paradox,FoxPro或R:Base)或Access 2.0,Access 95/97,Access 2000/2002等老版本的Access,本书会更为适合你。由于已经熟悉数据库管理软件并知道如何使用它们,因此你可以比较快地阅读本书。Microsoft Access能够完成以前使用基于字符的数据库能够实现的所有任务,而且不用编程和走入迷途。本书会一步一步地带领读者学习每一个主题。
想学习VBA编程基本知识的读者
VBA已经取代了Access Basic语言,要完全透彻地讲述VBA需要一整本书。在本书中,我们安排了几章来介绍VBA的基本知识。讲述VBA编程的章节中所使用的示例也是读者所熟悉的。
本书所用的约定
本书使用以下惯例:
◆ 本书中组合键(即按住一个键的同时再按下另一个键)的表示方法是用加号(+)将两个键连接起来。例如Ctrl+Esc表示在按住Ctrl键的同时按Esc键,然后同时释放两个键。
◆“将鼠标指向”的意思是移动鼠标使鼠标指针位于某个对象的上面;“单击”是指按下鼠标左键一次然后将其释放;“双击”是指快速按动鼠标左键两次然后释放;“右键单击”是指按下鼠标右键一次然后将其释放;“拖动”是指在移动鼠标的同时按住鼠标左键。
◆ 当选择某个菜单时,既可以使用键盘也可以使用鼠标。使用键盘的方法是:按住Alt键(以激活菜单条),然后按与菜单名对应的字母(该字母出现在菜单栏上菜单名称后边的括号内)键。例如,按Alt+E组合键就可以选中“编辑”菜单。使用鼠标的方法是:用鼠标单击屏幕菜单栏上的“编辑”菜单,然后在出现的下拉菜单中用鼠标单击相应的命令(或按该命令所对应的字母键)。
◆ 当从菜单中选择某个命令时,本书的表示方法是用箭头符号将菜单和命令分开。例如,“编辑”“粘贴”表示选择“编辑”菜单,然后再选择其中的“粘贴”命令。
◆ 在屏幕上看到的信息(报错消息、表达式、公式等)在本书中是用特定的字体表示的。
图标和警告
. 在本书中会看到各种专门的图形符号(即图标)。这些图标表示该部分内容特别重要或特别值得注意。本书主要使用如下图标:
强调有关目前正在讨论的话题的一个特别有趣之处。
表示一个有用的提示,该提示可能会为读者节省时间或省去许多麻烦。
警告要小心使用正在描述的操作,否则会出现问题。
指示在本书的其他章节有对某个问题的更为全面的讲述。
告诉读者可以使用本书附带光盘中的示例文件。
提醒读者注意Access 2003中出现的新特征。
本书的组织结构
本书包括39章,分为6大部分,另外还包括4个附录。这6部分分别是:
◆ 使用数据表和查询
◆ 创建窗体和报表
◆ 使应用程序自动化
◆ 创建企业应用程序
◆ 创建Web应用程序
◆ 有关Access数据库的高级话题
第1部分 使用数据表和查询
这一部分包含7章,介绍关于数据的所有知识并讲述信息的概念性设计。第1章讲述基本概念,帮助读者了解数据的基本元素,介绍数据库管理的基本知识,教读者设计表,并展示各种不同的数据类型。第2章讲述如何创建表。在该章中,读者将学会恰当地命名字段和分配数据类型,并学会重命名字段以及向已经创建的表中添加字段。第3章包含关于向窗体和数据表中输入数据的所有内容,读者将学会为字段添加验证、格式化字段、使用各种让数据输入变得更容易的工具以及搜索、更改或删除数据。在第4章中,读者将学到创建表、创建主键和外键以及使用Access中的关系生成器等方面的更多知识。第5章首先介绍查询的概念,然后通过建立几个查询来说明如何筛选、重新组织和显示数据。第6章继续介绍有关查询的内容,读者将学会设置更为复杂的查询条件,并初步了解SQL、WHERE子句以及如何使用操作符和表达式。第7章介绍如何导入、导出和链接外部文件,以及如何将Access对象复制到其他Access数据库。
第2部分 创建窗体和报表
这一部分包括10章,主要介绍窗体和报表。第8章对各种类型的窗体进行了直观的介绍,使读者对窗体控件有一个完整的了解。第9章讲述如何创建数据输入窗体和如何使用向导程序简化这一过程,此外还介绍了如何使用数据输入窗体。第10章讲述如何将窗体和表中的数据源绑定,以及如何创建绑定窗体。第11章讲述如何为窗体中的数据添加验证措施以避免发生错误,同时还介绍了组合框控件的基本知识。第12章讲述如何通过各种设计技巧并使用各种颜色和可视效果个性化窗体的外观,使之更为美观。第13章讲述报表创建、打印的基础知识,并介绍如何创建组以便使报表可以在任何层次上对数据进行汇总。第14章介绍如何将子窗体嵌入到窗体和报表中,以及如何在子窗体中将其与父窗体联系起来。第15章介绍如何在报表中创建计算与汇总,以及如何使用各种不同的组页眉和页脚。第16章讨论各种比较特殊的报表类型,例如多列报表、邮件合并报表与标签等。第17章介绍如何使用图像、声音、视频以及其他OLE对象。
第3部分 使应用程序自动化
这一部分介绍如何进行VBA编程、如何使用Visual Basic命令控制窗体和报表,以及如何创建优秀的用户接口。第18章介绍Visual Basic程序设计的基本概念以及如何编写Visual Basic过程。第19章介绍事件驱动程序设计的概念以及Access如何使用命令使人工处理过程自动化。第20章讲述Microsoft Access 的内置功能,包括从字符串处理到格式化日期等所有方面的内容。第21章讲述如何使用ADO和recordset对象在窗体和表之间移动数据,这一章对程序设计人员深入理解数据库管理有非常重要的意义。第22章讲述如何使用程序设计命令查找数据。在该章中,读者将学会自动查询以及链接组合框选项,以便在窗体中显示数据。第23章讲述如何使用子过程创建可重用的代码模块,以提高编码效率。第24章讲述如何为程序添加错误处理过程和相应的调试过程。在第25章里,读者将学会创建按钮菜单即切换面板,创建传统的下拉菜单,以及定制用来创建菜单和工具栏的命令栏。第26章介绍如何创建标签控件,以及如何使用连续窗体在数据视图之间进行显示和切换。
第4部分 创建企业应用程序
这一部分讲述如何创建适用于企业的应用程序。第27章讲述如何将Access表升迁到SQL Server以及如何使用升迁向导来完成工作。第27章侧重于讲述如何对数据进行升迁,而第28章侧重于介绍如何创建Access数据项目(ADP),从而建立真正的客户-服务器系统。读者在这一章中将学到如何升迁自己的程序,如何创建ADO记录集以使用SQL Server和Microsoft数据库引擎(MSDE)。第29章进一步深入地介绍了客户-服务器系统,讲述了如何创建存储过程、触发器以及传递查询。
第5部分 创建Web应用程序
这一部分讲述如何使用Internet或Intranet上的数据创建应用程序。其中,第30章使用读者已经熟悉的例子,讲述如何创建基本的数据访问页(DAP)。第31章对DAP进行进一步的介绍。第32章对XML进行了概括介绍,此外还简单介绍了新的InfoPath产品,它可以使用XML数据建立窗体。
第6部分 Access数据库高级话题
该部分由6章组成,主要介绍Access的高级话题。其中,第33章讲述如何在Access和其他Office产品(如Word,Excel,Outlook和PowerPoint)之间交换数据。第34章介绍安全性问题,即如何对数据库进行保护。第35章讲述如何建立和运行帮助系统。第36章讨论高级选择查询,包括总计查询、交叉表查询、上限值查询以及联合查询等。第37章讲述操作查询,操作查询会改变数据,而不是简单地显示记录。同时,第37章还概略地讲述了高级查询话题。第38章介绍加快应用程序运行速度的多种技巧。第39章介绍了新的Access开发人员版本(ADE)。
附录和参考资料
本书包括4个附录。其中,附录A由一系列表组成,列出了Access的规范,包括Access中许多控件的最大尺寸和最小尺寸。附录B展示了本书所使用的数据库表的结构,使读者能够创建自己的系统。附录C介绍了本书附带光盘上的内容。附录D对标准的命名约定进行了探讨。
示例说明
《中文版Access 2003宝典》中的示例是为了利于读者的学习而专门设计的。在本书中,读者将会看到许多非常好的商业表设计以及实现、窗体和报表创建以及Visual Basic模块编码示例。读者还会见到使用Jet(Microsoft Access的内部数据库)和连接到SQL Server数据库的例子,另外还有一些使用Access的DAP在Web上工作的窗体的例子。
所有开发人员都知道,从应用程序的角度来说,知道自己在创建什么或编写代码做什么是非常重要的,这有时也被称做是重中之重。在本书中,我们选择了一个大家都有可能用到的商业上的简单示例,读者必须对此有所了解,才能进行进一步的学习。实际上,在开发系统的时候,我们经常要面对一些自己并不了解的领域。很显然,飞机工程师要比我们更熟悉有关飞机的问题。但这并不是障碍,只要愿意和相关领域的专家合作,优秀的开发人员能够开发任何领域的应用系统。在本书中,笔者是作为商业领域的专家出现的。
本书的例子将使用一个虚拟公司,叫做Access Auto Auctions,或者简写为AA Auctions。AA Auctions购买和销售小汽车、卡车以及其他类型的交通工具,它在虚拟的展厅或网上直接销售或拍卖这些交通工具。示例数据库包含公司业务必需的所有表、查询、窗体、报表以及模块代码。
在这部分说明中我们会用到很多大家不熟悉的术语或名词,读者可以直接跳过它们,在阅读到相应的章节时再回过头来看这些内容。
使用光盘上的示例文件
在随书附带的光盘上有一个标准的Windows环境下的安装程序,可以使用它将所有的示例安装到硬盘上。我们为每个章节都提供了不同的Microsoft Access数据库文件,在安装完毕之后,它们会被放在硬盘上的不同子目录中。子目录的名称是Chapter xx,其中,xx是章节的序号;数据库文件被命名为Chapxxyyyyyyy.mdb,其中,xx是章节序号,yyyyyyy是对所包含内容的描述。例如, Chap07Start.mdb是在第7章要打开的第一个数据库,而Chap07End.mdb 是在第7章最后要使用的数据库。本书有些章节不包含数据库文件,但有些章节可能会包含很多文件。另外,在每个子目录中还能找到带有其他扩展名的不同类型的文件,本书中各章节的内容会提示读者如何使用每个文件。
除此之外,我们还提供了完全可用的程序、示例,以及面向终端用户和应用程序开发人员的一些最好的Microsoft Access工具,并且提供了这些工具的开发商的网址,以便读者能够得到有关它们的最新信息。
在每章的数据库文件中,读者只能看到该章所需要的对象。我们将所有的窗体和报表结合成两个数据库文件: Access Auto Auctions.mdb 包含所有的程序对象(查询、窗体、报表和模块),与之关联的数据文件Access Auto Auctions Data.mdb 则只包含应用程序所需的表。但是在每个单独的章节中,读者只能看到同一数据库文件中的程序文件(查询、窗体、报表和模块)。
专业的开发人员总是将程序对象和数据对象分别放在不同的数据库文件中,其实,在开发过程中将它们放在同一个数据库文件中,在开发结束后再整理到不同的文件中也是可以的。如果在编程的时候程序文件和数据文件是关联的,那么在对表设计进行修改之前就必须载入数据文件,在本书中读者将会对此有更深刻的认识。
主菜单
如果载入完整的示例文件(Access Auto Auctions.mdb),就会看到如图FM.1所示的主菜单(即切换面板),该切换面板包含显示系统各项主要内容的按钮。
图 FM.1 Access Auto Auctions.mdb数据库的切换面板,用户可以由此选择显示各种不同的窗体和报表
该系统包含的主要内容是:
◆ Contacts(联系人):指的是交通工具的卖方和买方之间的对应关系。除了传统意义上的客户和供应商之间的关系外,Contacts表还提供了对AA Auctions需要联系的所有人的单一访问点。
◆ Sales(销售):该按钮显示可以使AA Auctions输入买方信息(来自Contacts表)的Invoice(发票)窗体,它允许输入的行条款数目是没有限制的,每个条款都将从Products(产品)系统存储的信息中选取。
◆ Products(产品):AA Auctions销售或拍卖的所有产品的列表,包括汽车、配件以及需要销售或存储的任何商品,包含的信息有产品描述、成本、售价甚至是每辆汽车或每个配件的图片。
◆ Reports(报表):任何好的应用程序都包含许多不同层次的报表,该按钮实际上不做什么事情。一般来说,该按钮用来显示一个报表管理器,该报表管理器可以对报表名称和参数进行设置,如显示某个日期范围内或特定类型汽车的数据。尽管本书没有提供这样的内容,但在示例光盘上读者还是可以找到一个第三方的工具,叫做ez报表管理器(ez Report Manager)。
◆ Company Setup(公司设置):该按钮会显示一个窗体,它包含整个系统所需要的信息。在需要使用全局变量,如公司名称(本例中是Access Auto Auctions)或其他整个应用程序都需要使用的信息时,需要使用该窗体。
了解数据表
数据是Access(以及其他数据库管理系统)或任何系统中最重要的部分。在Access中,数据会被安排成一些逻辑组,这些逻辑组被人们称为表。表可以定义数据的结构并保存数据,为了彼此之间传递数据,以及将杂乱的数据组织成有序的信息,表和表之间是相互连接的。
图FM.2展示的是组成Access Auto Auctions数据库的大部分表。读者在本书的第一部分将会学到,图中表之间的箭头以及符号表示的是某种重要的通信关系;读者在该部分还将学到一些术语,例如表、字段、关系、参照完整性、主键和外键等,并了解表在数据库中是如何工作的。
图 FM.2 Access Auto Auctions.mdb数据库中的数据关系图,显示了示例表和它们的数据字段
表名称和数据字段名称前面为什么有前缀
也许读者已经注意到,在每个表的名称前面都使用了tbl前缀,而且图FM.2中每个字段的前面也有前缀。字段的前缀是为了说明字段的数据类型,这样,其他开发人员在Visual Basic中使用该字段的时候,就可以知道它是什么数据类型了。前缀tbl表示所命名的对象是表,数据库中的每个对象在命名的时候都使用不同的前缀,例如qry(查询)、frm(窗体)、rpt(报表)以及mod(模块)。一些比较常用的数据类型前缀是chr(字符型)、int(整型)、dtm(日期/时间类型)等。在本书中,我们会从始至终使用标准的命名约定。
命名约定在本书附录D中有详细的说明。
如图FM.2所示,在示例数据库中,大约有11个表,它们被用来创建Access Auto Auctions应用程序。许多比较小的表被称为查阅表,它们的惟一目的是提供一组合法的选择。比较大的表包含系统所要使用的数据。所有这些表都包含用于定义数据的许多字段,表之间的直线表示不同的表是如何通过公共字段联系起来的。如果这一切听起来有些陌生的话,那么不要着急,在本书前几章中有详细的解释。示例中的表包括:
◆ tblSales(销售表)
● tblSales 表包含与销售有关的数据字段,包括在销售中会出现的各种信息,例如发票号码、销售日期、购买者ID(连接到Contacts表以获取购买者以及纳税信息)、销售人员ID(连接到tblSalesperson表)、纳税地点(连接到tblTaxRates表),以及其他各种各样的财务信息。
◆ tblSalesperson(销售人员表)
● tblSalesperson 表包含销售人员列表以及他们的佣金,该表和销售发票联系在一起,当在Invoice(发票)窗体中选中某个销售人员的时候,会调用该表的信息。
◆ tblTaxRates(税率表)
● tblTaxRates 表包含纳税地点以及税率的列表,当在Invoice窗体中选择某个买家的时候,会调用该表中的信息。在该表中会得到纳税地点以及税率,从而计算出应该上缴的税金。
◆ tblSalesLineItems(销售行条款表)
● tblSalesLineItems 表包含组成销售的各个行条款。一个销售可能包含很多行条款,不同的汽车可以销售到同一个买家,购买者可能会同时购买配件、附件或服务等。在后续的内容中会创建一个窗体,它允许对发票输入数据。该表中的行条款没有数目限制。
● tblSalesLineItems表中的数据字段包含Invoice Number(发票号码),它用来连接主要的发票表和发票行条款表。Product ID字段(连接到tblProducts表)用来获取产品的信息,包括产品描述、价格以及纳税情况等。另外还有一个Discount(折扣)字段,允许输入折扣信息。
● 使用该表的方式和关系数据库的理论有所抵触。tblProducts 表中的数据项的值是被复制到tblSalesLineItems 表中的,而不是通过它们的公共字段chrProductID 从tblSalesLineItems表连接到tblProducts表的。这是因为在表中存在可能随时间变化而改变的数据。例如,某个客户今天购买了一个配件,价格是10.00美元,但是一周后从tblProducts表中查到的该配件的价格是15.00美元,很显然我们应该采用以前的数值,而不能根据两个表中的公共字段对该客户使用新的价格值。
本书第1部分将介绍更多有关关系数据库的理论。
◆ tblSalesPayments(销售支付表)
● tblSalesPayments 表包含支付字段。支付方式有很多种,客户可以使用支票做保证金,然后用各种不同的信用卡支付剩下的金额。在Invoice窗体中设定不加限制的支付行可以做到这一点。
● tblSalesPayments 表中的数据字段包含 Invoice Number,用来连接主要的发票表;还有一个字段规定支付类型(连接到tblPaymentType表),用来规定合法的支付类型、支付日期、支付数量、支票和信用卡号码以及过期时间等。
◆ tblPaymentType(支付类型表)
● tblPaymentType 表是一个查阅表,它的目的是提供合法的支付类型,只有合法的支付类型在支付时才可以被接受。
◆ tblContacts(联系人表)
● tblContacts 包含与Access Auto Auctions存在关系的所有人以及公司的信息。该表中的数据包括客户、供货商、买方以及卖方,存储的信息包括姓名、地址、电话号码、传真、电子邮件以及网址等。和 tblSalesLineItems 表中的信息不同,该表中的信息只连接到Invoice窗体,并且不存在复制关系,这样只要客户的信息(如地址或电话号码)发生改变,就会立即反映到任何Invoice窗体中。
◆ tblContactLog(联系日志表)
● tblContactLog 表为tblContacts 表中的每个联系人保存多个条目,这些信息包括联系日期、注意事项、讨论的内容以及其他一些信息。Contacts窗体管理所有这些信息。
◆ tblCustomerTypes(客户类型表)
● tblCustomerTypes 表包含的是Contacts窗体中可以选择的合法客户类型的列表,在整个应用程序中,保证这些值的合法性是非常重要的。在本例中,每个合法值都会触发特定的商业规则,因此,输入值必须限定成这些合法值。
◆ tblProducts(产品表)
● tblProducts 表包含Access Auto Auctions销售或拍卖的任何产品的信息。该表包含的信息被发票使用,还可以被用做存货表。不过,因为Access Auto Auctions的产品范围很广,所以还是叫做产品表比较合适一些。
● tblProducts 表几乎包含了Access中所有可用的数据类型。从商业的角度看,要有一个由用户定义的主键。该表包含的字段包括产品描述、成本、价格以及数量等,还有一些字段用来判断某些值是真还是假,如产品是否被拍卖或者是否需要纳税等信息。有一个字段用来显示拍卖终止的日期;还有一个字段包含的是长文本(即备注字段),它被用来显示产品的许多特征;另外,还有一个字段用来显示汽车的图片。
● tblProducts 表将是本书中经常会用到的一个主要表, frmProducts窗体在所有有关窗体的内容中都会用到,所以用户最好对该表多加了解。
◆ tblCategories(类型表)
● tblCategories 表被用来查阅合法的类型列表。