Access 2003完整教程:改进 Access 项目的性能

根据计算机的配置和工作环境,可以采取一些操作来提高 Microsoft Access 或您的Access 项目的性能。

改进 Access 项目的性能

在客户/服务器应用程序中,减少网络通信量和优化应用程序性能的一般经验法则有:

了解 OLE DB 和客户/服务器环境

Microsoft Access 项目使用 OLE DB 与 Microsoft SQL Server 数据库连接和通信。Microsoft 设计了OLE DB结构,以便在客户/服务器环境中高效地工作。

当通过窗体或数据表访问数据时,OLE DB 会从 SQL Server 数据库检索一个可更新快照的记录集(不超过最大记录数限制),并在客户机上缓存这些数据,这样即完成了对服务器的一次往返访问。Access 异步检索这些数据,这意味着在加载数据时,仍可以继续与 Access 交互。当处理窗体或数据表中的数据时,不论是浏览、筛选、排序、查找数据,还是更新数据,都是在处理缓存在客户机上的数据。

处理服务器上的数据

若要处理服务器上的数据,可以使用存储过程、触发器和用户定义函数,并且可以在检索数据之前先在服务器上对数据进行排序。

存储过程是由一个或多个 SQL 语句和可选控制流语句组成的预编译集合,它可以接受参数,并且 Microsoft SQL Server 将存储过程当成单个的单元处理。存储过程保存在 SQL Server 数据库中。由于存储过程是在创建时便在服务器上编译了,因此它比单个 SQL 语句执行得更快。又由于存储过程是在服务器上运行的,因此它利用了服务器的剩余处理能力。

触发器是一种特殊的存储过程,当更新、插入或删除数据时自动执行。使用触发器,可以实施比用检查约束定义的规则和限制更复杂的业务规则和限制。与检查约束不同,触发器可以引用其他表中的列。例如,如果某个更新试图为价格低于 10 美元的图书(保存在一个标题表中)应用折扣(保存在折扣表中),触发器就会回滚该更新。

用户定义的函数将存储过程和视图的最佳功能组合到一个查询中,以便嵌套值、为值传递参数、给值排序,并返回一些值。在许多情况下,用户定义函数是比存储过程更好的选择,因为您可以返回单个表的数据和标量值,隐藏业务逻辑以及数据与标量值是如何从用户创建的细节,并简化 SQL 语句语法的复杂性。

对记录进行排序使用保存在窗体或报表(保存在 Access 项目中,但在服务器上运行)的“记录源”属性中的存储过程、用户定义函数或 SQL 语句,对服务器上的记录进行排序。对服务器上的记录进行排序是利用服务器的剩余处理能力的另一种方式。

限制从服务器检索到的数据和属性信息

要尽可能限制应用程序从 SQL Server 数据库检索的数据量。使用视图、存储过程、用户定义函数、服务器筛选和 SQL 语句 WHERE 子句,可以限制您或用户在窗体或数据表上所能看到的数据。通常,应避免设计对用户浏览数据库没有任何限制的应用程序方案。

通常,最好使用最大记录数限制按钮或“最大记录数”属性限制您或用户在窗体或数据表中所能看到的数据。

也可以使用服务器筛选,在从服务器上的数据库中检索记录之前限制检索的记录数,并且使用筛选进一步限制客户机上的记录数。可以在窗体或报表的“服务器过滤器”属性中定义一个服务器筛选。也可以优化“按窗体服务器筛选”和“按窗体筛选”窗口中值列表的性能,方法是修改“过滤器查找”属性,来控制从服务器或客户机检索数据时所显示值的数目。

不需要时可以禁用自动行修复。在更新 SQL Server 2000 数据库中的记录后,Access 通常要重新使数据同步,以反映值的更改。不过,这些操作会需要与服务器之间进行额外的往返行程。因此,可以通过将PerformResync属性设为No而禁用行修复功能。

不需要时可以禁用默认值的预提取。默认情况下,在显示窗体或数据表时,Access 会在数据表的新行中显示默认值,在窗体上显示新记录的窗体控件。这要求到服务器的一次往返行程。可以通过将“抓取默认值”属性设为“否”,来禁用默认值的预提取功能。

优化 SQL Server 数据库

下面是有关优化 SQL Server 数据库性能的一般指导。有关改进 SQL Server 数据库性能的详细信息,请参阅 SQL Server 文档。

优化在“链接表向导”中创建的链接表

?如果链接到的 SQL Server 数据库在另一个 SQL Server 上,就要创建链接的服务器(在“链接表向导”的第一页选择“已链接的服务器”)。SQL Server 在大多数情况下将优化联接操作。

如果正与 Excel、文本或 HTML 文件链接,就要创建一个使用 Transact SQL 函数的 OLE DB 数据源(在“链接表向导”的第一页选择“事务处理 SQL”),因为其性能通常要优于创建链接的服务器。

优化窗体

设计窗体时,应确定所需的数据和功能,并且,直至用户请求这些数据和功能时,才要求服务器提供这些信息。例如,可以创建一个窗体,在打开窗体的过程中,它不需要从服务器检索数据。例如,将一个命令按钮添加到该窗体上,用于将数据加载到窗体上。

使用 SQL UPDATE 和 DELETE 语句,以及合适的 WHERE 子句,来更新或删除符合相同条件的多条记录。这比打开一个记录集,一次更新或删除一条记录效率更高。

只在需要时才显示需要长时间从服务器检索数据的字段,如文本和图像字段。可以使用下列技术:

如果窗体所基于的存储过程或用户定义函数是参数查询,请使用“输入参数”属性提供参数值。

优化报表

不要打印长的报表,而是通过使用视图、存储过程、用户定义函数和 SQL 语句作为记录源,或者使用筛选,将报表分成较小的数据子集。

设计报表时,使用版面预览,而不要使用打印预览。可以快速浏览一下这个版面,版面预览中只包含数据的示例。处理完报表的布局后,再在打印预览中打开报表对数据进行验证。

通常,要根据固定的业务周期(如每周库存催询单、每月销售报表或季度财务报告),按计划创建和发布报表。在批处理文件中,作为报表快照创建和分发报表。用户可以使用Snapshot Viewer查看和打印报表。当您的用户需要最新的报表时,可使用分组的数据访问页。

如 果报表所基于的存储过程或用户定义函数是参数查询,请使用“输入参数”属性提供参数值。

改进 Microsoft Access 和系统性能

以下指南可以帮助优化用户计算机中的 Microsoft Access:

改进筛选的性能

如果“按窗体筛选”窗口或“按窗体服务器筛选”窗口中,字段列表的显示要花很长时间,或未显示基表的值,则可以改进其性能。对于这两种类型的窗口,可以禁止列表显示基表的字段值,也可以更改记录的限制,该限制决定列表是否显示字段值。

优化数据库中所有表、查询和窗体的“按窗体筛选”的性能,或所有窗体的“按窗体服务器筛选”的性能

对于“按窗体筛选”,这些设置影响所有的表和查询,并影响其“过滤器查找”属性设为“数据库默认值”的所有文本框控件。对于“按窗体服务器筛选”,这些设置影响其“过滤器查找”属性设为“数据库默认值”的所有文本框控件。

  1. 在“工具”菜单上,单击“选项”。
  2. 单击“编辑/查找”选项卡,然后根据要实现的性能来设置“按窗体筛选默认为”属性。
    • 如果值列表的显示要花很长时间,可清除“本地快照中的记录”复选框(将影响“按窗体筛选”窗口)及清除“服务器中的记录”复选框(将影响“按窗体服务器筛选”窗口),用来禁止列表检索每个字段的唯一值。
    • 如果列表不显示字段值,请检查“显示值列表于”以确保选中了适当的复选框,或试着增加“读取记录超过该数目时不再显示列表”框中的数字,以使其大于或等于所有基表或其他记录源中任意字段的唯一值的最大数目。

优化指定窗体的“按窗体筛选”的性能或“按窗体服务器筛选”的性能

对于窗体上的每个文本框控件,都可指定存储于字段的值是否显示在“按窗体筛选”窗口或“按窗体服务器筛选”窗口中该字段的列表上。

  1. 在“设计”视图中打开窗体。
  2. 显示任意文本框控件的属性表。
  3. 在“过滤器查找”属性框中,将属性设为能达到所需性能的设置值。
    • 如果在“按窗体筛选”窗口或“按窗体服务器筛选”窗口中显示列表要花很长时间,请将“过滤器查找”属性设为“从不”,或将其设为“数据库默认值”,然后在“选项”对话框(“工具”菜单)中做适当的更改。
    • 如果“按窗体筛选”或“按窗体的服务器筛选”窗口中的列表未显示存储在字段中的值,或只显示了部分值,请确保“过滤器查找”属性未设为“从不”。如果“过滤器查找”属性设为“数据库默认值”或“始终”,请在“选项”对话框(“工具”菜单)中做适当的更改。

改进查找和替换的性能

索引的定义

使用索引可以获得对数据库表中特定信息的快速访问。索引是在数据库表中对一个或多个列的值进行排序的结构,例如,employee表的姓氏 (lname) 列。如果正通过他或她的姓氏寻找一个特定的雇员,与必须搜索表中的所有行相比,索引可以使您更快地得到信息。

索引提供指向存储在表的特定列中的数据值的指针,然后根据指定的排序次序对这些指针进行排序。数据库使用索引与在书中使用索引一样:它搜索索引以查找到特定值,然后跟随到指向包含该值的行的指针跳转到所需的内容。

在数据库图表中,可以在“索引/键”属性页中为选定表创建、编辑或删除每种类型的索引。当保存索引所附加的表或当保存表出现在其中的数据库图表时,索引就保存在数据库中了。

根据一般规则,只要经常查询索引列中的数据,就应该对表创建索引。索引不但会占用磁盘空间,而且会降低添加、删除和更新行的速度。在大多数情况下,索引检索数据的速度优势大大超过其不足之处。然而,如果应用程序频繁地更新数据或者如果磁盘空间有限,可能就要限制索引的数目。

在创建索引之前,必须确定所要使用的列以及所要创建的索引类型。

索引列

可以在数据库表中创建基于一列或多列的索引。多列索引可以使您区分在某一列中具有相同值的多个行。

如果经常同时按照两个或两个以上的列进行搜索或排序,索引也很有用。例如,如果在同一查询中经常设置姓氏和名字列的条件,对这两列创建多列索引将非常有意义。

确定索引的有用性:

索引类型

根据数据库的功能,可以在“数据库设计器”创建三种索引类型:唯一索引、主键索引和成簇索引。

提示

尽管唯一索引将有助于查找信息,但是为了获得最佳的执行效果,建议您使用主键约束或唯一约束。

唯一索引

唯一索引是一种不允许在其中有两行相同的索引值的索引。

当在已有数据中存在重复键值时,大多数数据库不允许保存新创建了唯一索引的表。数据库还可能不允许在表中添加可能创建重复键值的新数据。例如,如果根据employee表中的雇员的姓氏 (lname) 创建唯一索引,则两个雇员不能共用同一姓氏。

主键索引

数据库表通常含有其值唯一标识表中每一行的列或列的组合。该列就被称为表的主键。

在数据库图表中,对表定义主键将自动创建主键索引,这是一种特殊类型的唯一索引。该索引要求主键中的每个值必须是唯一的。在查询中使用主键索引时也可以获得对数据的快速访问。

成簇索引

在成簇索引中,表中行的物理顺序与键值的逻辑(索引的)顺序相同。一个表只能包含一个成簇索引。

如果索引不是成簇索引,表中行的物理顺序与键值的逻辑顺序不匹配。成簇索引比非成簇索引更快地获得对数据的访问。

改进窗体和子窗体的性能

有几种方法可以使窗体运行得更快。

常规提示

关于包含图片和对象的窗体的提示

关于包含代码的窗体的提示

不含窗体模块的窗体加载速度更快,占用磁盘空间更小。如果窗体或窗体上的控件不使用事件过程,窗体就不需要窗体模块。

注意

关于子窗体的提示

改进列表框和组合框的性能

有几种方法可以使列表框、组合框和下拉列表框运行得更快:

注释“查询生成器”在数据访问页中不可用。在独立的数据访问页中,或者将数据访问页指向当前未打开的数据库时,向导也不可用。在这两种情况下 ,必须自己创建列表框或下拉列表框。

改进报表和子报表的性能

有几种方法可以使报表打印得更快。

常规提示

关于包含图片和对象的报表的提示

关于子报表的提示

改进数据访问页的性能

您可以采取一些操作使数据访问页在“页”视图或带 Service Pack 2 (SP2) 的 Microsoft Internet Explorer 5.01 或其更高版本中加载得更快。

常规提示

控件

图片和对象

分组的页

了解将 Access 项目转换为 ADE 文件来提高性能

如果Microsoft Access 项目 (.adp)文件中包含Visual Basic for Applications (VBA)代码,则当将 Access 项目另存为.ade文件时会编译所有模块,删除所有可编辑的源代码,并压缩目标 Access 项目文件。VBA 代码将继续运行,但无法再查看或编辑这些代码。

Access 项目将可继续正常运行,也就是说,仍然可以更新数据及运行报表。另外,Access 项目的大小将会由于代码的删除而减小,因此内存使用得以优化,性能得以改进。

将 Access 项目文件另存为 .ade 文件会阻止以下操作:

需要修改窗体、报表或模块的设计时应考虑的事项

务必保存一份原始 Access 项目文件的副本。如果要修改已经另存为 .ade 文件的 Access 项目文件中的窗体、报表或模块的设计,必须修改原始的 Access 项目,然后重新将其另存为 .ade 文件。

在将来版本的 Access 中将无法打开、转换或运行 .ade 文件中的代码。将 ade 文件转换为将来版本的唯一方法是打开创建 .ade 文件时所用的原始 Access 项目,并将其他转换为 Access 的更高版本,然后将转换后的 Access 项目文件另存为 .ade 文件。

将 Access 项目文件另存为 .ade 文件前应考虑的事项

下面一些限制禁止将 Access 项目保存为 .ade 文件:

关于引用和 .ade 文件

如果要从引用了其他 Access 项目或加载项的 Access 项目文件或加载项中创建 .ade 文件,则 Access 会显示一条出错消息并阻止该操作的完成。要将引用了其他 Access 项目的 Access 项目另存为 .ade 文件,必须从引用的第一个项目开始,将引用链中所有的项目都另存为 .ade 或 .mde 文件。在将第一个项目另存为 .ade 或 .mde 文件后,必须将下一个项目中的引用更新为指向这个新的 .ade 文件后再将其另存为 .ade 文件,依此类推。

例如,如果 Project1.adp 引用了 Project2.adp,而 Project2.adp 又引用了 Project3.mda,则应执行以下操作:

  1. 将 Project3.mda 另存为 Project3.mde。
  2. 打开 Project2.adp 并且将其引用更改为指向新的 Project3.mde。
  3. 将 Project2.adp 另存为 Project2.ade。
  4. 打开 Project1.adp 并且将其引用更改为指向新的 Project2.ade。
  5. 将 Project1.adp 另存为 Project1.ade。

了解如何压缩 Access 项目

Microsoft Access 将对Access 文件的压缩和修复放在一个进程中处理。

压缩 Access 文件

如果在Access 数据库中删除数据或对象,或者在Access 项目中删除对象,文件可能会变得支离破碎,并使得磁盘空间的使用效率降低。如果压缩 Access 文件,将制作文件副本并重新安排文件在磁盘上的存储方式。如果压缩以前版本的 Access 数据库,则不会将其转换为 Access 2002 - 2003 格式。

压缩可以优化 Access 数据库和 Access 项目的性能。然而,在 Access 项目中,压缩不影响位于Microsoft SQL Server 数据库中的数据库对象(如表或视图),而只影响 Access 项目本身的数据库对象。

压缩不影响 Access 项目中的自动编号。但在 Access 数据库中,如果已从具有“自动编号”字段的表的结尾删除了记录,压缩数据库会重设“自动编号”值;您所添加的下一记录的“自动编号”值将大于表中最后一次未删除的记录的“自动编号”值。

修复 Access 文件

多数情况下,在试图打开 Access 文件时,Microsoft Access 会检测该文件是否损坏,如果是,就会提供修复数据库的选项。如果当前的 Access 文件中含有对另一个已损 Access 文件的引用,Access 就不去尝试修复另一个文件。在某些情况下,Access 可能检测不到文件受损。如果 Access 文件表现得难以捉摸,就要压缩并修复它。

Access 可以修复:

若要防止 Access 文件受损,请遵循下列指导原则:

在 Access 意外关闭后修复文件

如果发生严重问题导致 Microsoft Access 关闭,则在 Access 重新启动时,会创建关闭时打开着的文件的副本,并将它命名为 filename_Backup.mdb 或 filename_Backup.adp,其中,filename 是原文件的名称。如果 filename_Backup.mdb 或 filename_Backup.adp 已存在,Access 就会要求您指定文件的名称。然后 Access 会尝试压缩和修复原文件。

上页:Access 2003完整教程:从 Microsoft Windows SharePoint Services 列表导入 下页:Access 2003完整教程

Access 2003完整教程:改进 Access 项目的性能

Access 2003完整教程Access 2003完整教程:Microsoft Access 项目设计器中的消息汇总
Access 2003完整教程:字段列表中没有这样的字段Access 2003完整教程:无效的排序和分组
Access 2003完整教程:词汇表Access 2003完整教程:找不到关键字 (MDB)
Access 2003完整教程:朝鲜文字转换为朝鲜文汉字Access 2003完整教程:关于“更正键盘设置”
Access 2003完整教程:将表链接到 Windows SharePoint Services 列表Access 2003完整教程:使脱机数据访问页联机 (ADP)
Access 2003完整教程:DMin、DMax 函数Access 2003完整教程:修改筛选
Access 2003完整教程:修改查询中的联接Access 2003完整教程:新建未关联标签
Access 2003完整教程:在“Outlook 日记”中自动跟踪数据库Access 2003完整教程:使用 UNC 地址打开 Access 数据文件
Access 2003完整教程:有关菜单和工具栏Access 2003完整教程:移动或重命名默认工作文件夹
Access 2003完整教程:复制文件Access 2003完整教程:创建自定义工具栏
版权所有 © 中山市飞娥软件工作室 证书:粤ICP备09170368号