您是否建议在MS Access应用程序上与多个程序员一起工作?
我们的一个MS Access应用程序已经发展到一个程序员在请求的时间范围内无法再处理更改(错误修复)和新功能的数量.
我们正在尝试使用VBA中未记录的SaveAsText和LoadFromText过程引入版本控制,以便在此应用程序上进行协作.遗憾的是,由于校验和存储在每个表单文本文件中,因此我们已经遇到了将修改后的表单和报表加载回Access的问题.
在花时间构建导入/导出应用程序以将文本文件编译到Access数据库之前,我们希望听到您的建议.
我认为你应该不惜一切代价避开这条道路,并试图说服管理层进行重建.
吞下这是一个苦果,但这需要迟早重新开发,你只需要节省时间和金钱.
我们在MS Access 2000/2002/2003上使用微软自己的版本控制插件已有5年了,而且我记不起一个严重的问题了.这个加载项的可用性几乎不值得"B",但它必须比任何涉及手动或半手动导出/导入Access表单,模块等的特殊方法更方便.
我们一直在使用VSS作为版本控制系统.没有任何问题.但是,如果您有充分的理由避免使用VSS,则可能有以下选择:
我们使用的版本控制加载项不需要VSS.从理论上讲,它可以与任何实现Microsoft源代码控制接口(MSCCI)的版本控制系统一起使用.例如,当我们不得不让某人远程处理这个项目时,我们使用了SourceGear的SourceOffsite.访问版本控制加载项可以很好地使用这个第三方产品(不是没有一些怪癖,但足够好).因此,如果您喜欢的版本控制系统符合MSCCI,您可以尝试使用它.
既然微软拥有这个Team Foundation,显然还有其他选项可用于将MS Access与版本控制集成.但是,我们没有探索这条道路.本文可能是探索它的一个良好开端.
希望这会有所帮助.:-)
PS我不是MS Access的忠实粉丝.事实上,我更讨厌它作为用户前端的平台.如果我有一个选择,我会在昨天逃避它.:-)但是,我必须承认,这个版本控制加载项的存在是使我们的旧Access + SQLServer项目的维护或多或少可以容忍的少数事情之一.:-))
除了我在这里已经说过的内容之外,我还要补充说整个系统运行良好.对于由3名程序员组成的团队,比较过程每周不到30分钟.所以让我们稍微描述一下.
我们基本上有两个版本的Access程序:
我们每个人都开始使用相同版本的开发人员版本.当每个修改或添加部分代码时,我们必须定期运行一些比较例程.为此,我们有一个对象导出例程到一个常见的"比较"文件夹.将对象(例如模块)导出为文本文件(saveAsText命令,不使用表,请参阅下文),它将与文件夹中现有的等效文本文件进行比较.如果文件相同,则不会导出文件.如果文件不同,则使用开发人员的名称导出新模块作为文件名的添加(如果存在modQueries.txt,则创建modQueries_philippe.txt ...).当然,如果文件夹中没有等效的.txt文件,则会在首次导出时创建.
在期间结束时,我们将在我们的文件夹中包含以下文件
modQueries.txt,是模块的第一个"原始",最后一个通用版本
modQueries_Philippe.txt,有Philippe的修改
modQueries_Denise.txt,修改了Denise
由于该模块未被其他开发人员修改,因此其导出不会导致创建特定的modQueries_developersName.txt文件
如果由于任何原因Denise导出了她的模块很多次,只有最后一个版本在比较文件夹中.
然后我们可以比较(使用"文本文件"比较器)不同的版本并创建模块的"更新"版本.我们有一个屏幕给我们比较文件夹中的对象数量,每个对象的版本号,甚至可以直接从开发人员的界面打开文件比较器(我们使用"文件比较工具",它有一个命令 - 行模式,然后可以直接从Access启动.
表格比较问题非常特殊,因为我们的规则之一是在表格中没有特定的代码(请参阅此处了解更多详情).然后表单仅用于显示,因此通常我们甚至不比较它们.我们只需要确保每个人都只有一个人更新(这是非常合乎逻辑的).
表比较问题(我们有本地表)只能在mdb文件之间进行.当我们为每个模块导出一个文本文件时,我们还会为每个表导出一个mdb文件.我们有一个小例程,允许我们在结构级别或记录级别识别表差异.
在每个比较过程之后,子例程将使用比较文件夹中可用的所有对象,并从头开始创建一个全新的干净mdb文件.这是新开发者的版本.然后,每个开发人员都可以将其复制到计算机上并继续工作.
开发人员的版本没有数字,但包含最后一个客户端版本号.
每个开发人员都可以为最终用户构建"客户端"mdb.这个mdb是从头开始创建的,其方式与开发人员的版本非常相似,但不是所有对象都是导出的.某些特定开关已关闭(特殊键,访问代码等).此mdb包含版本号作为属性.版本号用于构建mdb文件的名称.
在生产时,此mdb文件被压缩并放置在特定的"分发"文件夹中.每次用户启动应用程序时,它都会自动检查此文件夹以查看是否有新版本可用.如果是,则从分发文件夹更新客户端mdb文件,并重新启动应用程序.
此分发文件夹在夜间与我们的海外代理商一起复制.然后,国外用户可以在第二天安装新版本.
按照Yarik提供的指示,我们决定继续使用Access Add-in源代码控制开发Access ,PushOk软件和Subversion的SVN SCC API插件.该堆栈为我们提供了无缝的Access集成,完全备份和恢复以及开放式版本控制系统.
我们必须为Access 2003安装一个修补程序,并确保默认数据库文件类型与我们的数据库文件类型匹配,以使其工作.
我们将继续根据调查结果更新此答案.