65.9K
CodeProject 正在变化。 阅读更多。
Home

自动化 Microsoft Access 应用程序的构建

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.54/5 (8投票s)

2006年5月15日

4分钟阅读

viewsIcon

59107

downloadIcon

1094

一个用于自动化构建 Access 应用程序的类。

Build Access Application - Screenshot

引言

在发布一个非琐碎的 Access 应用程序之前,通常需要执行多项任务。通常,这包括删除不再需要的 Access 对象,编译、压缩和修复数据库,以及创建 MDE 文件。使用 Access,即使遵循了这些步骤,有时生成的应用程序文件也会比您创建一个新的 Access 应用程序并重新导入所有对象到新的 MDB 中要大。

本文和代码提供了一种自动化此过程的方法,允许将 Access 应用程序的准备和发布作为批处理构建脚本的一部分。对于使用 C++ 和 .NET 等其他平台的开发团队来说,使用每日构建脚本是一种常见的做法。没有理由为什么使用 Access 的团队或个人不应该也这样做。关于此主题的建议阅读是 Joel Spolsky 的"Joel on Software"。他将拥有一个每日自动化构建过程列为每个软件公司应该做的 12 件事之一。

用于构建 Access 应用程序的代码包含在一个名为 AccessApp 的类模块中。这个类模块代表一个要构建的新 Access 应用程序实例。该类的各种方法允许:

  • 从其他 MDB 导入 Access 对象(引用、菜单和工具栏、导入/导出规范、表、查询、窗体、报表、宏、模块和数据访问页)。
  • 编译应用程序。
  • 压缩/修复数据库。
  • 创建 MDE。

使用代码

您可以根据需要使用类模块方法来定制您的 Access 构建。可下载的文件包含演示如何将构建参数作为命令行参数接收的代码。其理念是将 Access 构建包含在 BAT 文件中。过程是启动 AccessBatchBuild.mdb,并传递构建参数。然后 AccessBatchBuild.mdb 将执行构建步骤,并在完成后终止 Access 实例,允许批处理脚本继续执行您构建序列中的任何其他步骤。一个典型的 BAT 文件内容来构建 Access 应用程序的示例是:

"C:\Program Files\Microsoft Office\Office11\msaccess.exe" 
        "D:\AccessBatchBuild.mdb" /nostartup 
        /x AccessBatchBuild /cmd D:\dbFrom.mdb/D:\dbTo.mdb

用通俗的语言来说,这意味着:启动 MS Access;打开 AccessBatchBuild.mdb;调用宏 AccessBatchBuild;并将 From 和 To MDB 的位置作为参数传递。本示例中的输出将是两个文件:dbTo.mdbdbTo.mde

此外,还提供了一个 GUI 界面 - 由一个窗体组成,允许选择一个源 Access 应用程序并指定保存构建结果的 Access 应用程序的位置。请参阅屏幕截图。

执行构建的代码会创建一个类的实例,然后执行所需的步骤。它看起来像:

Dim FromApp As Application
Dim ToApp As AccessApp

'' The 'From' App is just a regular old Access.Application object.
Set FromApp = New Access.Application
FromApp.OpenCurrentDatabase FromMDBPath

'' The 'To' App is an AccessApp object
'' and does all the work of importing.
Set ToApp = New AccessApp
ToApp.Path = ToMDBPath
ToApp.NewApp

ToApp.ClearReferences

ToApp.ImportObjects FromApp, acReferences
ToApp.ImportObjects FromApp, acTables
ToApp.ImportObjects FromApp, acQueries
ToApp.ImportObjects FromApp, acForms
ToApp.ImportObjects FromApp, acReports
ToApp.ImportObjects FromApp, acDataAccessPages
ToApp.ImportObjects FromApp, acMacros
ToApp.ImportObjects FromApp, acModules
ToApp.ImportObjects FromApp, acRelationships
ToApp.ImportObjects FromApp, acImpExpSpecs
ToApp.ImportObjects FromApp, acCommandBars

ToApp.Compile
ToApp.CompactRepair
ToApp.MakeMDE

Set ToApp = Nothing

FromApp.CloseCurrentDatabase
Set FromApp = Nothing

每个类方法的目的应该很明显。

关注点

最难导入的对象是菜单和工具栏。这涉及到一些递归来遍历菜单树 - 其中一个菜单可能包含子菜单。

此类不包含错误处理或日志记录,也许应该进行这些增强。因此,如果在构建过程中遇到运行时错误或 MDB 编译错误,批处理脚本很可能会卡住,Access 挂起 - 等待手动干预。请随意添加错误处理和日志记录。理论上,构建过程不应遇到错误,因为过程控制应到位,以确保构建的源对象处于准备好发布的就绪状态。另外,如果您决定在现有 MDB(即源 MDB = 目标 MDB)之上进行构建,请务必小心。此类会处理这种情况,并创建一个源 MDB 的临时中间副本,以实现此目的。但如果出现严重问题,您可能会丢失您的应用程序。建议您将源 MDB 路径与目标构建 MDB 路径分开,以消除此风险。

使用构建时,各种 Access 设置不会保留。例如,应用程序的启动设置(例如,启动时启动的窗体)不会保留。我的想法是,您的 Access 应用程序应该在应用程序启动时以编程方式设置这些。另一种方法是增强此构建类,使其也能携带需要从源 MDB 保留的此类设置。

最后,我需要工作 - 所以如果您有任何事情需要我做,请联系我。此外,我对您的意见很感兴趣。当然,还有任何 Bug,测试这些代码是最无聊的部分,因此最终产品可能还需要一点润色。

历史

首次提交于 2006 年 5 月 14 日。

© . All rights reserved.