Access 2007开发指南(修订版)

978-7-115-28609-3
作者: 【美】Alison Balter
译者: 谢晖许伟
编辑: 杨海玲
分类: Access

图书目录:

详情

本书讲解了如下内容:Access 2007新增功能;创建Access 2007应用程序的细节;如何高效使用Access 2007表、查询、窗体和报表;通过使用对象、属性、方法和事件,用宏和VBA模块编写应用程序;更高级的主题等

图书摘要

Access 2007 开发指南 (修订版)

[美] Alison Balter 著

谢晖 许伟 译

人民邮电出版社

北京

本书讲解了在 Access 2007 中文版中开发应用程序的重要技能。主要内容分为 6 个部分。第1 章至第15章为第一部分,讲解Access开发的基础知识,包括表、关系、查询、窗体和报表的基本知识;宏的使用;VBA语言的编码;查询、窗体和报表的高级应用;高级VBA技术;类模块;ActiveX数据对象。第16章至第18章为第二部分,讲述如何解决开发过程中遇到的问题,如怎样用调试器检查代码问题,怎样实现应用程序中的错误处理,以及应用程序的优化方法。第19章至第22章为第三部分,讲述怎样为多用户环境或客户机/服务器环境开发应用程序。第23章至第28章为第四部分,介绍了功能区、自动化功能、Windows API、库和加载项技术,并且简单介绍了 Access 与 Internet 集成应用。本书的第五部分讲解了进一步改进应用程序的方法,内容涉及安全性、文档管理以及数据库的维护。

本书适用于中高级Access用户,内容丰富全面,实用性强,并附有大量实例辅助用户学习。

Alison Balter是InfoTechnology Partners公司的董事长,该公司是一个计算机顾问公司,它位于加利福尼亚州 Camarillo 附近的 Santa Rosa 谷。作为一名富有经验的独立培训人员和顾问,Alison 擅长于Windows 应用程序的培训和开发。在 23 年的计算机职业生涯当中,她为许多公司和政府机构提供过培训及咨询服务。自从Alison在1990 年创办InfoTechnology Partners公司(前身是马里拉咨询集团)以来,其客户群日益扩大,如今它的客户包括众多大型的企业集团和政府机构,其中有Shell Oil、Accenture、Northrop、美国药品监管公司、Prudential 保险公司、Transamerica 保险公司、Fox 广播公司、美国海军部及其他一些公司与部门。

InfoTechnology Partners公司是微软认证的合作公司,Alison是微软认证的专业人员。在计算机行业中,她是最早的微软认证的解决方案开发人员(MCSD)之一。

Alison是多媒体培训公司Blast Through Learning 集团的合伙人。Alison制作了300 多部国际发行的计算机培训录像以及光盘教材,其中包括 18 部 Access 2000 的视频、35 部 Access 2002 的视频、15 部Access 2003的视频。这些视频和光盘均由InfoTechnology Partners公司发行。Alison经常穿梭于整个北美地区,进行Microsoft Access、Visual Studio .NET、Microsoft SQL Server和Visual Basic 应用程序的培训和研讨。她还常常为美国国家技术大学进行电视广播培训。

Alison 担任 Access/Office/VB Advisor 及其他一些计算机出版物的特约专栏作家。她经常在全国做Access、Visual Studio .NET、SQL Server和Visual Basic的巡回演讲。她还是由应用程序开发专家培训公司和微软公司所赞助的Visual Basic 4.0 和5.0 全球巡讲者四人组中的一员。

此外,Alison编著了14本书,均由Sams出版社出版,它们分别是《Alison Balter’s Mastering Access 95 Development》、《Alison Balter’s Mastering Access 97 Development》、《Alison Balter’s Mastering Access 2000 Development》、《Alison Balter’s Mastering Access 2002 Desktop Development》、《Alison Balter’s Mastering Access 2002 Enterprise Development》、《Alison Balter’s Mastering Microsoft Access Office 2003》、《Teach Yourself Microsoft Office Access 2003 in 24Hours》、《Access Office 2003 in a Snap》、《Alison Balter’s Mastering Access 2007 Development》、一本有关Microsoft Access 2007 的用户手册、三本有关Microsoft Access 2007的电子书以及《Teach Yourself SQL Express 2005 in 24 Hours》,Alison 还与别人合著了三本由Sams出版社出版的有关Access的书籍,它们分别是:《Essential Access 95》、《Access 95 Unleashed》以及《Access 97 Unleashed》。

Alison同时也是许多用户组织和其他组织的积极参与者,她曾是洛杉矶独立计算机咨询联盟和洛杉矶Clipper用户组织的主席。目前,她担任Ventura County Professional Women’s Network的主席。

Alison喜欢骑马、滑雪、溜冰、跑步、举重、徒步旅行和跳舞。当然,她更喜欢与丈夫Dan、女儿Alexis、儿子Brendan以及他们的金色猎犬Brandy在一起享受时光。

Alison 的 InfoTechnology Partners 公司所能提供的咨询和在线培训包括 Microsoft Access、Visual Studio .NET、Visual Basic、SQL Server、Windows Server 2003、Windows 2000、Windows NT、Windows 98、Windows XP、PC 网络以及 Microsoft Exchange Server。读者可以通过发送电子邮件到Alison@InfoTech-Partners.com与她联系,也可以直接访问http://www.InfoTech-Partners.com。

谨将此书献给我的丈夫Dan、我的女儿Alexis、我的儿子Brendan、我的父母Charlotte和Bob以及我的生父Herman。Dan,你是我生活中的伴侣,是让我飞翔的翅膀。无论从何种意义上讲,你都是我人生中真正的另一半。我为能与这么出色的人度过一生而感到幸运。Alexis,你是我一直梦想拥有的可爱宝贝女儿。你比我曾经所拥有的一切都重要。有了你,我感到非常高兴,也感到非常满足。Brendan,你让我时刻保持警觉,有你在身边从来都不会感到沉闷。我真的很希望自己能拥有你那样的精力,哪怕只是一小部分。我感激你为我们家所带来的无尽的欢笑,也感激你使我重新认识到生活中重要的东西。爸爸,妈妈,没有你们在生活上给予我帮助,我不可能完成此书。对你们的感激我无法用言语来表达!

Herman,正是由于你,我才能在这种技术领域有所发展。我自己继承了一部分你的聪明才智和毅力。你没有等到此书完成就离我而去,我感到非常悲伤。我本来希望你能看到此书,并能为此而感到自豪。我还希望你能与我共享Dan、Alexis和Brendan给我带来的欢乐。

我们了解什么样有特点的写法与编排设计能让你受益最大。贯穿全书的这些特殊编排设计将帮助你提高学习效率,并尽快掌握Access 2007。

提示 提示信息会给读者提供快速的或是忽略了过程的建议,包括快捷键。

注意 注意的内容提供有用的或有趣的信息,它可能不是当前讨论内容的本质问题,但是可能是有助于理解的背景资料或是相关主题的建议。

警告 警告信息对潜在的问题给予警告,它们可以是程序引起的问题,不期望的结果,或是被证实为耗时的错误。

现在,有关Access的好书已经有很多了,我为什么还要写一本呢?这是因为当我在全国各地提供咨询服务时,许多学生都提出下面的看法。现有的Access读本要么针对普通用户群体,要么针对专家级的Access开发人员,而他们需要的则是介于这两者之间的,用于将自己提高为高级开发人员的Access书。他们需要的这种书要从基础讲起,而且要保证与他们的知识相衔接,他们还要求学习Access开发的高级技巧。在这个过程中,他们还想学到实用的代码,以便在编写自己的应用程序时将其轻松地添加进去。此外,由于Access 2007 与以前的Access有非常显著的不同之处,不同水平的用户都需要一本从Access早期版本过渡到Access 2007 的读本,我正是应这些请求,专门写了这本书。

首先,本书的开头简单地介绍了一下Access开发,指出了可以在Access中开发什么样的应用程序,同时也说明了Access应用程序中含有哪些组件。在弄清楚了什么是Access应用程序和应当什么时候开发它以后,就应该熟悉一下开发Access应用程序的步骤。在建立第一个应用程序组件之前,需要注意几点。也就是说,作为一个应用程序的开发人员,你应该意识到在特定的环境下将遇到什么样的设计问题。

在总体了解之后,你应该去理解Access数据库中各个对象的详细情况。第2章到第6章主要讲述表、关系、查询、窗体和报表的基本知识。这几章从开发人员的角度来展示开发上述数据库对象的方法和技巧。虽然说是从头讲起,但也提供了许多实用的提示、技巧和警告,而这些在其他面向最终用户的读本和文档之中是找不到的。

当完全了解了表、关系、查询、窗体和报表的基本知识之后,便可以开始学习建立应用程序了。第7 章介绍了将宏用作应用程序一部分的过程。在过去,严谨的开发人员不会选择使用宏,但是新的嵌入式宏、错误处理以及宏的变量内涵功能使它们至少可以作为应用程序的一种解决方案。第8章和第9章用来帮助你掌握VBA语言的编码。这里也是从头开始讲起,不过,你也可以从中理解VBA语言和Access对象模型的最复杂的实例。为保证你能完全消化所学的内容,每个主题下面都给出了许多实用的例子。

第10章到第12章对查询、窗体和报表进行更高级的讨论。在学习这个部分之前,你应该完全掌握创建数据库对象的所有基本知识。这几章将把VBA语言设计表、查询、窗体和报表的基本知识和在第8章到第9章所讲的对象技术综合到一起。第10章到第12章所提供的知识专门用于帮助你在应用程序中设计最复杂的表、查询、窗体和报表。

在介绍完基础知识之后,就要准备学习更高级的技术了。第13章介绍了高级VBA技术。随后的第14章深入地讨论了类模块。这一章内容包括很多实例,它们涉及利用类模块的方式和原因。

在进一步了解Access开发环境的诸多奥秘之前,还有一个最基本的内容。第15章介绍了ActiveX 数据对象。你会学到怎样从绑定对象中移开,以及怎样用代码在数据库中操作数据。

遗憾的是,凡事都不会一帆风顺。即使有了丰富的经验,代码还是难免出错,你还要去找出原因。第16章展示了怎样使用调试器去检查和解决代码中可能出现的问题。即使应用程序已经被完全调试好,也应该在应用程序中提供代码出错的处理方法。第17章介绍了在应用程序中怎样实现错误处理。本书所列出的代码以及供下载的示例代码(下载资源可从www.ptpress.com.cn本书对应页面下载)均是通用的错误处理程序,你可以很容易地将其放入自己的应用程序中。

即使是设计最精巧的应用程序也会因为运行缓慢而使用户感到不快。第18 章介绍了优化方法——这些都是你应该应用于应用程序代码中的技术,它们可以尽可能地确保应用程序有效运行。

有了前面18章的基础,便可以学习VBA 语言和Access开发环境的复杂内容了。第19章到第22章讲述怎样为多用户环境或客户/服务器环境开发应用程序。在这里,你将学习到怎样应用锁定策略,怎样与非Access文件格式的文件交互,以及怎样使用Microsoft SharePoint设计客户机/服务器应用程序。

作为Access开发人员,你不能将自己只局限于Access上。要想成为一个具有一定水平的Access开发人员,还应该知道怎样与其他应用程序进行交互,以及怎样使用ActiveX控件、库、菜单加载项、向导和生成器,因为这些可以加快应用程序的创建过程。第23 章到第28 章介绍功能区、自动化功能、Windows API、库和加载项技术,并且简介 Access 与 Internet 集成应用。读完这几章之后,你就会理解怎样使用外部对象和各种功能来丰富应用程序,而且这些做起来是比较容易的。

本书的最后部分介绍了进一步改进应用程序的方法。第29章到第31章介绍了安全性、文档管理以及数据库的维护。你会学到如何使应用程序更安全,这样你就不会抱怨投入到应用程序开发过程中的精力了。你还会学到正确地文档化数据库和维护数据库的方法,它们相当简单但却是必要的。

Access开发环境是一个功能强大的且令人兴奋的环境。如果能够掌握它所提供的全部技巧,那么,你既可以创建让自己满意的应用程序,也可以得到经济上的回报。读完此书之后,你最好将它留在身边,这样,就能慢慢精通 Access 2007 的开发。这本书详细地讲述了 Access 2007 的强大功能。你将看到Access 2007 的应用是非常广泛的。

写书是一件非常不容易的事情。没有周围人的理解和支持,这本书就不会面世。我要特别感谢以下对此书有特别贡献的人,而更重要的是他们给了我生活的意义。

Dan Balter(我忠诚的丈夫)不仅给了我从不间断的支持、爱、鼓励和友谊,而且经常陪我写书到深夜。Dan,对你以及对你为我所做的一切,我无法用语言表达我的喜爱与感激之情。你像对待一位女王那样待我。你为人是那样的无与伦比,感谢你在那么困难的时期依然爱我、支持我。与你在一起,我不仅为事业上的成功感到喜悦,而且为与你拥有这么漂亮的儿女Alexis和Brendan感到高兴。我盼望我们生活得更美好。与你共度此生是我的幸福。

Alexis Balter(我的宝贝女儿、出色的舞蹈家、演员以及花样滑冰运动员),谢谢你使我的生活增添了不凡的意义。你的智慧、同情心、细心以及感知能力远远超过你实际年龄所能达到的水平。Alexis,因为你,我觉得工作很值得。不管我的心情如何不好,只要看到你,我就感到自己心里充满了阳光。你是上帝赐予给我的最特别的礼物。最后感谢你成为我散步的伙伴,我非常喜欢在每天几公里的散步途中与你进行交谈。

Brendan Balter(我可爱的儿子、小演员以及运动员),谢谢你让我知道了什么是坚持不懈。虽然你还非常小,但是你已经展现出男孩的坚强了。我从来没有见到过一个男孩儿能够拥有这样坚忍不拔的毅力。你的想象力和创造力使我感到惊奇。感谢你的可爱、你的敏感以及你无条件的爱。更重要的是你让我重新认识到幽默感的重要性。

Charlotte 和Bob Roman(我的父母),谢谢你们给予了我必要的信任,并且与我共享生活中的酸甜苦辣。爸爸妈妈,没有你们特别的爱和特别的支持,我就不会有今天。没有你们的帮助,也许我会一事无成。你们对我的帮助是我无法用言语来形容的。

Al Ludington,谢谢你帮助我放慢速度、经历这灰色世界中的阴暗。你在留守原地与设置限制之间、在安慰我与对抗我之间找到一条精准的道路。语言无法表达你对于我无条件的爱的意义。感谢你总是在那里等我,并且让我认识到有一个美丽的梦想毕竟不是一件坏事。

Herb和Maureen Balter(我的公公和婆婆),你们是非常棒的父母,尽管我们刚开始相处时比较困难,但是我想让你们知道你们对于我有多么特别。我非常珍惜你们的认可与关怀,也非常感激你们为Dan和我所做的一切。我为我的生命中拥有你们而感到荣幸。

Sue Terry,任何人所能想象到的最好的朋友。你以你的音乐、你的爱、你的友谊以及你对上帝的信仰激发我写作的灵感。当我心情糟糕时,只要回想你歌唱“Dear God”或者“Make Me Whole”的场景,心情就会豁然开朗。谢谢你带给我的友谊。

Roz、Ron 和Charlie Carriere对我写作的追求给予了鼓励和支持。知道别人为自己的工作感到自豪是一件让人感到欣慰的事。我非常怀念我们像家人一样团聚时共同度过的难忘时光。Charlie,希望你在耶鲁能够度过一段美好的时光。

Steven Chait,我的一个特别的哥哥。我想让你知道,你对我的影响有多大。当我还是一个小女孩时,你告诉我说我有写作的天分。也许你并没有在意,但是,我当时就下定决心要像你那样成为写作能手。如今,我们都已长大成人,我们真的在很多方面都非常相像。

Sonia Aguilar是人们能想象到的最好的保姆。你特别得难以用语言来形容。尽管你已经不再是我们生活的一部分,但是Alexis 和Brendan会依然爱你。我非常感激你在他们成长的关键时期为他们成长打下的基础。你建立了一种关于爱、仁慈和善良的令人惊奇的模式。

Blast Through Learning 公司的Greggory Peck,感谢你为我在这个行业的成功所做出的贡献。我相信在我事业刚起步时你给我的机遇帮助我所达到的高度,是我靠自己的能力难以达到的。所以,Greggory,谢谢你的爱与友谊,我爱你!

Nicole Phelps,你是一个伟大的办公室经理。感谢你让我夜以继日的工作变得简单。尽管你是我的办公室经理,但你对我的意义远远大于此。你是我的朋友,像我的妹妹一样。你是一个特别的人,理应得到生活最好的回馈。永远不要忘记你是多么的与众不同。

Scott Barker也是我一位特别的朋友,同时帮助我管理繁重的行程表。在工作方面,我无法用语言表达你对我的帮助有多大。你像我希望的那样善待我的客户,并且拥有无可非议的工作准则。从个人方面,你、戴安娜以及你们的家庭都是我们最好的朋友。我的孩子们非常喜爱你们的家庭,我与Dan也非常喜爱你与戴安娜。感谢你们出现在我们的生活中。

Reverend Molly,我无法形容你在陶冶情操方面对我的帮助,你是一个令人惊奇的女人,也是我的良师益友,我深深地爱着你。同时感谢我所有教堂的朋友们:Ed、 Robin、Gayle、Gail、Greg、Ivette、Sharon、Heathe、Jim、Sheryl、John、Rick、Janie、Sherri、Mildred、Opal、Sue、Mary、Terri、Susan、Beth以及所有没有提及的朋友们,感谢你们的爱与支持。

Diane Dennis、Shell Forman、Ann Sookikian、Bob Hess、Anne Weiderweber、Norbert Foigelman、Chris Sabihon以及其他我生活中好朋友们,感谢你们!

Diane,从我们四岁时起你就是我的精神伙伴!Shell,你是我最特别的姐妹,我为有你这样的朋友感到幸运。Ann,尽管我认识你时间并不长,但是你已经成为我生活中一位相当特别的朋友。Bob,当我需要你时,你总是能够及时出现,而且你的脸上总是带着微笑。Anne,你是一位非常棒的朋友、散步伙伴以及知己。Norbert,你对我以及我的家庭都是非常特别的朋友。Chirs,你不仅是我的朋友,而且你对我的精神生活也有重要的影响。

Gaby Ayar,感谢一切!你是一个完美的朋友!Queiro你有完美的生活,我爱你!

感谢Ellen McCrea、Chuck Hinkle、Diane Buehre、Dan Buffington、Silas Raymond、Philip Ochoa以及我生活中所有的工作助手和特殊客户。尽管开始时你们只是我的工作助手,但是我感觉我们的情意要远远在这种关系之上。我为生命中有像你们这样的工作伙伴感到高兴,感谢你们所有人对我写作的支持。

Loretta Yates、George Nedeff、Todd Meister以及Kevin Howard,你们使我与Sams出版社的合作关系融洽。Loretta,在过去的几年当中,我无法形容与你一起工作时的快乐。与你相处非常轻松,我对我们的友谊感到欣慰。我希望将来仍能与你一起工作。George,Todd和Kevin,我知道你们为保证这本书的及时出版以及达到最好的质量都付出了艰辛的努力。没有你们,就没有这本书。在过去的几个月中,与你们共事我感到非常愉快。我很感激你们对我进度的慎重和敏感以及这本书之外的承诺。你们将我看作是一个完美的人,而不仅仅是作者,同你们一起工作感觉非常棒!

第1章 Access作为开发工具

第2章 数据库和表必备知识

第3章 关系:数据完整性的关键

第4章 查询必备知识

第5章 窗体必备知识

第6章 报表的必要知识

第7章 宏及其用法

第8章 VBA基础

第9章 对象、属性、事件和方法

第10章 高级窗体技术

第11章 高级报表技术

第12章 高级查询技术

第13章 高级VBA技术

第14章 利用类模块的功能

第15章 ADO 及其重要性

本章主要内容

1.1 本章的重要性

1.2 Access 中可开发的应用程序类型

1.3 具有缩放能力的Access

1.4 什么是数据库

1.5 什么是数据库对象

1.6 对象命名约定

1.7 硬件要求

1.8 Access 应用程序的开发过程

1.9 Access 2007 的新功能

1.10 Access 2007中的其他新功能

1.11 额外的提示和技巧

1.12 实例:应用程序设计实例——一个计算机咨询公司

1.13 小结

在和很多用户及开发人员讨论时,笔者发现Access是一个很容易被误解的产品。许多用户认为它只是那些想要处理数据的经理或秘书的工具;还有一些人感觉它是极其复杂的开发产品,除了富有经验的程序开发人员外,普通人无法使用它。本章将揭开Access的神秘面纱,帮助用户理解Access。在阅读完本章后,用户将知道什么时候将Access视作工具,以及什么时候可以用它探索其他产品。

对于用Access可以开发什么类型的应用程序这个问题,笔者已经解答过很多次了。Access提供了大量的功能,它可以满足不同的数据库要求。它可以用于开发以下6种类型的应用程序:

个人应用程序;

小型商务应用程序;

部门级应用程序;

公司级应用程序;

作为企业级客户/服务器应用程序的前端程序;

Intranet/Internet应用程序。

Access可以用于开发简单的个人数据库管理系统。虽然人们也许都会注意这一点。但是,那些购买了Access,并希望它能自动完成从葡萄酒收集到家庭理财的每件事情的人会感到大失所望。问题就在于Access的应用看起来简单了点,其功能强大的内置向导使它看上去能被每个人很好地使用。回答几个问题之后,就可以完成应用切换面板、数据输入屏幕、报表及支持它们的基本表。实际上,当 Microsoft公司刚刚发布Access的时候,许多人曾问过,说作为一个计算机编程人员和培训人员是否已经失去了意义。因为有了Access,好像谁都可以很容易地编写出数据库应用程序,虽然实际上也是如此。最简单的Access应用程序并不需要用户作什么设计,也不需要用户编写什么代码,但是,大多数应用程序还是要求有所设计,并要求自行编码。

如果仅仅满足于由向导生成的个人应用程序,不作任何修改,那么不会出现什么问题。如果要完全自行设计个人应用程序,那么就还有很多事情要做。

对于开发运行中小型企业系统的应用程序来说,Access是一个较好的平台。它的向导有助于开发人员快速且轻松地构造出应用程序的框架。由于它支持代码模块,因此,开发人员很容易建立可重用函数的代码库。又由于它支持在窗体和报表之后添加代码,因此,它具有强大的窗体和报表自定义功能。

用Access开发自定义的中小型企业应用程序的唯一限制在于开发过程所要求的时间和费用。许多人在开发过程开始时,总喜欢使用Access的向导,但是到后来,他们发现这样做又不能完全按要求进行自定义。随着规模的扩大,中小型企业应用程序的用户更会发现这个问题的严重性。中小型企业应用程序的要求一般比个人应用程序的要求更高。许多医生、律师和其他专业人士在开发过程中进入死胡同时向我求救,这时他们才会清楚,要让他们的程序能运行需要花多少费用。

对于一些大型公司的各个部门来说,用Access开发应用程序是非常合适的。在一个部门内部,要想升级到适当的硬件,相对来说比较容易。例如,为15个人购买内存比为4000个人购买容易得多。而且它的性能对部门管理应用程序来说已经足够了,这里不需要什么客户/服务器技术。最后,大型公司的多数部门预算一般比较多,也就是说,开发良好的应用程序在费用上不成问题。

幸运的是,绝大多数部门均有计算机方面的行家里手,他们乐于帮助设计窗体和报表。这样,各个部门在开发应用程序上具有一定的主动性。而且,这对开发人员来说也轻松得多。对于笔者来说,也就只须考虑一些纯粹开发上的问题,而把窗体和报表的设计留给行家去做。

Access不仅适合于开发部门管理的应用程序,还可以用于开发分布到整个单位的应用程序。当然,这也要视具体的公司而定。这时,要想具有可接受的性能,同时共享Access应用程序的数量会受到限制;而且,要想不出现重大的操作问题,每个表所含有的记录数也要受到限制。这些数量上的限制与以下几个因素有关:

现在网络上的通信量如何;

服务器的RAM和处理器资源有多少;

服务器使用情况如何,例如,像Microsoft Office这样的应用程序是装载在服务器上,还是装载在本地工作站上;

应用程序的用户正在执行何种任务,他们是在查询、输入数据、运行报表,还是在做其他工作;? Access及Access 应用程序在哪个平台上运行(是服务器还是工作站);

网络操作系统安装在何处。

对不是基于客户/服务器的Access应用程序来说,根据笔者的经验,在同时使用的用户超过10~15个、记录添加到超过100 000条时,性能将变差。请记住,这个数字根据以上所提及因素的不同而有所变化,每个开发人员和每个用户对可接受的性能这个词的定义也是不同的。第22章将讲述什么时候使用客户/服务器数据库。也是由Sams出版的另一本书《Alison Balter’s Matering Access 2000 Client/Server Development》,介绍了有关这个主题的详细内容。

许多开发人员经常搞不懂 Access 本身与它用于客户/服务器数据库平台之后两者间的区别。常有人问我:“Access不是客户/服务器吗?”回答是这样的,Access这个产品的不寻常之处就在于,它不仅是一个文件服务器应用程序,它还可以作为客户/服务器数据库的前端。如果还是不明白,那么可按如下说明理解:当购买了Access之后要开发这么一个应用程序,此应用程序用于将数据存储到Access数据库中的文件服务器中,而且所有的数据处理都是在工作站上完成的。这就意味着,在用户每次运行查询和报表的时候,所有数据都要导入工作站。导入之后,查询就会在工作站上运行,结果则以数据表或报表的形式显示。这个过程将产生大量的网络通信量,如果有多个用户同时对一个大型的Access表运行报表和查询,则更是如此。实际上,这种操作将使网络速度慢如蜗牛。

客户/服务器数据库(比如说 Microsoft 公司的 SQL Server 和 Oracle)是在服务器上处理查询,然后将结果送回给工作站。服务器软件本身并不能将数据显示给用户,这是Access的任务。作为一个前端, Access可以从数据库服务器中检索数据,并且以报表、数据表或者窗体的形式显示。如果用户在Access窗体中对数据做了更新,这个更新可以送回给后端数据库。要想做到这一点,可以通过与这些外部数据库进行链接,以使它们作为 Access 表显示给开发人员和用户,也可以直接使用访问客户/服务器数据的技术。

因为Access 2007 装载了集中数据存储(SQL Server2005 Express版的数据库引擎),所以可以在桌面上开发一个客户/服务器应用程序,然后轻松地将它部署到企业SQL Server数据库中。第22章简短地介绍了开发客户/服务器应用程序所需的选择和技巧。《Alison Balter’s Matering Access 2000 Client/Server Development》一书讲述了有关如何开发Access工程的详细内容。

将查询处理移到后端,可以大大减少网络通信量,这样,Access这个开发解决方案也显得越发强大。这时它可以处理大量的数据,而且可以同时应付很多并发用户。开发这种大型的Access应用程序时,开发人员通常要面对如下的主要问题:

用户所用操作系统的种类;

展开的困难;

用户使用哪种方式连接应用程序和数据;

用户使用的硬件类型。

虽然说客户/服务器应用程序中的查询处理是在服务器上进行的,这确实大大地减少了网络通信量,但是,应用程序本身仍然驻留在各个用户的计算机上。这意味着每个客户端机器必须能够运行合适的操作系统及正确版本的Access。即使应用了正确的操作系统和Access,问题仍然没有解决。在Access应用程序中,动态链接库(DLL)冲突经常导致用户很难诊断的错误及怪异的反应。并且,对于分离的用户,他们必须通过Internet访问应用程序和它的数据,因此,Access就不是最好的解决方法。最后,Access 2007对硬件有严格的要求。这一章后面将介绍Access应用程序对硬件的要求。在决定配置这种大型的Access应用程序之前,必须弄清楚自己系统中各个用户的硬件和软件配置。还必须知道典型的Access应用程序所需的桌面支持是否适合给定的用户数,这些用户将使用要创建的系统。

使用数据访问页,可以用静态HTML页和动态HTML页发布数据库对象。静态页是标准的HTML,它可以使用任何一个浏览器浏览。Access 2000引入了从Jet或SQL Server结构及数据中创建XML 数据和图表文档的能力,还可以从XML文档中将数据和数据结构导入到Access中。使用代码或者通过用户界面都可以完成这项任务。

注意 本书介绍了Internet相关功能的内容,例如操作HTML和XML文件。

Access 之所以强大,还在于它的缩放能力。使用 Microsoft Access 开发的应用程序,在开始时可以是在单个工作站上运行的小型商务应用程序,但是到后来,它可以变成一个企业级的客户/服务器应用程序。如果应用程序设计良好,用户扩展工作是非常简单的,甚至不用重写代码。这个特点使得 Access非常适合于需要扩展的商务应用程序,如果要将在部门级开发的应用程序分布到整个公司,那么它也是极好的选择。

更让人欣慰的是,Access既是前端又是后端,其中文件服务器的数据存储在Access的表中,它还能提供较好的安全性,而且能在后端数据库中预先建立数据库规则。在数据库级别中,可以使用给出参照完整性规则。例如,在一个数据库中,若某客户并不在其中,则不应该输入他的订单。为保持数据库中数据的完整性,在字段级和记录级应执行数据有效性规则。换句话说,通过使用Access本身的专有数据存储格式,许多以前只能在高端数据库服务器应用的功能现在也可以在普通数据库中使用。

数据库(database)这个术语对不同的人来说,意思是不一样的。几年前,当xBase(包括dBASE、FoxPro和CA-Clipper))比较流行的时候,数据库用来描述字段和记录的集合(这在Access中称为表)。在客户/服务器环境中,数据库可用来表示与一个系统关联的所有数据、方案、索引、规则、触发器和结合某个系统的存储过程。在Access中,数据库就是指那些用来组成一个完整系统的所有的表、查询、窗体、数据访问页面、报表、宏和模块的集合体。

正如前面所提及,Access的数据库由表、查询、窗体、报表、宏和模块组成。这些对象都有自己特定的功能。Access环境还包括好几个杂项对象,包括关系、数据库属性和导入/导出规格。有了这些对象,就可以创建功能强大的、用户友好的集成应用程序。图1.1所示的是Access的应用程序窗口。请注意,在“导航窗格”中列出的对象类别。以下各节对Access数据库的各个对象进行解释。

图1.1 “导航窗格”显示了每个数据库对象的类别

表是应用程序的起点。不管是将数据存储在Access数据库中,还是使用链接表引用外部数据,数据库中所有其他对象都对表进行了直接或间接的引用。

要想查看一个已打开的数据库中的各个表,应从“导航窗格”下拉列表中选择“表”,如图1.2所示(请注意,这里看不到任何隐藏的表,要查看隐藏的表,必须在“导航选项”对话框中选择“隐藏对象”复选框,如图1.3所示)。如果要查看某个表中的数据,应双击要浏览的表名。

Access将表中的数据以数据表的形式显示,其中包括了表中的所有字段和记录(如图1.4所示)。注意,图中折叠了“导航窗格”,这样可使用户更好地查看表(该技巧会在本章后面介绍)。可以修改数据表的诸多属性,甚至还可以对数据表内的数据进行查找和筛选。如果某表与另外的表进行了链接(如罗斯文的客户表和订单表),就可以打开或折叠子数据表,用以查看存储在子表中的数据。这些简单的技巧不会在这本书中介绍,Access的用户手册或其他介绍关于Access的图书对此已经做了介绍,例如《Sams Teach Yourself Microsoft Office Access 2007 in 24 Hours》。

图1.2 要查看所有表,从“导航窗格”下拉列表中选择“表”

图1.3 利用“导航选项”对话框可以显示隐藏对象

图1.4 在罗斯文数据库中“客户”表的“数据表”视图包括了该表的所有字段和记录

作为开发人员,经常要查看表的设计,它是表的蓝本,也可以说是模板。为了查看表的设计,应该在打开表后单击功能区开始页面上的“视图”图标(见图1.5)。在设计视图内,可以查看和修改所有的字段名、数据类型以及字段和表的属性。在Access中,用户具有自定义表的设计能力和灵活性,第2章将讲述这些内容。

图1.5 “客户”表的设计是该表的蓝本或模板

关系:连接表

为了较好地维护数据的完整性并简化与数据库内其他对象的操作过程,必须在数据库中的表之间定义关系。通过使用“关系”窗口可以完成这项任务。为了浏览“关系”窗口,应该选择“数据库工具”选项卡,然后在“显示/隐藏”组中选择“关系”按钮,此时,“关系”窗口就会出现,如图1.6所示。

图1.6 可以查看和维护数据库中关系的“关系”窗口

在这个窗口中,可以查看和维护数据库中的关系。如果自己或者某个后续的开发人员已经设计了一些关系,但是在“关系”窗口中却看不到它们,那么在“设计”选项卡上的“关系”组中选择“所有关系”按钮,就可以将任何隐藏的表和关系显示出来。

请注意图1.6所示的关系,表之间的连接线上有一个数字1,还有一个无限符号(∞)。这说明在这些表之间有一个“一对多”关系。如果双击连接线,那么将出现“编辑关系”对话框(如图 1.7 所示)。在这个对话框中,可以指定表与表之间的准确关系。比如说,客户表与订单表之间的关系就是一对多的关系,它将执行参照完整性规则。也就是说,对于不存在的客户不能添加订单。请注意,“级联更新相关字段”这个复选框没有选中。这就意味着,用户不能更新客户表中某个客户的客户ID。由于“级联删除相关记录”这个复选框没有选中,因此,如果客户在订单表中有订单,那么它们不会从客户表中删除。

本书第3章将详细地讲述关系的定义和维护过程,还会介绍相关数据库设计的基础知识。不过,在设计过程中,要尽早地在概念和设计上认识到关系的存在。要想成功地设计和实现应用程序,它是必不可少的。

图1.7 可以指定表与表之间准确关系的“编辑关系”对话框

Access 的查询功能是非常强大的,并且具有多面性。利用选择查询可以对自己表中的数据进行查看、汇总和执行运算。利用操作查询可以添加、更新及删除表中的数据。为了运行查询,应该先从“导航”下拉列表中选择“查询”,然后双击要运行的查询,或者右键单击选择要运行的查询,然后单击“打开”按钮。在运行一个选择查询后,将出现一个数据表,其中包含了在查询中指定的所有字段和与查询规则相匹配的所有记录,如图 1.8 所示。在运行了一个操作查询后,Access 就会执行指定的行为,例如新表的创建及对现有表的数据追加这样的行为。一般来说,这时的查询结果的数据会得到更新,因为查询的结果实际上是一个动态的记录集,又被称为动态集,它以表中的数据为基础。

图1.8 运行“已订库存”查询,会出现数据表,包含查询指定的所有字段及满足查询规则的所有记录

当存储一个查询时,实际上只有其定义、布局或者说格式属性以及数据表存储在数据库中。Access为用户设计查询提供了直观的、界面友好的工具。图1.9显示出了“查询设计”窗口。要打开该窗口,应该在“导航”窗格下拉列表中选择“查询”,然后选中要修改的查询,并且单击鼠标右键,在弹出的快捷菜单中选择“设计”命令。图1.9中给出的查询是从采购订单、采购订单状态和采购价格总计表中选择数据(注意,查询是可以基于表和其他查询的)。它显示了采购订单表中的创建日期、供应商 ID、运费、税款和其他几个字段,也显示了采购订单状态表中的状态,还显示了来自采购价格总计查询中的价格汇总。第4章和第12章将专门讲述查询。因为查询是绝大部分窗体和报表的基础,因此查询可以应用于数据库中其他对象的过程,有关查询的内容将遍布全书。

图1.9 从采购订单表、采购订单状态表及采购价格总计查询中显示数据的查询设计

虽然可以在表的数据表视图中输入和修改数据,但是,这样做并不能很好地控制用户的行为,也不能很好地处理数据输入过程,而这时就需要使用窗体了。Access的窗体富有特色,而且灵活多样、功能强大。

要想浏览某个窗体,应该从“导航窗格”中选择“窗体”。然后双击想要浏览的窗体,或者右键单击需要浏览的窗体,在弹出的快捷菜单中选择“打开”命令。图1.10所示的是“窗体”视图中的一个窗体,该窗体实际上包括4个窗体,即1个主窗体和3个子窗体。主窗体显示的信息来自订单表,而子窗体显示的信息来自订单明细表和订单表。当用户一个一个地查看订单时,与订单相关联的订单明细会相应地显示出来。如果用户选择了“发货信息”和“付款信息”选项卡,就可以看见有关该订单的额外信息。

图1.10 包括客户、订单和订单详细信息的订单明细窗体

像表和查询一样,也可以在设计视图中查看窗体。为了查看窗体的设计,应该从“导航窗格”中右键单击该窗体,在弹出的快捷菜单中选择“设计”命令。图1.11所示的是设计视图中的订单明细窗体。请注意主窗体中的3个子窗体,第5章和第10章将专门讲述窗体。在应用程序的一些例子中应用窗体时也会介绍它。

图1.11 含有 3 个子窗体的订单明细窗体的设计

在窗体中可以输入和编辑信息,但是在有了报表之后,就可以用打印机打印报表信息。图1.12所示的是一个预览模式的报表。要想预览某个报表,应该从“导航窗格”中右键单击该报表,然后在弹出的快捷菜单中选择“打印预览”命令,或者双击想要预览的报表。请注意报表中的颜色及其他内容,比如说列标题的阴影区域。报表像窗体一样,也是比较复杂的,不过它可以包含相当丰富的信息。

图1.12 “季度销售报表”的预览在报表中显示出信息

也许用户想象不到,也可以在设计视图中浏览报表,如图1.11所示。要查看某个报表的设计,应该在“导航窗格”中右键单击该报表,然后在弹出的快捷菜单中选择“设计视图”命令。图1.12所示的报表有好几个节,从图中可以看到报表页眉、页面页眉、主体、页面页脚和报表页脚,这里只给出了报表中许多节中的一些。就像窗体可以包含子窗体一样,报表也可以包含子报表。第6章和第11章将专门讨论报表。当它用于应用程序的一些例子中时,用户也会看到它的应用。

Access中的宏与其他Office产品中的宏是不一样的。它们不能像在Microsoft Word或Excel中那样进行记录,也不能像应用于应用程序的Visual Basic(VBA)代码那样保存。对于许多在键盘、菜单和工具栏上手工执行的大多数任务,都可以用Access的宏来执行。宏可以提供条件,这样用户就可以在应用程序流中添加逻辑。

Access 2007中可使用嵌入式宏。嵌入式宏不是在“导航窗格”中作为单独的对象出现,而是作为它连接的对象的一部分。当修改一个嵌入式宏时,它不影响数据库中的任何其他宏或对象。因为用户可以阻止嵌入式宏执行某些潜在的不安全操作,所以它们是可以信任的(包括嵌入式宏的宏知识会在第7章中介绍)。

为了运行宏,应该在“导航窗格”中选择“宏”命令,然后右键单击想要运行的宏,在弹出的快捷菜单中选择“运行”命令。这样,Access就会执行宏的操作。要想查看宏的设计,应该在“导航窗格”中右键单击该宏,然后在弹出的快捷菜单中选择“设计视图”命令。图1.13中给出4列宏。利用第1列可以指定条件,宏内第2列的操作只有在这个操作的条件为真时才会执行,第3列显示了该行宏的参数,利用第4列可以给宏添加注释。宏设计窗口的下半部分用来指定用于选定操作的参数。在图1.13中,选定的操作是OpenForm,它接收6个参数,即“窗体名称”、“视图”、“筛选名称”、“Where条件”、“数据模式”和“窗口模式”。

图1.13 包括条件、操作、参数和注释的AutoExec宏的设计

模块(Modules)是任何一个应用程序的基础,利用它可以建立函数库,并将其用于整个应用程序之中。模块一般是由子程序和函数构成的。函数通常要返回一个值,而子程序则不会。通过使用代码模块可以做以下工作:

执行错误处理;

声明和使用变量;

遍历和操作记录集;

调用Windows API 和其他库函数;

创建和修改系统对象,如表和查询;

执行事务处理;

完成许多宏没有的功能;

测试和调试复杂的过程;

创建系统库数据库。

这些只是使用模块可以完成的一部分任务。为了查看一个现有模块的设计,应该在“导航窗格”中右键单击想要修改的模块,然后在弹出的快捷菜单中选择“设计视图”命令打开“模块设计”窗口,如图1.14所示。在图1.14中的全局代码模块包含通用声明节和5个函数。图中可见的函数名为CreateInvoice。第8章和第13章将对模块和VBA进行专门的讨论,不过,这本书的各章均会对它们有所论述。

图1.14 在设计视图中给出了通用声明节和CreateInvoice函数的全局代码模块

不管是在Access中,还是在其他编程语言中,都应该遵守一组命名约定,而且要持之以恒,这是成功开发的关键。在确定命名约定时,应该考虑以下3个原则:

容易使用;

可读性好;

广为开发人员所接受。

本书中使用的命名约定来源于Leszynski/Reddick命名约定,它们主要应用于Access的版本1.x和2.0之中。这些标准应用很广,而且被开发领域广为采纳,在前几年流行的大多数开发书籍和杂志当中,均可以找到它们的身影。这些约定为上述环境的对象命名提供了简单而且具有一致性的方法。

附录A中的命名约定可在www.samspublishing.com网站上下载,并且它包括了命名对象约定的总结。在整本书中都会用到它们,在应用到的各个章节还会强调它们。

Aceess的一个不足之处就在于它对硬件资源的要求太高。这种要求对开发人员和最终用户来说是不一样的,因此,将系统要求分成两个部分来讨论。当用户在接触到这些要求时,请注意实际要求和推荐要求之间的区别。

开发人员的系统硬件要求

根据文档说明,以下是运行Aceess 2007 所要求的最低配置:

主频大于500MHz的处理器;

带有Service Pack 2的Windows XP、带有Service Pack 1的Windows 2003 或者是更新的操作系统,例如Windows Vista;

容量256MB的内存;

容量1.5GB的硬盘空间(当下载的原安装包从硬盘移除后,一些空间会被释放出来);

1024×768 或者更高的分辨率的显示器;

CD-ROM 或DVD 光驱;

指向设备。

硬件是没有上限的,配置越高就越好。更高的内存,更大的硬盘容量会使Access运行起来更快。

许多开发人员认为,Access是一个快速的应用程序开发环境,因此在创建应用程序时,没有必要进行系统分析和系统设计。对于这一点,笔者并不赞同。如本章前面所述,Access应用程序看起来比较容易创建,但如果规划不当,也会带来灾难。

Access应用程序开发过程的第一步就是进行任务分析,也就是考虑在用户工作的时候会发生的每一个过程,这是一件麻烦而必要的工作。当笔者第一次受聘于一家大型公司在大型机上作编程工作的时候,他们就要求对任务列表进行仔细的任务分析。那时,必须找出系统中的各个用户为了完成日常工作要做些什么,还要描述各个过程,并决定一个任务到另一个任务之间的流向,同时又要将各个用户的各个任务与其他任务,以及系统内其他用户的每一个任务联系起来,并且要将任务与对象挂钩。虽然如今快速的应用程序开发环境和创建技术日益流行,而且在开发过程中这个步骤好像有点过时了,但是,要是这一步完成得不好,或者从某种意义上说根本就没有做,那么将有可能对应用程序进行大规模地返工。

在分析和描述了系统中的所有任务之后,就进入了应用程序的数据分析和设计阶段。在这个阶段,用户必须找出要完成各个任务需要的相应信息。这些数据元素必须指定给各个对象,每个对象在数据库中将成为一个唯一的表。例如,一个对象可以就是一个客户。这样,与客户相关联的各个数据元素(名称、地址、信用限额及其他有关系的信息)将成为客户表中的各个字段。

用户应该为每个数据元素指定以下内容:

合适的数据类型;

所要求的大小;

有效性规则。

还要决定各个数据元素是否可以更新,以及它们是通过输入得来还是通过计算得来。然后要确定自己表的结构是否规范化。

规范化的应用

按照一系列规则对表的设计进行测试的过程就叫做规范化,这一系列规则用于确保应用程序进行尽可能有效的操作。这些规则是基于集合理论的,它们最先由 Dr.E.F.Codd 提出。虽然学习规范化也许要花上几年的时间,但是它的基本思想是一目了然的,那就是以尽可能少的数据操作和编码来实现应用程序的有效运行。第3章会详细介绍规范化和数据库设计。本章只介绍其中的6条基本规范化规则。

(1)字段原子化。也就是数据的各个部分应该尽量分开。比如,不应该泛泛地创建一个叫做“名字”的字段,而应该为其创建两个字段,即一个“名”和一个“姓”。这样处理使得数据的操作变得非常简单。例如,要是想只以名(而不管姓是什么)来排序或搜索,那么做了以上处理之后,就可以节省很多开销。

(2)每个记录应该有一个唯一的标识符,以便能够安全地识别各条记录。例如,如果要改变客户信息,就必须确保所改变的信息与适当的客户发生了正确的联系。这个唯一的标识符叫做主键。

(3)主键是一个字段或几个字段,它用于唯一地标识相应的记录。有时候需要指定原有的字段作为主键。例如,在员工表中,社会保险号码应该用来为系统标识员工。但是在有些时候,又需要创建一个主键。例如,要是两个员工具有相同的名字,那么员工名就不能为系统独立地标识员工。这时就有必要创建一个字段,使它成为员工的一个唯一标识符,比如说可以创建一个客户ID。

(4)主键应该比较短小、稳定而简单。短小是指它的尺寸应该比较小(不应该是50个字符这么大的字段)。长整型数据对于主键是极好的。稳定意味着主键的字段值应该很少变动或者说不变动。例如,客户ID较少改动,而一个公司的名字变化的概率则比较大。简单说就是要让用户容易操作。

(5)表中的每个字段应该提供主键所标识记录的其他信息。例如,客户表中的各个字段应该描述具有特定客户ID的客户。

(6)表中的信息不应该在多个位置出现。例如,一个特定客户的名字就不应该出现在多个记录之中。

例如,图1.15所给出的数据表是一个没有规范化的表的例子。请注意,CustInfo字段针对各个订单进行了重复,因此,如果客户地址发生了变化,指定给相应客户的每个订单其地址也会发生改变。换句话说, CustInfo字段没有实现原子化。如果用户想以城市名排序,则行不通,因为城市名处在CustInfo字段的中间。如果订货清单的项目名称发生了改变,则必须对有该订货清单项目的每条记录进行修改。在这个例子中,问题就出现在订购的项目上。在这个设计过程中,可能需要为每个客户订单项创建4个字段,即姓名、供应商、数量和价格。这样设计以后,要想为用户创建他们所需要的销售报表和其他报表是相当困难的。

图1.15 没有规范化的表

图1.16所示的是经过规范化的同样的数据。请注意,这时候它们分成了好几个不同的表,即tblCustomers、tblOrders、tblOrderDetails和tblSuppliers。tblCustomers表只包含与特定用户相对应的数据。

图1.16 数据规范化后进入了4个单独的表中

每条记录均由所设计的CustomerID字段单独标识,而这个字段又用于将表tblCustomers和表tblOrder联系起来。tblOrders表包含的信息只针对于整个订单,而不针对于客户订购的各个项目。这个表包含了那些具有订单和订单日期的客户的 CustomerID,而且它通过 OrderID 与表 tblOrderDetails 发生联系。tblOrderDetails表持有针对特定OrderID所订项目的信息。

在这里,可订购项目的数量没有限制。想订购多少项目,就可以订购多少项目,因为这时只须在tblOrderDetails表中多添加一些记录。最后,供应商信息也放在一个唯一的表(tblSuppliers)中,这样,供应商的信息发生改变时,只有一处会变动。

与以前使用大型机的时候相比较,虽然应用程序开发的任务分析阶段和数据分析阶段并没有多大改变,但是,原型开发阶段发生了很大的变化。在对大型机进行操作时,用的是基于 DOS 的语言,那时对各个屏幕和报表开发详细的规范是很重要的。这种情况下,稍作改动,比如说在屏幕上移动一个字段,则意味着一场大的改变,这时往往又得工作几个小时。在用户对屏幕和报表的规范发表看法后,开发人员又得花上几天时间埋头苦干,才能开发出屏幕和报表的规范。而且,当开发人员工作了几个月并把产品交给用户时,用户也许并不完全满意。而这往往意味着开发人员必须回到绘制板前,再花不少时间进行改动,以满足用户对应用程序的要求。

不过,现在这个过程完全不同了。一旦任务描述和数据分析完成之后,开发人员便可以实现对表的设计,并在它们之间建立关系。窗口和报表的原型开发过程便可以随即开始。这时,开发人员不必在与用户交流之前先躲起来开发几周甚至几个月,使用Access向导,只须花上几天时间,便可以快速地开发出窗体的原型。

在没有进行测试以前,用户还不能断定应用程序能做些什么。如果用户的应用程序要在Windows 2000、Windows 2003、Windows XP 和Windows Vista 的机器上运行,那么应该在所有这些环境下都进行一次测试。测试应用程序应该扩展到最低分辨率的显示器上,因为应用程序可能会在开发人员自己的机器上运行得很好,而在用户的低配置机器上会运行得很慢。

在测试时,既要对应用程序进行部分测试,又要进行集成测试。测试应用程序时,应尽量多组织一些人,并且要确保这些人中有计算机方面的行家,也有对计算机一窍不通的人。这些不同类型的用户可以发现完全不同的问题。千万不要自己独自一人进行测试,因为自己往往找不出自己所开发程序的错误。

到最后,应用程序便可以作为产品发行了,但是,应该先将应用程序发行给少量的用户,并让他们知道这是进行测试。要让他们意识到他们是系统的第一批用户,这自然是一件引以为荣的事,但也要告诉他们问题可能随时发生,而且他们也有责任将遇到的问题反馈回来。如果一开始就大范围地发行应用程序,而结果证明操作不正常,那么将完全失去用户对您的信任。这就是要慢慢发行应用程序的原因。

由于Access是一个快速的应用程序开发环境,因此,它所开发的应用程序要求维护的时间比基于DOS开发的应用程序要求维护的时间要长。用户的要求一般是很高的,开发人员的水平越高,他们的要求就越高。不过,对咨询人员来说,这倒是一件好事。当然,也应该具体情况具体分析,因为应用程序的作用范围在不断改变,不能将自己局限于一种情形,从而走入死胡同。

维护包括3种类型:错误修正、规范改动和问题解答。错误修正必须尽可能快地进行。规范改动的意义应该清楚地解释给用户,在进行所要求的改动时要涉及到时间和费用这两个方面。在对问题进行解答时,应该多召集一些用户,告诉他们如何优化窗体和报表,使他们能更灵活地使用应用程序并对它进行开发。当然,应用程序的最终目标就是给尽可能多的用户带来便利。

Access 2007添加了大量新功能,它们都值得一看。虽然Microsoft将许多这些功能定位于终端用户,但是在产品中还是有许多其他有用的改进。接下来的章节提供了这些新功能的概况。本书的适当章节还会详细介绍每个功能。

Access 2007 的用户界面是经过重新设计的。Microsoft 公司作出这样的改变,是为了帮助用户在需要某些命令的时候,方便地找到它们。以前许多功能深藏在Access菜单结构中,现在用户则可以轻松地找到它们。从启动Access 2007的时刻开始到退出该应用程序,用户的感觉将完全不同于使用Access 2003时的感觉,也不同于使用任何以前版本的Access的感觉。

当启动Access 2007 后,屏幕如图1.17 所示。此时,可以选择创建一个新的空数据库,打开最近使用过的某个数据库,打开其他现有的数据库,或是从模板创建一个新数据库。如果选择“空白数据库”, Access就会提示输入数据库的名称和位置,如图1.18所示。在单击“创建”按钮后,屏幕就会如图1.19所示。

注意,Access 2007 提供了一套选项卡式的界面,如图 1.19 所示。当创建一个新的空白数据库时, Access 2007会生成一个新数据表,这样用户就可以在数据库中创建第一个表了。可以使用这个技巧创建一张表,或者可以在“设计”视图中创建表。注意,选项卡下面的部分看上去就像工具栏一样。这个工具栏叫做“功能区(ribbon)”。1.9.2 节将会详细地介绍功能区。后续的各节将会介绍Access 2007 中使用的每个选项卡。

图1.17 Access 2007 的桌面和它之前的版本看上去风格不同

图1.18 必须给数据库选择一个名称和位置

图1.19 Access 2007 的新选项卡式界面

功能区是该程序顶部的区域,它代替了菜单和工具栏。使用功能区可以选择想要操作的命令的类别。功能区包含命令选项卡和上下文命令选项卡。下面小节将介绍这两种选项卡。

1.探索命令选项卡

当启动Access 2007 后,就会出现选项卡式的界面。这些选项卡包括“开始”、“创建”、“外部数据”、“数据库工具”和“数据表”。本节将探究每个选项卡的详细内容。

第1个选项卡就是“开始”选项卡(如图1.20所示)。利用它可以实现如下类型的功能:

在视图间切换(数据表和设计);

剪切、复制和粘贴;

格式化文本(添加粗体或下划线,改变字体等);

操作多格式文本(项目符号列表和编号列表);

操作记录(保存、合计及拼写检查等);

排序和筛选数据;

按照特定的条件查找数据。

图1.20 利用“开始”选项卡可以实现基本的格式化和面向记录的任务

第2个选项卡是“创建”选项卡(如图1.21所示)。利用它可以实现如下类型的功能:

创建表、表模板和SharePoint列表;

创建不同类型的窗体;

创建不同类型的报表;

创建查询和宏。

图1.21 利用“创建”选项卡可以创建数据库对象

第3个选项卡是“外部数据”选项卡(如图1.22所示)。利用这个选项卡可以实现如下类型的功能:

处理已保存的导入和导出;

连接到其他Access数据库、Excel数据表、SharePoint列表、文本文件、XML文件,以及其他诸如开放式数据库互接(Open Data Base Connectivity,ODBC)数据库;

创建和管理电子邮件。

图1.22 利用“外部数据”选项卡可以连接Access 2007 和其他应用程序,例如Excel和SharePoint

第4个选项卡是“数据库工具”选项卡(如图1.23所示)。利用它可以实现如下功能:

启动Visual Basic编辑器;

操作宏;

操作关系和对象相关性;

执行分析任务;

连接SQL Server;

操作链接表;

管理切换面板;

用密码加密数据库;

操作加载项;

编译数据库。

图1.23 利用“数据库工具”选项卡可以实现其他各种与数据库相关的任务

2.探索上下文命令选项卡

其他选项卡都是上下文命令选项卡,它们会依赖于用户的行为而改变。例如,当第1次创建新数据库时,Access会假定第1个任务就是创建一张新表。所以就会出现“数据表”视图,并且会显示“数据表”选项卡(如图 1.24 所示)。利用该选项卡可以实现与操作数据表相关的所有任务。这些任务包括操作字段和列,修改与列相关的数据类型和格式以及操作关系。本书将以这种简介的方式适当地介绍每个下文选项卡。

图1.24 “数据表”选项卡是上下文选项卡,它在“数据表”视图中工作时可用

3.利用库

库是一种可视化显示选择的控件,有了它用户就可以看见将要获得的结果。这样就可以浏览并查看 Access 2007 能做什么。图 1.25 提供了一个例子,如用户所见,当单击“网格线”按钮右边的箭头时,一个库就会出现,并展示每个会出现的结果。这个功能使用户可以方便地从提供的选项中作出自己的选择。

图1.25 库提供了选中选项的预览效果

4.操作快速访问工具栏

“快速访问”工具栏是一个标准工具栏,它出现在功能区的顶部,并能够通过单击就可以访问命令,例如“保存”和“撤消”。注意图 1.26 中的“保存”、“打印”和“撤消”按钮,这些按钮都在“快速访问”工具栏上,用户可以随时方便地访问它们。用户可以自定义“快速访问”工具栏,用以包括最常用的命令;还可以修改工具栏的位置和大小。如用户所见,小工具栏出现在命令选项卡上。要改变“快速访问”工具栏的位置,只须右键单击工具栏,然后在弹出的快捷菜单中选择“在功能区下方显示”命令即可。工具栏就会出现在功能区下面(如图1.27所示)。

图1.26 利用“快速访问”工具栏可以方便地访问常用命令

图1.27 可以将“快速访问”工具栏放置在功能区下面

5.使用“Microsoft Office Access”按钮

“Microsoft Office Access”按钮出现在应用程序窗口的左上角。当单击“Microsoft Office Access”按钮后,就会出现一个菜单(如图1.28所示)。使用该菜单,可以实现以下任务:

创建新数据库;

打开现有数据库;

保存改变到当前对象;

使用“另存为”菜单命令将文件保存为其他 Access 文件格式,或者保存到网页服务器、PDF及XPS文件中;

打印及打印预览;

通过压缩和修复数据库、备份数据库、操作数据库属性来管理数据库;

将数据库以电子邮件的形式发给其他人;

关闭当前数据库。

图1.28 “Microsoft Office Access”按钮提供了一个必要的菜单,用于实现常用的命令

6.功能区的提示和技巧

在Access 2007 中可以使用与Access以前版本中相同的键盘快捷键。这意味着可以使用用户已经非常熟悉的键盘快捷键实现许多常用的功能(例如“保存”)。当在功能区中将鼠标指针悬停在与键盘快捷键相联系的按钮之上时,作为“屏幕提示”的快捷键就会出现(如图1.29所示)。

图1.29 当将鼠标指针悬停在与键盘快捷键相联系的命令之上时,作为“屏幕提示”的快捷键就会出现

另外一个查看键盘快捷键的方法是,在特定的选项卡上按下 Alt 键。此时所有 Alt 快捷键会以小指示符的形式出现(如图1.30所示)。例如,当在“开始”选项激活时按下Alt键,就可看见“Alt+F”快捷键可以访问“Microsoft Office Access”按钮。

图1.30 如果按下键盘上的 Alt 键,那么 Alt快捷键会以小指示符的形式出现

有时,用户需要额外的屏幕控件,并希望压缩功能区,仅显示出激活的命令。Access 2007 可以很容易地实现该功能。要压缩功能区,只须双击激活的命令选项卡,应用程序窗口就会如图1.31所示。要再次打开它,只须单击想要激活的选项卡。

图1.31 通过双击可以压缩功能区

7.自定义快速访问工具栏

正如前面“操作快速访问工具栏”一小节所提及的,可以自定义“快速访问工具栏”。右键单击工具栏,将会弹出一个与上下文相关的快捷菜单(如图1.32所示)。

图1.32 右键单击“快速访问”工具栏,就会出现一个与上下文相关的菜单

选择“自定义快速访问工具栏”命令,带有“自定义”选择页面的“Access选项”对话框将会出现(如图1.33所示)。

图1.33 利用“Access选项”对话框的“自定义”页面可以自定义“快速访问”工具栏

下面是自定义“快速访问工具栏”的步骤。

使用“从下列位置选择命令”下拉列表,选择想要使用的命令类别。例如,在图1.34中,选中了“创建选项卡”命令。

图1.34 在单击了“添加”按钮之后,命令就会出现在对话框右边的列表框中

(1)使用“自定义快速访问工具栏”下拉列表,决定变化是用于使用文档,还是指定的正在操作的文档。

(2)从对话框左边的列表框中选择一个命令,单击“添加”按钮将它添加到对话框右边的列表框中。例如,在图1.34中,从“创建选项卡”下拉列表框中添加了“空白窗体”命令。

(3)使用对话框右边的上下箭头,可以在现有命令列表内将命令向上或向下移动。

(4)在添加了所有想要的命令后,单击“确定”按钮结束该过程。现在 “快速访问”工具栏会显示连接了命令的图标,这些命令是用户添加给工具栏的(如图1.35所示)。

图1.35 在给“快速访问”工具栏添加了 3个命令后,它们会出现在现有工具栏按钮的旁边

提示 如果想要将“快速访问”工具栏重设到默认值,可以单击“Access选项”对话框中“自定义”页面的“重设”按钮。

Microsoft公司使用“导航窗格”代替了数据库窗口。“导航窗格”包含数据库中所有对象的名称,有窗体、报表、页面、宏及组成数据库的模块。在图1.36中,可以看到“联系人”数据库由一个表、一个查询、两个窗体和两个报表构成。

图1.36 利用“导航窗格”可以选择和操作恰当的数据库对象

给数据库对象应用一个命令很容易。只须简单地用右键单击对象,就会弹出与上下文相关的快捷菜单。例如,利用与“联系人”表相关的上下文菜单可以打开、设计、导入、导出、删除以及在管理一个表时执行其他必要的重要功能(如图 1.37 所示)。另外一个例子是,当右键单击窗体时,弹出的与上下文相关的快捷菜单。在图1.38所示窗体的选项和表中的选项有很大的区别。它们包括在不同视图中操作窗体的能力,还可以导出、重命名和删除窗体以及查看视图属性。

图1.37 在右键单击表后,利用上下文相关的快捷菜单可以执行与表相关的功能

图1.38 右键单击窗体后,利用上下文相关的快捷菜单可以执行与窗体相关的功能

在 Access 2003 中,所有打开的文档(如窗体、报表等)会出现在任务栏中。现在,Mircosoft 使用选项卡式的文档代替了这种范式。当打开窗体、报表和其他对象后,它们会以选项卡的形式出现在功能区上(如图1.39所示)。只须通过单击每个选项卡,就可以轻松地在对象间切换。注意图1.39中,打开了3个对象:联系人列表、联系人扩展信息和联系人通讯簿。“联系人列表”窗体是当前激活的选项卡。

图1.39 每个打开的文档以选项卡的形式出现在功能区上

1.显示或隐藏文档选项卡

如果用户偏好使用较老的方式,一次只查看一个对象,或是在任务栏上显示重叠的窗口,那么可以通过使用“Access选项”改变Access的行为。按照下面的步骤可以做到一次仅查看一个对象:

(1)单击“Microsoft Office”按钮;

(2)单击“Access选项”按钮(如图1.40所示),就会出现“Access选项对话框”;

图1.40 利用“Access选项”可以修改Access的行为及指定数据库

(3)选择“当前数据库”,如图1.41所示;

图1.41 “当前数据库”选项能影响指定数据库的行为

(4)在“应用程序选项”窗口中,取消对“显示文档选项卡”复选框的勾选;

(5)单击“确定”按钮关闭该对话框,就会收到一条信息:“必须关闭并重新打开当前数据库,指定选项才能生效”;

(6)关闭并重新打开该数据库,就可以看见生效后的改变,此时,屏幕如图1.42所示,在功能区下方已经没有了选项卡。

图1.42 在关闭并重新打开数据库后,在功能区下方没有显示选项卡

2.显示重叠窗口

还有一个选项是显示重叠窗口。以下是涉及到的步骤:

(1)单击“Microsoft Office”按钮;

(2)单击“Access选项”按钮,打开“Access选项”对话框;

(3)选择“当前数据库”;

(4)选择“重叠窗口”单选按钮;

(5)单击“确定”按钮关闭该对话框;

(6)改变并重新打开该数据库可以查看到生效的结果,此时,屏幕应该如图1.43所示,注意,在功能区下方没有显示选项卡。

注意 “显示文档选项卡”设置是默认数据库设置。必须为每个数据库修改该设置。使用Access 2007创建的新数据库默认显示文档选项卡,而 Access以前版本创建的数据库默认使用重叠窗口。

图1.43 在改变并重新打开数据库后,就能以重叠的窗口查看每个对象

Access 2007中的状态栏和其以前版本中的状态栏十分相似,但是它也有一些新的功能。除了可以显示状态信息、属性提示、过程指示符以及其他与以前版本的Access相似的功能外,用户还可以利用新状态栏修改当前视图,例如缩放它们。它还提供了丰富的右键单击功能。

只须通过单击状态栏右下角的适当工具,就可以快速且方便地修改正在操作的视图(如图1.44所示)。例如,当打开一个窗体后,就可以在“窗体视图”、“数据表视图”、“布局视图”和“设计视图”之间切换。当打开一张表后,可以在“数据表视图”、“数据透视表视图”、“数据透视图视图”和“设计视图”之间切换。

图1.44 通过单击状态栏上适当的工具,可以修改正在操作的视图

新状态栏的另外一个功能是调整缩放的级别,即可以放大或缩小。

最后,在右键单击新状态栏后,会发现它提供了一系列可用的命令。如图1.45所示,可以执行诸如改变“大写”设置、“数字”设置及是否筛选数据的命令。要做到这些,只须选择或取消选择适当的设置。

图1.45 右键单击状态栏后,可以执行很多命令

显示或隐藏状态栏

Access 2007提供了显示或隐藏状态栏的选项。采取下面的步骤,可以改变状态栏的显示状况:

(1)单击“Microsoft Office”按钮;

(2)单击“Access选项”按钮,打开“Access选项”对话框;

(3)选择“当前数据库”;

(4)在“应用程序选项”窗口中取消对“显示状态栏”复选框的勾选;

(5)单击“确定”按钮关闭对话框;

(6)改变并重新打开数据库,状态栏就不会再出现(如图1.46所示)。

图1.46 在改变并重新打开数据库后,状态栏不再出现

Access 2007 提供了许多文本格式化功能。在以前的 Access 版本中,格式化文本需要使用菜单或显示格式化工具栏。利用浮动工具栏可以方便地访问格式化功能,而不需要使用菜单或显示工具栏。

具体操作步骤如下所示:

(1)选择要改变的文本(文本必须在使用了多文本功能的备注字段中),浮动工具栏将出现在选中的文本上方(如图1.47所示);

图1.47 在选择了文本之后,浮动工具栏出现在选中文本的上方

(2)选择适当的格式化选项(例如加粗);

(3)将鼠标指针从浮动工具栏上移开,浮动工具栏就会渐渐消失,而文本会以选中的格式出现(如图1.48所示)。

图1.48 注意“备注”字段中的文本是加粗且斜体的

注意 如果不想给选中的文本应用格式,只须将鼠标指针从工具栏上移开一点点,浮动工具栏就会消失。

只能在特定的情况中应用格式。例如在“备注”字段中,它的“文本格式”属性是被设置为“多文本”。

Access 2007中窗体可用的新功能的数量巨大,因此在这只会提供一个概况,在第5 章中将会详细地介绍。窗体的新功能如下所示:

使用“快速创建”创建窗体的能力;

名为“布局视图”的新视图;

操作“堆叠式”和“表格式”布局的能力;

分割窗体;

切换背景颜色;

给窗体数据的新的筛选功能。

报表也有大量的新功能,许多功能与以前用于报表的功能相似。它们包括以下内容:

使用“开始创建”创建报表的能力;

名为“布局视图”的新视图;

操作“堆叠式”和“表格式”布局的能力;

新的“分组”、“排序”和“汇总”功能。

Access 2002、2003 和2007 允许用户在“数据透视表”和“数据透视图”视图中查看任意表、查询或窗体。利用数据透视表和数据透视图可以方便地对相当复杂的数据进行分析。这意味着用户可以在Access中直接执行许多数据分析任务,而这之前必须在Excel中完成。数据透视表和数据透视图也能用于子窗体中,并且对于它们引起的事件,可以通过编程作出反应。

Access 2007极大地增强了导入和导出功能。例如,现在可以导出到PDF和XPS字段;也可以保存导入和导出的具体规范,这样用户以后就可以重复使用它。在第20章中将介绍这些功能。

Access 2007和Outlook 2007是紧密地结合在一起的。可以使用Outlook 2007收集和更新数据。当使用新的“数据收集”功能时,Access 2007 会自动创建一个Microsoft Office InfoPath 2007 或HTML窗体,然后它能够将该窗体嵌入到电子邮件信息中。这样就可以将邮件寄给选中的 Outlook 联系人,或者是存储在 Access 数据库中的联系人。当接受者填写了窗体并将它返回后,就可以无缝地将结果数据存储在Access 2007数据库中了。

另外,Access 2007中有关安全的功能已经完全修改了。“用户安全”模型在Access 2007 中被完全淘汰了,除非坚持给数据库使用旧的Access文件格式(.mdb或.mde),并且给该数据库应用了用户分级安全模型。换句话说,如果打开一个Access以前版本创建的数据库,而该数据库已经应用了安全级别,那么 Access 2007 将会支持该数据库的用户分级安全功能。如果将 Access 以前版本创建的数据库转换为Access 2007文件格式,Access 2007就会删除该数据库的所有用户分级安全设置,并会应用Access 2007安全功能。读者将在第31章中学习更多有关安全的知识。

Access 2007不支持复制功能,除非将数据库以旧的文件格式保存。如果打开了一个现有的复制功能已经生效的.mdb文件,那么Access 2007 会支持复制功能。也可以使用Access 2007 复制由Access以前版本创建的数据库,只要不将该数据库转换为新的文件格式。

不能将一个复制的数据库转换为Access 2007 的文件格式。然而,此处对于该问题有一个解决方法,它涉及手动地重新创建Access 2007 文件格式的数据库。只有在 Access 2007 文件格式所能带来的益处大于复制功能的益处时,才应该这么做。如果确实决定手动地重新创建数据库,就必须首先确保所有隐藏的及系统的对象是可见的。然后按照以下步骤操作:

(1)使用与创建副本数据库相同版本的Access打开用户想要转换的副本;

(2)选择“工具”>“选项”命令;

(3)选择“视图”选项卡,打开的“选项”对话框如图1.49所示;

图1.49 利用“选项”对话框可以查看隐藏的和系统的对象

(4)在“显示”选项区域中,选中“隐藏对象”和“系统对象”复选框;

(5)单击“确定”按钮应用这些设置,然后关闭“选项”对话框。

重新创建数据库

下一步,就必须手动地重新创建数据库了。按如下步骤操作。

(1)创建并打开一个空白的Access 2007 数据库。

(2)关闭名为“表1”的表,而不保存它。

(3)选择“外部数据”选项卡(如图1.50所示)。

图1.50 使用“外部数据”选项卡,可以导入和导出数据

(4)在“导入”组中选择“Access”,就会打开“获取外部数据-Access数据库”对话框(如图1.51所示)。

图1.51 “获取外部数据-Access 数据库”对话框提示指定要导入的数据库对象

(5)在该对话框中单击“浏览”按钮,找到副本的数据库,然后单击“打开”按钮。

(6)在“获取外部数据-Access 数据库”对话框中,选择“将表、查询、窗体、报表、宏和模块导入当前数据库”单选按钮,然后单击“确定”按钮,就会打开“导入对象”对话框(如图1.52所示)。

图1.52 “导入对象”对话框提示选择想要导入的对象

(7)选择想要导入新数据库的对象。如果想要导入所有对象,可以在每个选项卡上单击“全选”按钮。不要选择任何表,以后会分别处理它们。

(8)Access提示使用保存导入步骤。如果想要这么做,可以选择“保存导入步骤”复选框,输入所需的信息(如图1.53所示),然后单击“保存导入”按钮。

图1.53 如果计划以后会再次执行导入过程,就应该选择“保存导入”按钮

(9)在Access 2007 中打开副本数据库。

(10)确保s_GUID、s_Lineage和s_Generation字段是可见的。具体方法是右键单击“导航窗格”顶部,在弹出的快捷菜单中选择“导航选项”命令,这样就会打开“导航选项”对话框(如图1.54所示)。

图1.54 使用“导航选项”对话框表明想要显示系统对象

(11)在“显示选项”选项区域中,选择“显示系统对象”复选框,然后单击“确定”按钮关闭该对话框。

(12)给每个表都创建一个“生成表”查询。“生成表”查询会接受所有旧表中的数据,并且会使用同样的数据在新数据库中创建一个表。如果s_GUID是主键,并且是其他表的外部键,就必须在新表中包括s_GUID字段。此时没有必要将s_Lineage和s_Generation字段复制到新表中。

(13)运行“生成表”查询。这会在新数据库中创建多个表。新表不会继承任何字段属性,并且也不会从原表中继承主键设置(这些是很重要的)。

(14)在新的数据库中,创建与副本表中相同的索引及主键。

(15)在新数据库中给每个表创建必要的关系。

(16)保存新数据库。

Access 2007也不再支持Access数据对象(Access Data Project,ADP),同样,除非以旧版本的Access文件格式保存数据库。虽然支持旧版本的Access文件格式的,但是最好不要使用ADP文件作任何新的开发。如果用户现存的 ADP 文件可以满足当前的商业需要,那么用户此时就不需要重新编写它们。如果基于某些原因,用户决定对那些现有的应用程序作出重要改变,那么就应该考虑将它们转换为.accdb 或.accde 文件格式,并且查询编写它们的功能,这样才能充分利用Access 2007的新功能,并消除ADP文件的特有功能。

在操作 Access 2007 时,有一些额外的提示和技巧值得用户注意。例如高级“导航窗格”技巧和操作多值字段的过程。下面一小节将详细讨论这些话题。

Access 2007具备一些值得注意的极好的“导航窗格”技巧,包括创建自定义类别和组的能力,在类别中显示或隐藏组或对象,以及在自定义组中移除和保存对象。下面以创建自定义类别开始介绍,具体操作步骤如下所述:

(1)右键单击“导航窗格”顶部的菜单,将会弹出一个级联式菜单(如图1.55所示);

图1.55 利用级联式选项屏可以控制“导航窗格”的行为

(2)选择“导航选项”命令,打开“导航选项”对话框(如图1.56所示);

图1.56 利用“导航选项”对话框可以操作“导航窗格”重要的特征

(3)单击“添加项目”按钮添加一个类别,此时对话框如图1.57所示;

图1.57 可以方便地给“导航窗格”添加一个类别

(4)输入新类别的名称;

(5)使用上下箭头,可以在列表中向上或向下移动该类别;

(6)单击“确定”按钮关闭该对话框,如果左键单击“导航窗格”菜单,就会在列表中看见新添加的类别(如图1.58所示)。

图1.58 在创建了一个自定义类别之后,可以在可用类别列表中看见它

1.给类别添加自定义组

在有了自定义类别之后,就需要给它添加自定义组。以下是涉及到的步骤:

(1)右键单击“导航窗格”顶部的菜单,在弹出的级联式菜单中选择“导航选项”命令,打开“导航选项”对话框;

(2)选择想要添加组的类别,例如,在图1.59中,“罗斯文对象”选项被选中;

图1.59 选择想要添加组的类别

(3)单击“添加组”按钮,出现一个新的组;

(4)输入新组的名称;

(5)继续给该类别添加新的组,完成后,“导航选项”对话框如图1.60所示;

图1.60 在添加完组后,它们都会出现在对话框中

(6)单击“确定”按钮关闭该对话框,现在,这些组就会出现在该类别中(如图1.61所示)。

图1.61 在关闭该对话框后,新的组就会出现在该类别中

注意 创建自定义类别的最大数量是10个。当然,用户可以随时重命名或删除类别。

2.给自定义组添加对象

现在可以给自定义组添加对象了,可以按照以下步骤实现。

(1)选择想要添加新对象的类别。

(2)在“未分配的对象”组中,选择想要包括进自定义组中的对象,然后将它们移动到该组中。可以分别拖动这些项目;也可以按住Ctrl键,然后单击拖动多个项目;或者右键单击选中项目中的一个,移动鼠标到“添加到组”,然后单击自定义组的名称。不管使用哪种方法,Access 都可以将这些对象添加到指定的组中。

注意 当从“未分配的对象”组中将数据库对象添加到自定义组中时,只是创建了连接到该对象的快捷方式。如果从自定义组中移除了该对象,是不会删除该对象的。这样操作只是移除了包含在自定义组中的快捷方式。

3.隐藏未分配的对象组

将所有对象添加到自定义组后,可能想要隐藏“未分配的对象”组。这个过程非常简单,具体操作步骤如下所述:

(1)右键单击“导航窗格”顶部的菜单,在弹出的级联式菜单中选择“导航选项”命令,打开“导航选项”对话框;

(2)选择一个类别(例如“罗斯文对象”);

(3)在“罗斯文对象”组窗格中(如图1.62所示),取消对“未分配的对象”复选框的勾选;

图1.62 取消对“未分配的对象”复选框的勾选

(4)单击“确定”按钮关闭该对话框,“未分配的对象”组就不会再出现了(如图1.63所示)。

图1.63 “未分配的对象”组就不会再出现

4.创建一个新的自定义组,让它包含现有组中的对象

另外一个技巧是创建一个新的自定义组,让它包含现有组中的对象。要完成这个过程,必须有一个自定义类别和至少包含一个项目的组。以下是该过程的操作步骤:

(1)使用“导航窗格”查看想要放置到新组的对象;

(2)右键单击该对象,在弹出的快捷菜单中选择“添加到组”>“新建组”命令(如图1.64所示),一个新组就出现在“导航窗格”中(如图1.65所示);

图1.64 右键单击一个对象,可以马上将它添加到一个新组

图1.65 新组出现在“导航窗格”中

(3)给新建组输入名称;

(4)注意,选中的对象出现在新组中,用户可以将其他的快捷方式拖动到该组。

除了已经学习到的这些技巧外,还可以显示或隐藏某个类别中的组和对象。实际上,可以在类别中显示或隐藏部分或所有组,以及组中的一些或所有对象。这里有一些重要的内容需要读者记住:

可以通过“导航窗格”或是通过对象本身的属性隐藏对象;

可以完全隐藏对象或组或者禁用它们。

5.完成该过程

现在,已经知道了显示或隐藏类别中组和对象的细节,本节讲述如何完成该过程。要隐藏类别中的组,只须右键单击想要隐藏的组的标题栏,然后从上下文相关的菜单中选择“隐藏”命令。要将隐藏的组恢复到类别中,就必须按照以下步骤操作:

(1)右键单击“导航窗格”顶部菜单栏,在弹出的级联式菜单中选择“导航选项”命令;

(2)选择包含隐藏对象的类别;

(3)在“<类别>组”列表中,选中隐藏组旁边的复选框;

(4)单击“确定”按钮,该组就会出现在“导航窗格”中。

6.在父本组中隐藏一个对象

有时想要在父本组中隐藏某个对象。要做的是,右键单击想要隐藏的指定对象,然后在弹出的快捷菜单中选择“隐藏”命令。如果想要从所有类别和组中隐藏某个对象,可以按照以下步骤操作:

(1)右键单击想要隐藏的对象,在弹出的快捷菜单中选择“视图属性”命令,将打开该“属性”对话框(如图1.66所示);

图1.66 使用“属性”对话框隐藏某个对象

(2)选择“隐藏”复选框;

(3)单击“确定”按钮,“导航窗格”中就不会再出现该对象了。

7.恢复隐藏的对象

在隐藏某个对象之后,用户可能想要知道如何恢复它。下面介绍该过程的操作步骤:

(1)右键单击“导航窗格”顶部的菜单,在弹出的级联式菜单中选择“导航选项”命令;

(2)在“显示选项”选项区域中,选择“显示隐藏对象”复选框;

(3)单击“确定”按钮关闭该对话框返回“导航窗格”,“导航窗格”将会以浅颜色显示所有的隐藏对象(如图1.67所示);

图1.67 “导航窗格”将会以浅颜色显示所有的隐藏对象

(4)如果从对象的父本组和类别中隐藏了该对象,那么可以右键单击该对象,在弹出的快捷菜单中选择“取消隐藏”命令;如果使用了“隐藏”属性从所有类别和组中隐藏该对象,那么可以右键单击该对象,在弹出的快捷菜单中选择“视图属性”命令,然后取消对“隐藏”复选框的勾选。

用户可以方便地在自定义组中添加、删除或重命名一个对象。如果想要从自定义组中删除一个项目,那么只须右键单击该对象,在弹出的快捷菜单中选择“删除”命令。这个操作不会从数据库中删除对象,它只是从自定义组中移除了快捷方式。该对象会出现在“未分配的对象”列表中。然后可以将该对象添加给其他组。首先必须显示“未分配的对象”组。然后将该对象拖动到适当的组中。最后,如果想要重命名该对象,那么只须右键单击它,在弹出的快捷菜单中选择“重命名快捷方式”命令即可。给该快捷方式输入新的名称,然后按Enter键。

Access 2007的另外一个新功能就是多值字段。正如它的名称所示,多值字段指的是包含了多个值的字段。它可以表示两个表之间的关系。例如,一个订单表可以给与之相连的员工使用多值字段,这样该订单就可以与多个员工相连。在订单中使用下拉列表选择某个员工时,就会出现带有复选框的列表。可以在该列表中选中多个项目,然后单击“确定”按钮关闭该列表(如图1.68所示)。

图1.68 可以方便地在多值字段中选择多个项目

多值字段对于某些特殊情况特别适用。其中一种情形是使用Access 2007与存储在Microsoft Windows SharePoint 2007中的数据相连,并且该列表包含使用了Windows SharePoint Services中提供的某个多值字段类型的字段。另外一种情形是,希望简化数据库的设计。虽然这好像违反了基本的数据库设计原则,但是它恰好能帮助理解 Microsoft Office 2007 数据库引擎实际上并没有在单个字段中存储多个值。它使用系统表建立关系,然后可视化地将数据一起返回给用户。如果仔细思考这个问题,就会意识到这些表之间是多对多的关系。在这个例子中,一个订单表与多个员工表相连,并且每个员工又可以连接到多个订单。

由于Access中使用的多值字段支持SharePoint Services中相同的字段类型,所以利用多值字段可以将Access 2007 和SharePoint 2007紧密地结合在一起。这意味着在链接到包含多值数据类型的SharePoint列表时,Access会在本地创建多值数据类型。当将一个Access表导出到SharePoint中时,多值字段同样会被无缝地输出到SharePoint中。实际上,如果将整个Access数据库移动到SharePoint,那么所有包含多值字段的表都会变成Windows SharePoint Services中可用的字段类型。

用户可能仍然想知道什么时候适合使用多值字段。下面就给出一些指导意见:

当想要链接SharePoint列表时;

当计划将Access表导出到SharePoint时;

当计划将Access数据库移动到SharePoint时;

当希望从一个短选择表中存储多值字段时。

警告 如果计划将数据向上适化(upsize)到Microsoft SQL Server,那么就不应该使用多值字段,因为SQL Server不支持多值字段。因此,当将Access数据库向上适化到SQL Server时,向上适化的过程会将多值字段转换为包含有限列表值的ntext(备注)字段。

现在知道什么时候该创建多值字段了,用户可以试着创建一个。具体操作步骤如下所述。

(1)在“数据表”视图中打开将会包含多值字段的表。

(2)选择“数据表”选项卡。

(3)从“字段和列”组中选择“查阅列”,将打开“查阅向导”对话框(如图1.69所示)。

图1.69 “查阅向导”对话框帮助创建多值字段

(4)选择指定是希望使用查阅列查阅表或查询中的值,还是自行键入所需值。对于这个例子,选择“使用查阅列查阅表或查询中的值”按钮,然后单击“下一步”按钮。

(5)选择要用于列表之中的表(如图1.70所示),然后单击“下一步”按钮。

图1.70 选择想要包含在列表之中的表

(6)选择想要包含到查阅中的字段(如图1.71所示)。要选择每个字段,必须单击它,然后单击“>”按钮命令,再单击“下一步”按钮。

图1.71 选择想要包括在查阅之中的字段

(7)指定列表中项目的排序次序(如图1.72所示),然后单击“下一步”按钮。

图1.72 指定列表中项目的排序次序

(8)指定每个列的宽度(如图1.73所示),然后单击“下一步”按钮。

图1.73 指定每个列的宽度

(9)在向导的最后一步,Access提示用户是否希望在查阅中允许使用多值字段(如图1.74所示)。选择“允许多值”复选框,单击“完成”按钮。下拉列表的结果如图1.75所示。

图1.74 单击选择“允许多值”复选框

图1.75 利用完成的多值字段可以从列表中选择多个项目

探索多值字段在查询中的影响

当操作查询时,用户需要知道一些关于多值字段的问题。要说明这些项目,需要按照以下步骤进行操作。

(1)打开数据库,选择“创建”选项卡。

(2)从“其他”组中选择“查询设计”,将出现“显示表”对话框。

(3)选择包含多值字段的表,然后单击“添加”按钮。

(4)单击“关闭”按钮关闭“显示表”对话框,此时屏幕如图1.76所示。

图1.76 在改变“显示表”对话框后,Access会显示查询的“设计视图”

(5)单击拖动想用的字段到查询网格中,确定选择了多值字段。

(6)在“结果”组中单击“运行”按钮,结果如图1.77所示。注意,多值字段和所有选中的项目出现在一列中,它们由逗号隔开。

作为一个选择方式,可以看见“员工 1”字段能够展开,这样每个员工值都在单独的行上出现。要这么做,只须改变字段行为读取“员工1.Value”(如图1.78所示)。“值”属性可以使Access在展开的窗体中显示多值字段,这样每个值就会出现在单独的行中(如图 1.79 所示)。注意,对于每个订单,与该订单相连的“员工ID”会在查询结果中出现在不同的行中。

图1.77 带有所有选中项目的结果出现在一列中

图1.78 将字段行改为读取“员工1.Value”

图1.79 每个员工由于不同的订单出现在不同的行

本书的实例就是为了创建这么一个应用程序,它能够用来充当计算机咨询公司的时间和费用计算系统。首先,我们从设计的角度来看看这个应用程序。

这个系统要跟踪客户联系人及与这些客户相关联的工程。它允许用户记录与各个客户和工程相关联的付账时间和费用。它还允许用户记录与各个员工或分包者相关的信息。系统中的表是以“数据库向导”中的表为基础的。它们被稍作修改,它们的名字也被做了修改,这是为了遵循Reddick命名规则。在这个系统中包含21个表,其中的一些表将在第2章创建,读者在下载到的代码示例的应用程序数据库内,可以找到它们。

tblClients:这个表包含了所有与各个客户有关的信息。它与表tblProjects相关联,表tblProjects记录了与客户相关的各工程的信息。

tblClientAddresses:这个表包含了所有客户的地址。它与表tblClients和tblAddressTypes相关联。

tblAddressTypes:这个表是一个查阅表。它包含了所有正确的客户地址类型,它与 tblClientAddresses相关联。

tblClientPhones:这个表包含了所有客户的电话号码。它与表tblClients和tblPhoneTypes相关联。

tblPhoneTypes:这是一张查阅表。它包含了所有正确的客户电话类型,它与表 tblClientPhones相关联。

tblTerms:这是一个查阅表。它包含了所有正确的客户付款方式,它与表tblClients相关联。

tblContactType:这是一个查阅表。它包含了所有正确的客户联系类型,它与表 tblClients 相关联。

tblProjects:这个表包含了所有与各个工程项有关的信息。它与表 tblClients、tblPayments、tblEmployees、tblTimeCardHours和tblTimeCardExpenses相关联。

tblTimeCardHours:这个表记录了与各个工程项和员工相关联的时间。它与表 tblProjects、tblTimeCards和tblWorkCodes相关联。

tblPayments:这个表记录了与各个工程项相关联的费用。它与表tblProjects和tblPaymentMethods相关联。

tblTimeCardExpenses:这个表用于记录与各个工程项和员工相关联的费用。它与表tblProjects、tblTimeCards和tblExpenseCodes相关联。

tblEmployees:这个表用于记录员工的信息。它与表tblProjects和tblTimeCards相关联。

tblTimeCards:这个表用于记录各个员工的时间。它实际上是员工与时间信用卡费用,以及员工与时间信用卡小时数之间多对多关系的桥梁。它与表 tblEmployees、tblTimeCardHours 和tblTimeCardExpenses相关联。

tblExpenseCodes:它是有效费用代码的查阅表。它与表tblTimeCardExpenses相关联。

tblWorkCodes:它是有效工作代码的查阅表。它与表tblTimeCardHours相关联。

tblPaymentMethods:它是有效付款方式的查阅表。它与表tblPayments相关联。

tblCorrespondence:这个表用于记录与工程相关的一致性。它与表tblProjects和tblCorrespondenceTypes相关联。

tblCorrespondenceTypes:这是有效一致性类型的查阅表。它与表tblCorrespondence相关联。

tblCompanyInfo:这是一张系统表。它用于存储有关公司的信息,可以在系统中找到有关窗体和报表的这个信息。

tblErrorLog:这是一张系统表。使用它可以存储运行期间发生的错误。

tblErrors:这是一张系统表。使用它可以存储有效错误代码和说明。

表与表之间的关系将在第3章中详细讲述,不过,在图1.80中会先给出概况。

图1.80 在时间与记帐系统中表与表之间的关系

在学习Access开发的实际内容之前,必须先理解什么是Access,以及它是如何适应应用程序开发世界的。Access是一个功能强大的产品,它的应用比较广泛,从家庭用的计算机,到使用企业级客户/服务器数据库的公司用的计算机,均可以找到Access的应用程序。

在理解了什么是Access及它的用途之后,才可以学习它众多的对象。Access的应用程序由表、查询、窗体、报表、宏、模块、功能区、关系及其他对象组成。只要对象进行了良好的设计,那么Access应用程序就会有效地组合这些对象,用户就能获得一个功能强大的、稳定的且实用的应用程序。

本章主要内容

2.1 本章的重要性

2.2 创建新数据库

2.3 创建新表

2.4 为数据选择适当的字段类型

2.5 字段属性操作

2.6 至关重要的主键

2.7 操作查阅特征

2.8 表的属性操作

2.9 使用索引提高性能

2.10 使用Access表和Internet

2.11 查看对象相关性

2.12 检查数据库规格和限度

2.13 检查表特殊性和局限性

2.14 实例:设计计算机咨询公司的 Time and Billing应用程序所要求的表

2.15 小结

将表的设计比作给房子打地基,可以帮助用户对它的理解。正如房子如果建在有毛病的地基上就会垮掉一样,应用程序如果使用了槽糕的表设计的话,就会很难建立、维护及使用。本章涵盖了Access 2007的所有表设计内容。在阅读完本章之后,用户就可以准备建立应用程序的其他部分了,并且能够意识到,自己设计的表能够给应用程序提供坚实的基础。

在通常的术语中,数据库是存储信息的集合。Access数据库由表、查询、窗体、报表、数据访问页面、宏和模块构成。数据库中的每个表都应该包含有关某个特殊主题的信息。使用查询可以从一个或更多表中抽取指定的信息。窗体和报表提供了显示数据的方式。最后,利用宏和模块可以生成一个内置的应用程序。

当创建Access应用程序时,必须采取的第1步是执行必要的分析和设计步骤。1.8节介绍了这些初始的步骤。在有了设计文档之后,就可以准备建立数据库了。用户可以通过创建基于模板的数据库或者通过从头创建一个自己的数据库来完成这个过程。下面的章节将会介绍这两种方法。

使用新的数据库模板作为起点是非常容易的。每个模板都是一个不同类型的应用程序,它们包含必要的表、关系、查询、窗体、报表和宏。除了和Access 2007 安装在一起的预定模板外,还提供了Microsoft Office Online上的模板。在网上,可以下载现有模板的最新版本,以及Microsoft公司发布的最新模板。以下就是可用的模板类别(如图2.1所示):

商务;

教育;

个人;

示例。

图2.1 选择适当的模板类别

建立基于模板的数据库

以下是建立基于模板的新数据库的步骤。

(1)单击“Microsoft Office”按钮,选择“新建”,此时屏幕应该如图2.1所示。

(2)选择想要创建的模板类别,如图2.2所示,选择“商务”。所有合适的模板将出现。

图2.2 当选择了模板类别后,合适的模板就会出现

(3)选择想要使用的模板。图2.3所示的画面选择了“销售渠道”。

图2.3 在“商务”模板中,“销售渠道”模板可用

(4)给新数据库选择名称和位置。注意,数据库具有了新的文件格式(.accdb)。

(5)如果数据库是 Internet 上提供的,就单击“下载”按钮;如果模板是本地提供的,就单击“创建”按钮。

(6)如果是单击“下载”按钮,Access就会下载模板。

(7)新数据库出现,如图2.4所示。

图2.4 新数据库中出现打开的“有效机会列表”

(8)现在就可以操作数据库了,这和以前使用数据库的方式没有什么区别。

当模板提供的数据库都不能满足用户的需要时,用户就必须创建自己的数据库了。要从头创建一个新数据库,可以按照以下步骤进行操作:

(1)单击“Microsoft Office”按钮,选择“新建”命令;

(2)在屏幕右边的“文件名”文本框内,输入新数据库的名称;

(3)单击“浏览”图标,选择放置数据库的驱动盘或文件夹;

(4)单击“确定”按钮关闭浏览窗口;

(5)单击“创建”按钮。

Access就会创建一个新的空白数据库。

数据库的名称需要遵循以下规则:

数据库名称包含最多255个字符;

数据库名称可以包含空格,但是应该避免特殊的符号,例如星号、分号和逗号等;

Access会给创建的数据库指定扩展名为“.accdb”。

为 Access 2007 数据库添加一个新表有好几种方法:可以按电子数据表一样的格式创建表;可以从头开始设计表;可以使用表模板;可以从其他来源导入表;也可以与外部表实现链接。这一章将讨论按电子数据表一样的格式创建表,从头开始设计表的过程,以及使用表模板。而表导入和链接的讨论则会遍布全书。

注意 Access 2007支持Access 2000、Access 2002和Access 2003的文件格式,这样用户无须转换文件格式就可以读取Access 2000、Access 2002和Access 2003数据库。如果选择了其中一个早期的文件格式,那么在 Access 2007 中就不是所有功能都可以使用了,这一点是值得注意的。

从头设计一张表

从头开始设计表具有很大的灵活性,而且可以进行良好的设计,创建出风格不同的表。在创建一个自定义的商务解决方案时,最好用这种方法来设计表。为了从头开始设计表,应该选择“创建”选项卡,然后选择“表设计”。这样,“表设计”视图窗口就会出现,如图2.5所示。接着,应该按以下步骤进行操作。

图2.5 利用“表的设计”视图窗口可以从头创建一张表

(1)通过在“字段名称”一列输入名字来定义表中的各个字段。

(2)将光标移到“数据类型”一列。选择默认的字段类型,即“文本”类型,也可以使用下拉组合框选择其他字段类型。在2.4节中,对如何为数据选择字段类型作了详细的论述。请注意,“字段生成器”所设定的字段类型值是可以修改的。

(3)光标移到“说明”一列。当用户为字段输入数据时,在这一列中所输入的文字将在状态栏出现。这一列最好是关于字段中存储的是何种数据的描述。

(4)继续输入字段。如果要在两个现有的字段之间插入一个字段,应该单击功能区上的“插入行”按钮。Access会将新的字段插在当前字段的前面。要想删除一个字段,应该选中它并单击“删除行”按钮。

(5)为保存所做的工作,应该单击“快速访问”工具栏上的“保存”工具。图 2.6 所示的是“另存为”对话框。在这里应输入一个表名称,然后单击“确定”按钮。这时候将出现一个对话框,提示创建一个主键。每一个表都应该有一个主键。在这一章后面的2.6节中,将专门讨论主键。

图2.6 使用“另存为”对话框为表命名

表名称的命名约定与字段的命名约定是相似的,只不过标准的表名称是以标记 tbl 做开头。第1 章及附录A(可以在www.samspublishing.com网站上下载)对命名约定作了详细的讨论。

字段名的长度可达64个字符。但是,出于实际应用方面的原因,应该尽量将其限制在10~15个字符内,这足以描述一个字段而且比较容易输入。

字段名可以是字母、数字、空格,以及除日期、感叹号、点号和中括号之外的其他字符的任意组合。笔者认为还是用字母比较好,因为如果字段名中有空格,那么在创建查询、模块,以及数据库的其他对象时,就会带来不便。当然,也不要担心用户在接触到字段名时看不到空格。这一章的后面将讨论字段的标题属性,利用它可以设定Access显示给用户的文本。

字段名不能以空格起始。不过,上面已经说了字段名最好不要包含空格,因此这个问题也就不存在了。字段名称还不能包含ASCII控制符(0~31之间的ASCII值)。

在为字段命名时,尽量不要重复使用属性名、关键字、函数名和其他Access对象名。虽然在某些情况下这种代码也可以运行,但是,在另外一些情况下,会得到一些不可预料的结果。

为了便于将应用程序移植到客户/服务器环境,应该注意,每个后端数据库并不能支持所有的字段类型。而且,大多数后端数据库与Access不同,它们对字段名中有效的字符及其长度有较为严格的限制。在将表迁移到后端数据库服务器时会碰到这些问题,为了减少这些问题,在为Access中表的字段命名时,应该考虑到这一点。

给表、查询、窗体、报表、宏及模块对象添加说明,会有利于使自己的应用程序具有说明特点。这些信息可以帮助想要修改应用程序的用户或者其他人,对应用程序的对象进行任何需要的维护。第29章将详细地讨论怎样说明应用程序。

提示 所选的字段名称是如何影响将表升迁到客户/服务器数据库的潜在性,这一点是值得注意的。关于字段的名称,数据库服务器有比Access更多严格的规则。例如,大多数后端在字段名称中不允许有空格。并且,大多数后端会限制对象名称的长度为30个字符或更少。如果创建了不能被升迁的 Access 字段名称,并且以后需要将数据移动到后端数据库服务器上,那么在升迁的过程中就会增加所涉及到的工作量。这是因为在将表移动到一个后端数据库服务器时,用户必须参照新的字段名称,修改所有使用了无效字段名称的查询、窗体、报表、宏和模块。

为各个字段选择的数据类型对应用程序的性能及其功能有很大影响。以下几个因素会影响到对表中各个字段数据类型的选择:

字段中所存储的数据类型;

字段的内容是否需要包含在算式中;

是否需要按字段的数据进行排序;

按字段的数据进行排序的方式;

存储空间对用户来说是否特别重要。

需要在字段中存储的数据类型对数据类型的选择影响最大。例如,如果要存储以0起始的数字,那么就不应该选择“数字”字段,因为输入到“数字”字段中的起始0会被忽略。这样的数据例子包括邮政编码(有些是以0起始的)和部门代号。

注意 如果存储在字段中的起始0不是很重要,也就是说,只须让其显示在窗体和报表之中,那么可以使用字段的“格式”属性。2.5节将对“格式”属性进行详细的讨论。

如果字段的内容需要包含在算式中,则必须选择“数字”或“货币”数据类型。由其他数据类型定义的字段内容不能用到算式中。这个规则唯一的例外就是“日期”字段,它可以包含在日期/时间算式中。

用户还必须考虑是否要对字段中的数据进行排序及是否对其进行索引。OLE字段、附件字段和超链接字段不能用于排序,因此,对于那些字段中的数据要用于排序或索引的字段,就不应该选择这样的字段类型。而且,还要考虑到数据排序的方式。例如,在一个文本字段中,数字集合是按其所出现的次序排序的(也就是说以1,10,100,2,20,200这样的次序排序),这是因为“文本”字段中的数据按标准的ACSII顺序。然而,在“数字”字段和“货币”字段当中,数字的排序是按照数值的升序(即按1, 2,10,20,100,200排序)。用户也许会认为自己根本没有必要按标准的ACSII顺序,但是,在对部门代号这样的信息进行排序时,应该使用这种排序方式。利用 Access 2007 可以排序或分组“备注”字段的内容,但是它实现这种排序或分组的功能只能基于前255个字符。最后应该考虑磁盘空间对自己来说是否特别重要。由于不同类型的字段在硬盘上所占用的存储空间不同,因此在选择字段的数据类型时,也应该考虑到这一点。

Access 可以使用多种字段类型,即文本、备注、数字、日期/时间、货币,自动编号、是/否、OLE对象、附件和超链接。表2.1给出了各个字段类型的使用情形及其所占用的存储空间。

表2.1 Access各个字段类型的使用情形及其所占用的存储空间

续表

注意 超链接字段类型包含一个超链接对象。超链接对象包含3个部分。第1部分叫做显示文本,这是指显示在字段或控件上的文本;第2部分是用于引用字段的实际文件路径(UNC)或网页(URL);第3部分是子地址,它表示文件和网页中的位置。

选择字段类型的难点在于确定在给定情况下使用何种类型才是最佳的。下面给出各个字段类型的详细描述及其使用情形。

大多数字段都是文本字段。许多开发人员并没有意识到这一点,对于那些不用于算式中的数字最好使用文本字段。这样的例子有电话号码、部门代号和邮政编码等。虽然说文本字段的默认大小是50个字符,但是文本字段可以存储多达255个字符。由于Access是动态分配磁盘空间的,因此大尺寸字段并不使用硬盘空间,当然,尽可能地申请小的字段可以提高运行性能。文本字段所允许的最大字符数目由“字段大小”属性进行控制。

备注字段可以存储最多 65 536 字节的文本,它可以使每个记录容纳多达 16 页的文本。备注字段对以表数据存储的各种备注类型来说是较好的选择。请记住,在 Access 2007 中备注字段可以用于排序。

数字字段用于存储必须要包含到算式中的数据。如果货币数目要包含到算式当中,或者算式要求较高的精度,那么应该选择货币字段,而不应该选择数字字段。数字字段实际上是好几种字段类型的组合,因为Access 2007 提供了7种大小的数字字段。“字节”可以存储的整数为0~255,“整型”可以存储的数字大小为?32 768~32 767,“长整型”可以存储的数字大小为?20 亿~20 亿。虽然说这三种大小类型具有较好的性能,但是,可以明显地看出它们所要求的存储空间逐渐增大。另外两种数字字段类型是“单精度型”和“双精度型”,它们能提供十进制浮点数,因此运行起来相对较慢。“单精度型”可包含7位小数,而“双精度型”可包含 14 位小数。“小数”是 Access 2002 中引入的数字数据类型。小数数据类型允许存储较大的数字,并且提供最高28位数字的精度。最后一种类型是“同步复制ID”,它用于提供数据同步过程所要求的唯一的标识符(应用于.MDB文件格式中)。

日期/时间字段用于存储有效的日期和时间。日期/时间字段可以执行日期运算,它能保证日期和时间的排序准确无误。实际上,Access在内部是以8字节的浮点数存储日期和时间。时间是表示一天的一部分。

注意 在Windows控制面板中的日期和时间设置会反映到数据当中。例如,如果在控制面板当中修改“区域设置”中的“短日期格式”,那么这种修改将迅速地反映到窗体、报表和数据表当中。

货币字段类型是一种特殊的数字字段,当用户要将货币值存储到表中的时候,就会使用到它。货币字段能防止数据运算的截尾运算。它用15位数来存储“元”,同时又能保证“分”计算的准确性。虽然说这种类型的字段运算准确,但是它的处理速度较慢。

注意 在Windows控制面板中的货币格式修改会反映到数据当中。当然,Access并不能自动执行货币数目的实际转换。同日期一样,如果在控制面板当中修改“区域设置”中的货币格式,那么,这种修改将迅速反映到窗体、报表和数据表当中。

当添加一个记录之后,Access会自动生成自动编号字段。在Access以前的版本中,计数器的值必须是有序的。在 Access 2007 中,自动编号字段类型既可以是有序的,也可以是随机的。当多个用户在脱机情况下同时添加数据时,随机分配非常有用,因为Access不可能为两个记录指定同一个随机值。同步复制ID是自动编号字段的一个特殊类型。这个随机产生的唯一数字在复制过程(应用于.MDB文件格式中)中能生成唯一的标识符,它用于保证数据库的复制同步。

对于有序的自动编号字段,需要注意以下几点。如果用户从一个表中删除了一条记录,那么其唯一的编号将永远流失。同理,如果用户在一个表中添加了一条记录然后又取消了,那么与这条记录相对应的唯一的计数器值也将永远流失。如果不能接受这种结果,那么就应该生成自己的计数器值。

提示 对于字段名称,如果想要将 Access 数据库升迁到客户/服务器数据库,那么就必须知道所选的字段类型。例如,Access 输出“自动编号”字段为“长整型”。由于一些非 Microsoft的数据库服务器不支持自动编号,所以用户必须在服务器上创建一个插入开关,用来提供下一个键值。还可以通过使用窗体级事件完成自动编号,但是这么做不可取,因为如果其他应用程序在访问该数据,那么数据库引擎不能强迫编号。如果是升迁到 Microsoft SQL Server,那么Access 2007的“升迁向导”就会将所有“自动编号”字段转化为“标识”字段(SQL服务器上等价于自动编号)。

可以用是/否字段来存储一个逻辑是或逻辑否。实际上,“是”在字段中是以“?1”存储的,而“否”在字段中是以0存储的。此外,Null表示没有选择。字段的显示格式决定了用户所能看到的选项(一般有是/否、对/错和开/关,如果将其三态属性设为“真”的话,则还有第3种选项“空”)。是/否字段特别适合于那些只有“是”和“否“两个逻辑值的数据。它不仅能够限制用户的无效选择,而且能够节约存储空间。

OLE对象字段是用来存储在Windows中注册的OLE服务器应用程序的数据,包括电子表格、字处理文档、声音和视频。OLE对象字段的应用非常广泛,应用的例子包括用来存储履历、对雇员的评语、预算或视频。但是,在大多数情况下,不要将文档本身存储在OLE对象字段当中,还是使用超链接存储文档的链接更为方便。

使用附件字段类型,可以在单个字段中存储多个附件。这些附件甚至可以是不同类型的。例如,可以在一个字段中使用Excel数据表和Word文档。“附件”字段可以用来代替它的前任—— OLE对象字段。使用OLE对象字段,Access可以在Access数据库中存储对象的位图,这会使数据库膨胀。而Access在“附件”字段中存储数据,这样会更有效。

“附件”字段还有额外的优点。例如,Access 会着色图像文件,并且显示与其他文件类型相关的程序图标。如果字段包含照片、数据表和Word文档,那么Access就会显示该图像,并会给其他对象展示该应用程序图标。Access在存储对象时会压缩它们,除非这些文件已经被压缩了。最后,用户可以通过编程来操作附件。

有关“附件”字段还有一些值得注意的其他事情。每个数据库支持最大2GB的数据附件,并且每个附件必须小于256MB。必须使用“附件”对话框(如图2.7所示)编辑和管理附件,除非用户使用程序管理它们。

图2.7 使用“附件”对话框管理附件

“超链接”字段用来存储统一资源定位符地址(URL),它用于与Internet上的全球Web页或在内部网上实现链接。超链接字段也用来存储通用命名约定(Universal Naming Convention,UNC)路径,它用于实现与文件路径的链接。超链接字段类型分为以下3个部分:

用户所见到的东西;

URL 或UNC;

子地址,如区域名或书签。

当在超链接字段中放置了一个项目之后,这项便充当一个对应于自己所指定的文件或Web页的直接链接。2.10节将对超链接进行详细讨论。

在表中添加了字段之后,就应该自定义它们的属性。可以使用字段属性来控制数据的存储方式,以及什么样的数据可以输入到字段当中。根据所选定字段类型的不同,字段的属性也会有所不同。“文本”字段类型的字段属性列表具有一定的代表性(如图 2.8 所示)。以下各节就专门讨论各个字段属性。

图2.8 “文本”字段的字段属性

第1个属性是字段大小,它只适用于文本和数字字段。如前所述,应该使字段大小尽可能小。对数字字段来说,字段越小,对存储空间的要求就越低,而操作处理速度则越快。

练习:使用以下字段及其相应的类型创建一个表。

CompanyID:自动编号。

CompanyName:文本。

State:文本。

PhoneNumber:文本。

ContactDate:日期/时间。

CreditLimit:货币。

(1)为将State字段的“字段大小”属性设为两个字符,应该先单击字段,然后在“字段大小”属性中输入“2”。

(2)切换到数据表视图。这时系统会提示保存表。将其命名为“tblCustomers”。如果没有为上表指定主键,系统还会提示指定主键。当在State字段中输入数据时,只能输入两个字符。

注意 这个例子及本章中的其他例子均可在下载的示例代码的Chap2Trlt.ACCDB文件中找到。如果要验证自己所创建表的结构是否正确,请参考这个文件。

第2个属性是格式,它适用于除OLE对象字段和附件字段之外的所有字段。利用它可以指定Access如何显示数据。Access允许从预定义的格式中进行选择,或者使用自己创建的自定义格式。字段的数据类型不同,可选的格式也就不同。例如,在 Access 当中,可以选择不同的日期/时间格式,包括“短日期”(如07-7-7)、“长日期”(如2007年7月7日,星期六)、“短时间”(如7:17)和长时间(如7:17:11 AM)。货币字段的格式包括“货币”(如¥1,767.25)、“固定”(如1767.25)和“标准”(如1,767.25)。

练习:将ContactDate字段的格式属性设定为常规日期。然后切换到数据表视图,并且以不同的格式如07/04/07和2007年7月4日输入日期。注意,不管以何种方式输入日期,当将光标移离那个字段的时候,日期将以yy-mm-dd的格式把日期显示为

注意 “短日期”和“长日期”格式是由“控制面板”中“区域选项”控制的。

提示 Access 2007支持多次“撤消”和“恢复”操作。可以在Microsoft数据库(MDB)表和查询、ACCDB 窗体、报表、数据访问页面、宏,以及模块的“设计视图”中进行多次“撤消”和“恢复”操作。利用这个功能可以像在 Word 或 Excel 中操作文档一样,在“设计视图”中向前一步或向后一步查看改变的状况。

利用快捷键“Ctrl+>”、“Ctrl+.(句号)”、“Ctrl+<”和“Ctrl+,(逗号)”可以方便地在不同表视图间切换。“Ctrl+>”和“Ctrl+.”可以显示下一张视图。“Ctrl+<”和“Ctrl+,”可以显示前一张视图。

另一个重要的属性是输入掩码属性,它适用于文本、数字、日期/时间和货币字段。格式属性决定数据的显示格式,而输入掩码属性用来控制可以存储在字段当中的数据。可以使用输入掩码属性按字符来控制什么类型的字符(如数字和字母数字等)可以存储在字段当中,以及什么样的字符又是所要求的。图 2.9 所示的是“输入掩码向导”对话框,它可以帮助创建在文本和日期字段中常用的输入掩码。为了访问“输入掩码向导”,应该单击输入掩码字段右边的按钮。

图2.9 “输入掩码向导”对话框可以帮助输入掩码

注意 只有在安装的时候选择了“附加向导”组件,输入掩码向导才可以使用。如果没有,Access会在用户第一次使用它时提示安装。

例如,输入掩码000-00-0000;;_(当将光标移离这个属性时,它就会转换为000\-00\-0000;;_)就可以控制输入一个有效的社会保障号码。分号前面的字符表达了实际上的掩码。其中的0用于限制输入的0~9位。当用户输入数据的时候,其中的破折号会在控件内显示。在第1个和第2个分号之间输入的字符决定了字母字符(这里是指破折号)是否可以存储在字段当中。如果在这个位置输入一个“0”,那么字母字符就存储在字段当中;若是输入一个“1”或者将其留为空白,那么字母字符就不存储。最后一个位置(即第2个分号之后)表示要显示什么样的字符来说明用户输入的空格(这里使用的是下划线)。

这里有一个更为清楚的例子:在掩码\ (999") "000\-0000;;_当中,第1个斜杠使得跟在它后面(即括号中)的字符显示为字母。3个9表示可以输入数字或空格。两个引号之间的括号显示为字母。首先出现的3个0表示要求的值是0~9。第2个斜杠之后的破折号是显示为字母。然后又要求另外的4个数字。由于两个分号之间什么也没有,因此字母字符不存储在字段当中。第2个分号之后跟了一个下划线,因此用下划线表示用户接下来输入的空格。

练习:使用“输入掩码向导”来为PhoneNumber字段添加一个掩码,应该将这个字段设定为文本字段。以下是该过程的步骤。

(1)先单击PhoneNumber字段中任意处,然后单击“输入掩码”属性。

(2)单击“输入掩码”属性右边的省略号(在中文版中,没有默认的电话号码输入掩码,所以,可直接在输入掩码属性中输入需要的掩码\ (999") "000\-0000,以代替(2)、(3)步,译者注)。

(3)从一列可选的掩码中选择电话号码,在向导询问“您愿意如何保存该数据?”时,选择不将字母字符存储到字段当中。

(4)切换到数据表视图,并输入一个电话号码。请注意光标是怎样在字母字符之间移动的。然后试着让地区代码留为空白。Access是允许用户这样操作。

(5)接下来,试着在某个位置输入一个字母。Access将阻止用户这样操作。

(6)然后,试着将7位电话号码的某个字符留为空白。Access也将阻止这种操作。

提示 当使用了输入掩码后,用户总是处在“改写”模式。这是Access的一个特点,用户不能对其进行更改。

另一个属性是标题属性。这个属性中的文本将成为字段在数据表视图当中的标题。当把数据绑定控件添加给窗体和报表时,Access会将它用作与数据绑定控件相关联的附加标签的标题。只要命名字段时不使用空格,标题属性都是非常重要的。在数据表视图、窗体和报表当中,标题属性将覆盖字段名。

注意 术语“数据绑定控件”是指一个绑定到表或查询中的字段的控件。术语“附加标签”用于表示附加到数据绑定控件的标签。

提示 在创建使用某个字段的窗体和报表之前,应该事先设定字段的标题属性。当一个窗体或报表创建完之后,Access注重的是当前的标题。如果在以后对标题进行添加或修改,那么现有窗体和报表上的字段标题不会得到修改。

另一个重要的属性是“默认值”属性,它用来表示当用户在表中添加新的记录时,Access将在字段中置放何种默认值。默认值可以是文本,也可以是表达式,它可以为数据输入人员节省大量时间。但是,它不能为字段中的输入作任何有效性验证。

提示 默认值会自动反映到包含相应字段的窗体和报表当中。这与标题属性是不一样的,不管默认值是在窗体和报表的创建之前设定,还是在它们创建之后设定,都会是这样。

如果打算将 Access 数据库升迁到客服/服务器数据库上,那么必须注意,默认值不总是能够被移动到服务器上,即使服务器支持它们。可以直接在服务器上设置默认值,但是这些值在用户给表添加新记录时不会自动出现,除非用户在没有给包含默认值的字段添加数据的情况下保存了该记录。和在自动编号中一样,可以在窗体级执行默认值,并且也有同样的缺点。如果使用Access 2007的“升迁向导”将数据移动到Microsoft SQL服务器,那么Access 就会将默认值导出到服务器数据库中,只要可以将它们转换为常值或 T-SQL (Transact SQL)。

练习:为State、ContactDate和CreditLimit字段输入以下默认值。

State:CA

ContactDate:=Date ( )

CreditLimit:1000

切换到数据表视图,并添加一条记录。注意State、ContactDate和CreditLimit字段出现的默认值。需要的话,用户可以覆盖这些默认值。

注意 Date( )是Visual Basic for Applications(VBA)的内部功能,用于返回日期。当用于字段的默认值时,Access会在用户给表添加新行的时候,将当前日期输入到该字段中。

默认值属性为用户提示了一个值,有效性规则属性则不然,它实际上限制了用户对字段的输入。不要企图修改有效性规则,数据库引擎对它有严格的规定。同默认值属性一样,这个属性可以包含文本,也可以包含Access中有效的表达式,但是,用户定义的函数不能包含到有效性规则属性当中。在有效性规则属性当中,也不能包含对窗体、查询和表的引用。

提示 如果设置了有效性规则属性,而没有设置有效性文本属性(在下一节中介绍),那么当违反有效性规则的时候,Access会自动显示一个标准的错误消息。为了显示自定义的消息,应该在有效性文本属性中输入消息文本。

提示 如果计划将Access数据库升迁到一个数据库服务器上,那么就应该注意,不能总是简单地将有效规则导出到服务器上。有时必须使用服务器上的触发器重新创建它们。当违反服务器上的有效规则时,会显示非Access定义的错误信息。应该编码用户的应用程序,用以提供适当的错误信息。在窗体级也可以执行有效规则,但是如果有其他方式访问数据,是不能强制使用它们的。如果使用Access 2007的“升迁向导”将数据移动到Microsoft SQL 服务器,那么该向导就会将有效规则导出到服务器数据库。

练习:对表中的字段添加以下有效性规则(当将光标从这个属性上移开的时候,Access 会为 State的缩写添加引号)。

State:In ( CA, AZ, NY, MA, UT )

ContactDate:<=Date ( )

CreditLimit:Between 0 And 5000

(1)切换到数据表视图。如果表中已经包含了数据,那么当存储改动的时候,便会显示如图2.10所示的消息。

图2.10 这个消息框提示用户是否修改现有的数据

注意 在这个例子中,表达式<=Date()用于限制输入给字段的值必须是当前日期或之前的日期。因为 Date()表达式总是返回当前日期,所以无论是用户添加新的行还是修改现有的行,有效规则都会被应用。

如果单击“是”按钮,那么Access便将使用新的规则来验证以前所有的数据。如果有错误发生,系统便会给出提示。但是,并不能知道究竟是哪一条记录与规则发生了冲突(如图 2.11 所示)。用户必须创建一个查询才能找出与规则发生了冲突的记录。

如果单击“否”按钮,Access便不会使用新的规则来验证以前的数据,当然,这时也就不会出现问题。

图2.11 所有数据有效性验证失败的警告

(2)在进入数据表视图之后,试着在 State 字段中输入一个无效的州名,这时将显示一个如图 2.12所示的消息框。可以看出这些消息并不友好,因此,要使用有效性文本属性来创建自定义消息。

图2.12 如果违反了有效性规则而且有效性文本属性又没有设置,那么就会显示这个消息框

提示 有效性规则会自动地反映到包含相应表的窗体和查询当中。不管有效性规则是在窗体和查询的创建之前设定,还是在它们创建之后设定,都会是这样。当为字段创建了有效性规则之后, Access便不会允许Null值输入字段,这就意味着字段不能留为空白。如果要允许Null值进入字段,就应该将其添加到有效性表达式In ( CA, AZ, NY, MA, UT ) Or Is Null中。

有效性文本属性用于声明错误消息,当用户违反有效性规则的时候,他们便会看到这些消息。有效性文本属性包含的必须是文本,表达式在有效性文本属性中是无效的。

练习:添加State、ContactDate和CreditLimit字段的有效性文本属性。

State:The State Must Be CA, AZ, NY, MA, Or UT

ContactDate:The Contact Date Must Be On Or Before Today

CreditLimit:The Credit Limit Must Be Between 0 and 5000

试着输入3个字段的无效值,然后检查错误消息。

必填字段属性是非常重要的,它决定是否要在字段中输入值。当要确保将数据输入到字段中时,这个字段对外部键字段非常实用。对一些包含与商务有关的信息(如 CompanyName)的字段,它也是至关重要的。

注意 外部键字段就是指在另一个表中的可查询字段。例如,对于客户表和订单表来说,它们都包含一个客户ID字段。在客户表中客户ID是主键字段。而在订单表中,客户ID是外部键字段,因为它的值可在客户表中查到。

练习:将 CompanyName 和 PhoneNumber 字段的必填字段属性设为“是”。然后切换到数据表视图并添加一条新的记录,这时让CompanyName和PhoneNumber两个字段留为空白。不过在其他字段中至少要输入一个值。这样,当将光标移离记录时,将出现如图2.13所示的错误消息。

图2.13 当将光标移离必填字段属性设为“是”的字段时出现的错误消息

允许空字符串属性与必填字段属性相似。使用它可以决定是否允许用户输入0字长的字符串("")。空字符串与Null(是指不输入)是不一样的,它表示对某一特定的字段来说,数据不存在。例如,外籍雇员可能没有社会保障号码。通过输入一个空字符串,数据录入人员便可以表示无社会保障号码的情况。

练习:添加一个名为“ContactName”的字段,并将其不会必填字段属性设为“是”。然后,试着添加一条新记录,在 ContactName 字段中输入两个引号。这时将不会出现错误消息,因为在 Access 2007中,允许空字符串属性默认为“是”。当移出该字段时,空字符串就会出现。再回到表的设计过程,将“允许空字符串”属性设为“否”,然后进入数据表视图,并再次在ContactName字段中输入两个引号。这时用户应该会看见如图2.14所示的错误信息,表示操作失败。

图2.14 在将允许空字符串属性设为“否”的情况下输入“所得到的错误消息”

警告 在 Access 以前的版本中,“允许空字符串”属性的默认设置为“否”。但在 Access 2002、Access 2003和Access 2007中,Microsoft已经将该默认设置更改为“是”。一定要注意该默认设置,尤其是对于习惯了操作以前版本的Access用户来说。

提示 不要忘了,如果要取消对当前字段的改变,应该按一次Esc键。如果要取消对当前记录的所有改变,应该按两次Esc键。

提示 “必填字段”属性和“允许空字符串”属性是相互作用的。如果将“必填字段”属性设为“是”,而将“允许空字符串”属性设为“否”,那么就实现了对用户的严格限制。这时,用户不仅要输入一个值,而且输入的值还不能是0长度的字符串。

如果将“必填字段”和“允许空字符串”的属性都设为“是”,那么就要求用户输入一个值,而且输入的值还可以是0长度的字符串。但是,如果将“必填字段”和“允许空字符串”的属性都设为“否”,那么就相当于允许用户将字段留为“Null”(即空白),但不允许输入0长度的字符串。

最后,如果将“必填字段”属性设为“否”,而将“允许空字符串”属性设为“是”,那么就相当于允许用户将字段留为“Null”(即空白),也允许用户输入 0 长度的字符串,因此这时对用户是最宽容的。

当用户搜索字段时,索引可以提高操作处理的速度。虽然说索引多一点比索引少一点要好,但是,索引也有它的不足之处(请参考下面的例子)。一般来说,应该为那些用于搜索、排序和查询规则的字段提供索引。

练习:将CompanyName、ContactName和State字段的索引属性设为“有(有重复)”。然后单击功能区“设计”选项卡上“显示/隐藏”组中的“索引”按钮,屏幕上将出现如图2.15所示的窗口。

为了创建非主键多字段索引,必须使用“索引”窗口,要创建一个具有一个名字但具有多个字段的索引。如图2.15所示,图中给出的索引是StateByCredit,它是基于CreditLimit字段和State字段的组合。请注意,索引中只有第1个字段才有索引名。第2个字段即State出现在第一个字段的下一行,它没有索引名。

图2.15 “索引”窗口给出了一个表定义的全部索引

索引可以加速搜索、排序和数据分组。其缺点在于它会占用大量的硬盘空间,而且会减慢数据的编辑、添加和删除过程的速度。虽然说在大多数情况下,它带来的便利大于它的不足,但是,不应该索引表中的每个字段。只须为那些要用于搜索或排序的字段或字段组合进行索引,不要为那些具有高度重复数据的字段(如一个字段具有两个不同的值)创建索引。最后,也不要为“是/否”字段创建索引。它们只占用一位的存储空间,而且又只有两个值,因此,索引不能为“是/否”字段带来什么便利。

提示 索引在数据库服务器上的作用很重要。当将Access数据库升迁到非Microsoft服务器上时,就不能创建索引了。此时必须在后端数据库服务器上重新创建所有索引。如果数据库服务器运行的是Microsoft SQL 服务器,那么就可以使用Access 2007的“Access升迁向导”升迁Access数据库。该工具会在索引所处的Access表位置创建服务器表的索引。

最后一个属性是“Unicode压缩”。“Unicode压缩”属性值用于文本和备注字段。这个属性用于决定字段中数据是否使用 Unicode 压缩来进行压缩。在 Access 2000 以前的版本中,数据以 DBCS 的格式进行存储,这个格式用来存储针对某一特定语言如汉语的字符数据。在 Access 2000 及更高版本中,所有的数据都以Unicode 2字节表示格式进行存储。虽然对这种格式对各个字符来说,要求的空间更大了(是两个字节而不是一个字节),但Unicode压缩属性能使数据尽可能地得到压缩。如果所使用的字符集允许压缩,而且“Unicode压缩”属性又被设定为“是”,那么列中的数据将以压缩格式存储。

表中最重要的索引叫做主键索引。它可以确保组成索引的字段不出现重复,并为表提供一个默认的次序。在“一对多”关系的“一”端,必须为字段设定一个主键。为了创建一个主键索引,应该先选择要创建为主键的字段,然后单击功能区上的“主键”按钮。

图2.16给出了基于CompanyID字段创建主键索引的tbl客户表。注意,设为表的主键的字段其索引名为“PrimaryKey”。而且这个索引的“主索引”和“唯一索引”属性都被设定为“是”。

图2.16 基于CompanyID字段的主键索引

使用查阅向导就可以在另外一个表或查询当中,或者由一个固定的值列表对指定的字段查阅值。也可以将一列有效值显示在组合框或列表框中。在“一对多”关系当中,查阅是从外部键(即多端)到主键(即一端)进行创建的。

查阅向导可以通过在字段的数据类型列表中选择“查阅向导”来激活。向导的第1个对话框询问用户是否要在表和查询当中查阅值或者是否要自行输入值(如图 2.17 所示)。笔者建议在表和查询当中查阅值,这样使得应用程序容易维护。第2个对话框要求给出进行值查阅的表或查询(如图2.18所示)。选定一个表或查询之后,应该单击“下一步”按钮打开第3个对话框。在这一步,查阅向导要求给出表或查询用于查阅的字段(如图2.19所示)。查阅向导的第4步会询问列表框中使用的排序次序。第5步如图2.20所示,可以控制自己组合框或列表框的列宽度。

图2.17 “查阅向导”第1 步,询问要查阅值的来源

图2.18 “查阅向导”第2 步,选择表或查询,使它们的数据出现在下一步

图2.19 “查阅向导”第3步,选定Access将要用于查询的字段

图2.20 在查阅向导的第5 步,可以控制自己组合框或列表框的列宽度

提示 在学习前述的例子时,最好使用 Chap2.ACCMDB 示例数据库文件。所有的查阅表已经添加到该示例数据库文件当中。

注意 如果为查找选择了多个字段,并且有一个是关键列,比如说ID字段,那么,“隐藏键列”复选框就会出现。应该将其选定,在查找中它会自动地隐藏关键列,即使最终结果与关键字段有关。

最后,利用向导可以为组合框指定一个标题。当单击“完成”按钮后,系统就会提示用户保存表及由向导填入的所有属性,它们将显示在字段的“查阅”选项卡中(如图2.21所示)。显示控件属性设为组合框,说明是选择一个组合框来显示有效的值。当用户面对数据表视图或者窗体的时候,就是这种情况。行来源类型表示组合框的源是一个表或查询,并且行来源会给出用于给组合框添加数据的SQL Select语句。其他属性则给出了组合框的哪些列与数据进行了绑定,组合框有多少列,组合框的宽度及组合框各列的宽度。第5章将对这些属性进行详细的讨论。有必要的话,以后还可以修改组合框的SQL Select语句。

图2.21 查阅向导所设定的字段属性

注意 以笔者的观点来看,查阅功能更具有阻碍性,而提供不了什么帮助。在激活查阅功能之后,用户就再也不能轻易地访问存储在外部键字段中的基本数字值了。只能在组合框中看见显示的查阅值。这样使得对应用程序的问题排查错误变得非常困难。

查阅功能主要的优点是,无论带有查阅的字段什么时候被放置在窗体上,它都能通过自动将组合框添加到窗体,来简化建立窗体的过程。笔者个人以为,在窗体上建立组合框非常简单,而使用查阅功能并不会节约很多时间。在评估了这个与用户有关的功能的利与弊后,笔者倾向于不在应用程序中使用它。

除了字段属性之外,还可以总体地为表指定属性。为了访问表的属性,应该在表的设计视图中单击功能区上的“属性表”按钮。图2.22所示的是表的属性。“说明”属性主要用于编写文档。“默认视图”属性在第一次打开表时,指定表出现在哪个视图中。“有效性规则”属性用于指定记录级而不是字段级的有效性验证。例如,对于不同州的顾客来说,其CreditLimit应该不一样。在这种情况下,一个字段中的输入值就与另一个字段中的值有关。在输入了表级有效性规则之后,用户输入数据的顺序就无关紧要了。表级有效性规则能保证字段之间的相关性得以执行。有效性规则的例子如下所示:

图2.22 浏览表的属性

[State] In ("CA", "NY") And [CreditLimit]<=2500 Or _

 [State] In ( "MA", "AZ") And [CreditLimit]<=3500 Or _

 [State] Not In ( "CA", "NY", "MA", "AZ")

这个有效性规则要求对加利福尼亚州和纽约的信用卡限制为2500美元以下,对麻省和亚里桑那州的信用卡限制为 3500 美元以下,对其他州则没有信用卡限制。表级有效性规则不能与字段级有效性规则发生冲突。

“有效性文本”属性决定当用户违反有效性规则的时候显示什么消息。如果留为空白,则只显示默认消息。

“筛选”属性用来表示将要在数据表、窗体或查询当中显示的记录子集。“排序依据”属性用来指定记录的默认排序。“筛选”属性和“排序依据”属性一般不作为表的属性使用。

“子数据表名称”属性用于标明用做导出表的名字。如果将其设为“自动”,导出表会依据数据库中所建立的关系自动检测。“链接子字段”和“链接主字段”属性用于设计特殊的字段,它用来将当前表与“子数据表名称”属性所指定的表链接起来。如果将“子数据表名称”属性设为“自动”,则这些属性应该留为空白。“子数据表高度”用于指定子数据表的最大高度,而“子数据表展开”属性用来设定子数据表是否自动以展开状态进行显示。

“方向”显示属性表的布局方向。对于美国英语,它的默认设置显然是“从左到右”。这个属性是由语言决定的,并且仅在Microsoft Access的语言版本支持从右到左的显示时,“从右到左”设置才可用。阿拉伯语和希伯来语都是从右到左的语言。通过安装给特殊语言的 Microsoft Office 多语言安装包和Microsoft Office校验工具包,并且再在Microsoft Office语言设置中激活从右到左的语言,就可以切换到从右到左的环境。

如前所述,使用索引可以提高应用程序的性能。对于那些要进行排序、分组、连接或设定规则的字段,就应该为其创建索引,除非它包含高度重复的数据。查询从索引中的受益是比较大的,如果查询规则中所包含的字段具有索引,用于查询排序的字段建立有索引,或者在查询当中本来不相关的两个表用具有索引的字段实现连接,那么查询从索引中的受益则更大。实际上,都应该在连接的两端为字段创建索引。如果用户使用“查找”对话框,那么索引可以减少搜索时间。请记住,索引的不足在于它占用磁盘空间,而且在添加、删除和更新记录的时候,它要占用较长的更新时间。虽然说对不同的应用程序而言情况不一样,但是索引在很多情况下是能带来好处的。

注意 当为两个表建立关系的时候,“一对多”关系的“多端”(即外部键字段)的表,其索引会被自动创建。例如,如果要把表tblOrder与表tblCustomers通过CustomerID字段联系起来,那么表tblOrder的CustomerID字段会自动创建一个内部索引。也就是说,这时没有必要显式地创建外部键索引。第3章将详细介绍关系。

通过添加超链接字段和允许用户以HTML的格式保存表的数据,微软使得开发人员开发面向Internet的应用程序更容易了。超链接字段类型使得用户能很容易地在表中存储UNC和URL地址。将表的数据保存为HTML格式的能力又使得用户能轻松地在Internet和内部网站点上发布表的数据。以下各节将涵盖这些功能。

通过使用超链接字段类型,用户可以在表中的各个记录内存储不同的UNC或URL地址。虽然一个UNC或URL地址可以直接输入到字段当中,但是,使用“插入超链接”对话框来输入地址显得更为容易(如图 2.23 所示)。在这里,用户可以浏览超链接地址与子地址,以及退出对话框的时候自动输入的地址。为了调用“插入超链接”对话框,应该右键单击超链接字段,然后在弹出的快捷菜单中选择“超链接”>“编辑超链接”命令。

图2.23 用户可以使用“插入超链接”对话框为字段选择或创建超链接对象

“要显示的文字”文本框用于输入用户在浏览数据表视图、窗体和报表的字段数据时所能看到的文本。超链接可以是以下形式:

一个现有的文件或Web页;

当前数据库中的另外一个对象;

新的数据访问页;

电子邮件地址。

为了选择一个现有的文件或Web页,应该先单击适当的“链接到”图标,然后输入现有的文件名或Web 页名,或者从“最近使用过的文件”、“浏览过的页”或“当前文件夹”列表中对其进行选择。“文件”按钮用于浏览现有的文件,而“Web页”按钮用于浏览现有的Web页。

要想实现与当前数据库中的对象链接,应该单击适当的“链接到”图标。应该先单击“+”展开表、查询、窗体、报表、页、宏或模块的列表,然后单击想要链接的数据库对象。

为了链接自己新创建的数据访问页,应该单击适当的“链接到”图标,然后输入新页名并设定当前或以后是否需要编辑新页。

为了设定自己想要链接的电子邮件地址,应该单击适当的“链接到”图标,然后输入电子邮件地址和主题,或者从最近使用的电子邮件地址列表中进行选择。

所有要求的信息输入之后,就建立了链接,超链接字段也被输入到了字段当中。如果输入的是UNC,那么单击超链接就会激活与文件相关联的应用程序。指定文件打开以后用户就到达了子地址所设定的文档部分。如果输入的是URL,而且用户登录到了Internet或者与自己公司的内部网实现了连接,那么用户将直接进入设定的页。如果用户当前与 Internet 及自己公司的内部网没有实现连接,那么会出现“连接到”对话框,用户可以由此登录到适当的网络。

表的数据可以保存为HTML格式文件,因此,可以轻松地在Internet或内部网站点上发布表的数据。通过使用“文件”>“导出”菜单项,便可以将表的数据保存为HTML的形式。其步骤如下所述。

(1)单击“导航窗格”,选择想要导出的表。

(2)选择“外部数据”选项卡。

(3)在“导出”组中单击“其他”的下拉键。

(4)从下拉菜单中选择“HTML 文档”选项,就会出现“导出——HTML 文档”对话框(如图 2.24所示)。

图2.24 利用“导出——HTML 文档”对话框可以选择导出文件的名称和位置

(5)单击“浏览”按钮,打开“保存文件”对话框,给.htm文件选择一个名称和位置。

(6)选择一个名称和位置后,单击“保存”按钮,Access就会返回“导出—HTML文档”对话框。

(7)按照需求,可指定导出选项。

(8)单击“确定”按钮,打开“HTML输出选项”对话框。用户可以在此选择一个HTML模板,以及指定用于保存该文件的编码方式。

(9)单击“确定”按钮。如果选择了在完成导出操作之后就打开目标文件,那么导出的文档就会出现在用户浏览器中(如图2.25所示)。图2.26显示了基本的HTML语言,用户可以使用HTML编辑器编辑它。

图2.25 将表保存为 HTML 后,用浏览器查看HTML文档

图2.26 表保存为 HTML 的形式后,查看生成的HTML源

(10)该向导最后一步询问用户是否保存导出步骤。如果愿意这么做,可以选中“保存导出步骤”复选框。

(11)单击“关闭”按钮完成该过程。

注意 在《Alison Balter’s Mastering Access 2002 Enterprise Development》一书中专门讨论了面向Internet的应用程序的创建。

利用Access 2007 可以将数据保存为XML 文件,并且可以从 XML 文件中导入数据。使用编码或者Access用户界面导出XML数据,可以生成数据(XML)、架构(XSD)和样式表(XSL)文件。虽然有关Access和XML深度的内容包含在《Alison Balter’s Mastering Access 2002 Enterprise Development》中,但是本节将介绍基本的有关导入和导出过程的内容。要将表导出为XML,可以按照以下步骤进行操作。

(1)选中要导出的表。

(2)选择“外部数据”选项卡。

(3)在“导出”组中单击“其他”下拉按钮。

(4)从下拉菜单中选择“XML文件”选项,打开“导出——XML文档”对话框。

(5)单击“浏览”按钮,打开“文件保存”对话框,给.xml文件选择一个名称和位置。

(6)选择一个名称和位置后,单击“保存”按钮,Access会返回“导出——XML文档”对话框。

(7)单击“确定”按钮,打开“导出XML”对话框。此处,用户可以指定是否希望导出数据、数据架构和数据样式表(如图2.27所示)。

图2.27 作为导出步骤的一部分,利用“导出 XML”对话框可以选择想要生成什么样的XML文档

(8)单击“确定”按钮,Access会生成适当的文件。

(9)该向导最后一步询问用户是否保存导出步骤。如果愿意这么做,可以选中“保存导出步骤”复选框。

图2.28显示了基本的XML语言,可以使用XML编辑器编辑它。

图2.28 在将表保存为XML后,可以查看生成的XML

和将数据导出为XML文件一样,也可以将XML数据导入Access。要将XML数据导入Access表,可以按照以下步骤进行操作。

(1)选择“外部数据”选项卡。

(2)在“导入”组中单击“导入XML文件”按钮。

(3)单击“浏览”按钮,选择想要导入的文件。然后单击“导入”按钮,打开“打开”对话框。

(4)选择想要导入的文件,单击“打开”按钮。Access会返回“获取外部数据——XML文件”对话框。

(5)单击“确定”按钮,打开“导入XML”对话框,执行导入(如图2.29所示)。

图2.29 利用“导入 XML”对话框可以选定用于导入过程的选项

(6)指定是否希望导入“仅结构”、“结构和数据”或“将数据追加到现有的表中”。

(7)单击“确定”按钮Access会继续以完成导入进程。

有时用户需要知道哪个对象依赖于哪个特殊的表。以下介绍该过程是如何工作的。

(1)单击打开“导航窗格”下拉列表,选择“表和相关视图”选项。第1次给数据库执行该任务时,会出现一个对话框,提示用户要给数据库更新对象相关性信息(如图 2.30 所示)。在单击“确定”按钮之后,Access会给数据库更新相关性信息,并且会一起显示每个表和依赖于该表的对象(如图2.31所示)。

图2.30 如果是第1 次显示数据库中的对象相关性,Access会提示给该数据库更新相关性信息

图2.31 Access 显示出每个表及依赖该表的对象

(2)默认状态下,“对象相关性”窗口会显示依赖于选中对象的所有对象。可以单击“从属对象”按钮查看选中对象依赖的所有对象。

(3)可以单击一个项目的节点展开附加的相关性。因为本例中没有建立表之间的关系,数据库中也不包含基于数据库中表的查询、窗体或报表,所以不存在相关性。如果在罗斯文数据库中实践该过程,就会发现结果更有意思。

(4)在查看和操作对象相关性之后,关闭“对象相关性”窗口。

数据库都有大量的规格和限度,它们是值得注意的。幸运的是,用户会发现它们并没有要求得太严格。表2.2列出了这些规格。

表2.2 数据库的规格和限度

表也有大量的规格和限度,虽然它们并没有太严格的要求,但是用户应该记住它们。表 2.3 列出了这些规格。

表2.3 表的规格和限度

续表

还可以以XML格式保存表数据。

现在,创建一个新的数据库,并且设计计算机咨询公司的Time and Billing应用程序所要求的几个表。需要创建表tblClients和tblProject。其中表tblClients是应用程序的主表,它用于记录各个客户的重要信息;而第2个表tblProject用来让用户在工程中保持自己所针对的各个客户的重要信息。表2.4给出了表tblClients的字段名、数据类型和字段大小。除了Notes,还应该为所有字段创建索引。表2.5给出了要为这些字段设定的属性。表2.6给出了表tblProject的字段名、数据类型和字段大小,表2.7给出了要为这些字段设定的属性。除了ProjectDescription,用户应该为所有字段创建索引。

表2.4 表tblClient的字段名、数据类型和字段大小

表2.5 表tblClients的字段要设定的属性

表2.6 表tblProjects的字段名、数据类型和字段大小

表2.7 要为表tblProjects的字段设定的属性

Time and Billing应用程序的其他表列在附录B的“表结构”中,该附录可以从网站www.samspublishing.com上下载。完整的表结构可在CHAP2.ACCMDB中找到,这个文件及这本书中其他地方所要用到的文件都可在下载的示例代码中找到。

表是应用程序的基础。如果表的结构设计不当,应用程序设计得再好,应用程序也会不便于使用。这一章首先讲述了好几种表的创建方法,然后讨论一些理论上的问题,例如如何选择正确的字段类型及怎样有效地使用字段属性。本章对各个属性及其使用方法都进行了详细的讨论。最后,本章阐述了表的属性及索引。学习完本章之后,大家应该熟悉了Access表设计器所提供的功能特点。

图书在版编目(CIP)数据

Access 2007开发指南/(美)巴尔特(Balter,A.)著;谢晖,许伟译.--2版(修订本).--北京:人民邮电出版社,2012.8

ISBN 978-7-115-28609-3

Ⅰ.①A… Ⅱ.①巴…②谢…③许… Ⅲ.①关系数据库系统—数据库管理系统 Ⅳ.①TP311.138

中国版本图书馆CIP数据核字(2012)第121220号

版权声明

Alison Balter’s Mastering Microsoft Office Access 2007 Development

(ISBN:0672329328)

Copyright © 2007 by Sams Publishing

Authorized translation from the English language edition published by Sams Publishing.

All rights reserved.

本书中文简体字版由美国Sams Publishing 授权人民邮电出版社出版。未经出版者书面许可,对本书任何部分不得以任何方式复制或抄袭。

版权所有,侵权必究。

Access 2007 开发指南(修订版)

♦著 [美]Alison Balter

译 谢晖 许伟

责任编辑 杨海玲

♦人民邮电出版社出版发行  北京市崇文区夕照寺街14号

邮编 100061  电子邮件 315@ptpress.com.cn

网址 http://www.ptpress.com.cn

北京艺辉印刷有限公司印刷

♦开本:787×1092 1/16

印张:53.75

字数:1653千字  2012年8月第2版

印数:3501–6000册  2012年8月北京第1次印刷

著作权合同登记号 图字:01-2012-4574号

ISBN 978-7-115-28609-3

定价:99.00元

读者服务热线:(010)67132692 印装质量热线:(010)67129223

反盗版热线:(010)67171154

相关图书

全国计算机等级考试教程  二级Access数据库程序设计
全国计算机等级考试教程 二级Access数据库程序设计

相关文章

相关课程