在MS Access上与多个程序员一起工作

时间:2008-10-29 15:40:01

标签: ms-access version-control

您是否建议在MS Access应用程序上与多个程序员合作?

我们的一个MS Access应用程序已经发展到一个程序员在请求的时间范围内无法再处理更改(错误修复)和新功能的程度。

我们正在尝试使用VBA中未记录的SaveAsText和LoadFromText过程引入版本控制,以便在此应用程序上进行协作。遗憾的是,由于校验和存储在每个表单文本文件中,因此我们已经遇到了将修改后的表单和报表加载回Access的问题。

在花时间构建导入/导出应用程序以将文本文件编译到Access数据库之前,我们希望听到您的建议。

6 个答案:

答案 0 :(得分:20)

我认为你应该不惜一切代价避免这条道路,并试图说服管理层重新开发。

吞下这个苦果,但迟早需要重新开发,而你只是节省时间和金钱。

答案 1 :(得分:14)

我们在MS Access 2000/2002/2003上使用微软自己的版本控制插件已有5年了,而且我记不起一个严重的问题了。这个加载项的可用性几乎不值得“B”,但它必须比使用任何涉及手动或半手动导出/导入Access表单,模块等的特殊方法更方便。

我们一直在使用VSS作为版本控制系统。没有任何问题。但是,如果您有充分的理由避免使用VSS,则可能有以下选择:

  • 我们使用的版本控制加载项不需要VSS 。从理论上讲,它可以与任何实现Microsoft Source Code Control Interface (MSCCI)的版本控制系统一起使用。例如,当我们不得不让某人远程处理这个项目时,我们使用了SourceGear的SourceOffsite。访问版本控制加载项可以很好地使用这个第三方产品(不是没有一些怪癖,但足够好)。因此,如果您最喜欢的版本控制系统符合MSCCI,您可以尝试使用它。

  • 现在微软已经拥有了这个Team Foundation,显然还有其他选项可用于将MS Access与版本控制集成。但是,我们没有探索这条道路。 This article可能是探索它的良好开端。

希望这会有所帮助。 : - )

P.S。我不是MS Access的忠实粉丝。事实上,我更讨厌它作为用户前端的平台。如果我有一个选择,我会在昨天逃避它。 :-)但是,我必须承认,这个版本控件加载项的存在是使我们的旧Access + SQLServer项目的维护或多或少可以容忍的少数事情之一。 : - ))

答案 2 :(得分:9)

除了what I already said here之外,我还要补充说整个系统运行良好。对于由3名程序员组成的团队,比较过程每周不到30分钟。所以让我们稍微描述一下。

我们基本上有2个版本的Access程序:

“开发者版本”,其中包含所有内容。

我们每个人都开始使用相同版本的开发人员版本。当每个修改或添加部分代码时,我们必须定期运行一些比较例程。为此,我们有一个对象导出例程到一个常见的“比较”文件夹。将对象(例如模块)导出为文本文件(saveAsText命令,不使用表,请参阅下文),它将与文件夹中现有的等效文本文件进行比较。如果文件相同,则不会导出文件。如果文件不同,则使用开发人员的名称导出新模块作为文件名的添加(如果存在modQueries.txt,则创建modQueries_philippe.txt ...)。当然,如果文件夹中没有等效的.txt文件,它将在首次导出时创建。

在期间结束时,我们会在文件夹中输入以下文件

  1. modQueries.txt,是模块的第一个“原始”,最后一个通用版本
  2. modQueries_Philippe.txt,有Philippe的修改
  3. modQueries_Denise.txt,使用Denise的修改
  4. 由于该模块未被其他开发人员修改,因此其导出不会导致创建特定的modQueries_developersName.txt文件
  5. 如果出于任何原因Denise导出了她的模块很多次,只有最后一个版本在比较文件夹中。
  6. 然后我们可以比较(使用“文本文件”比较器)不同的版本并创建模块的“更新”版本。我们有一个屏幕给我们比较文件夹中的对象数量,每个对象的版本号,甚至可以直接从开发人员的界面打开文件比较器(我们使用“文件比较工具”,它有一个命令 - 行模式,然后可以直接从Access启动。

    表单比较问题非常特殊,因为我们的一个规则是在表单中没有特定的代码(please see here for more details)。然后表单仅用于显示,因此通常我们甚至不比较它们。我们只需要确保每个人都只有一个人更新(这是非常合乎逻辑的)。

    表比较问题(我们有本地表)只能在mdb文件之间进行。当我们为每个模块导出一个文本文件时,我们还会为每个表导出一个mdb文件。我们有一个小例程,允许我们在结构级别或记录级别识别表差异。

    在每个比较过程之后,子程序将使用比较文件夹中可用的所有对象,并从头开始创建 全新的干净mdb文件 。这是新开发者的版本。然后,每个开发人员都可以将其复制到他的计算机上并继续他的工作。

    开发人员的版本没有数字,但包含最后一个客户端版本号。

    具有有限内容的客户端版本自动分发给用户

    每个开发人员都可以为最终用户构建“客户端”mdb。这个mdb是从头开始创建的,其方式与开发人员的版本非常相似,但并不是所有对象都是导出的。某些特定开关已关闭(特殊键,访问代码等)。此mdb包含版本号作为属性。版本号用于构建mdb文件的名称。

    在生产时,此mdb文件已压缩并放置在特定的“分发”文件夹中。每次用户启动应用程序时,它都会自动检查此文件夹以查看是否有新版本可用。如果是,则从分发文件夹更新客户端mdb文件,然后重新启动应用程序。

    此分发文件夹在夜间与我们的海外代理商一起复制。然后,国外用户可以在第二天安装新版本。

答案 3 :(得分:6)

按照Yarik提供的指示,我们决定继续使用Access Add-in Source Code Control开发,使用PushOk软件SVN SCC API PluginSubversion。该堆栈为我们提供了无缝的Access集成,完全备份和恢复以及开放版本控制系统。

我们必须安装hotfix to Access 2003,并确保default database file type matched our database file type能够正常运行。

我们将继续根据我们的调查结果更新此答案。

答案 4 :(得分:1)

答案 5 :(得分:0)

听起来像是一个非常痛苦的团队发展方式。如果您有任何移植到VS2008等环境的选项,那将是我的建议。

没有简单的方法可以在团队中使用Access,甚至版本控制也可能有点棘手。