如何在 Access 中维护对拆分数据库的更新

How to maintain updates to a split database in Access

过去几天我一直在研究这个问题,因为我准备用我的第一个使用拆分数据库的系统交付 3 个阶段中的第一个阶段。我需要您的建议,因为我还没有找到足够的信息来做出完整的决定。

目前我正在开发一个未拆分的数据库。当我在现场拆分它时,我会复制两个部分,但在第 2 阶段我如何处理它们?

我想在重新链接 table 之后(因为我已经有效地移动了后端),我现在将它们设为我的开发版本,这意味着我不再使用未拆分的数据库。这是正确的做法吗?

关于将第 2 阶段上线,我认为除了手动将 table 更新应用到实时后端(一旦备份)之外,我别无选择。对于实时前端,我是将其替换为我的开发前端然后重新链接 table 还是将更改导出到实时前端?我想我可以根据 changing/new 的对象数量来做。那正确吗?然后我会复制并将它们作为我的第 3 阶段开发版本。

最后在开发中,我有表单和报告模板以及测试表单、报告和查询,这些在现场不需要,所以我为每个部署删除它们,然后将它们全部添加回新的开发前端或只是把他们活?通常我会把它们取出来,但它们太多了,我不知道有什么快速的方法可以把它们加回去,所以你会怎么做?

我的问题主要是从风险的角度提出的——哪些步骤最能降低现场出现问题的风险。

更新: 对于那些正在寻找这方面答案的人,除了下面的精彩回复外,我还发现以下内容可能也有帮助:

为了降低风险: 你应该有你的开发版本,实时测试版本和实时版本。 你正在开发开发 客户测试测试中的更改(使用测试数据) 之后你搬去住

为了从开发转移到测试,我创建了一个 update/migration 脚本。 在此脚本中包含需要在 back-end 上完成的所有更改。 我使用脚本来创建测试版本,然后我可以检查它是否正常工作。 如果有我无法在我的脚本中反映的数据库更改(技能不足或来自数据库的限制),我将它们添加到我的清单中。

我正在使用版本控制来查看开发过程中的更改并将模块、查询等导入新版本。

前端更新是通过导入最新版本完成的(没有不需要的表格/报告)。

At the moment I'm working in dev on an unsplit database. W

不要,一个非常糟糕的主意。这是如何工作的?

嗯,可以肯定的是,在开始时,您正在构建大量新的 table,改变关系,并以高发展速度构建 table。

所以,在这个时间点,你可以发展un-split。

一段时间后您会发现创建新 tables 的速率(和需要),并更改所谓的“数据库模式”平静下来。

此时您仍在开发中 - 尚未部署。

那么,在这个点附近的某个地方?你想分裂。你真的很想这样做。

这有很多原因,但有几个是:

while a split vs non split is "very similar", they are not the same!
Thus, you can't and don't want to develop code that NOT really tested
as to HOW the code will run in the real world

因此,许多问题可能会在 运行 拆分时发生变化或在开发过程中突然出现。所以一些命令(例如 seek())不起作用,并且可能会出现一些其他问题。你不想开发一整周,然后拆分,现在发现代码中有 20 个难以修复的错误。因此,通过尽快拆分开发,那么出现的任何和所有问题都会在您开发过程中被看到,因此可以在那个时间点及时修复、查看和处理此类问题。更糟糕的是写一堆代码,准备部署,然后发现新的错误。

接下来: 拥有一个拆分系统很棒,因为假设客户可能会让您远程访问他们的系统。您可以下载一份他们的数据副本,re-link 您的 table 从您的“测试数据”指向实际生产数据。

或者说您在现场开发。您可能想要测试一些危险的删除代码或修改数据的代码。因此,您不能冒险处理生产数据,所以现在您 re-link 并指向您的测试后端。因此,此设置允许您测试代码,但对数据库副本进行更重要的测试非常容易。

而且它还允许您进行异地开发。您可以为他们的系统获取最新的前端,也许可以获取他们最新的数据文件,也许不能。但您现在可以轻松简单地更改您的应用程序 运行 所使用的数据库。

另一个大问题?假设您在现场工作,并在网络文件夹中拥有他们的测试数据库。您编写一些代码,测试新报告。您会发现它 运行 慢如乌龟。你检查你的代码,也许添加一些索引,然后繁荣! - 你的报告现在 运行 很好。

如果您测试 un-split,那么可能会突然出现大量性能问题,但在开发周期中看不到。再一次,您不想开发数周或其他时间,拆分,现在发现一大堆表格和代码 运行 真的很慢。

那么,这里的目标、想法是什么?

您想尽快分裂吗?

多久?

嗯,这是只有你才能知道的事情之一!!!

正如我所说,在开发开始时,当然,开始 un-split。

一旦table设计得相当扎实,就可以拆分了。然后你总是发展成分裂(上面列出的原因是非常短的名单——还有更多的原因)。

现在,问题当然是拆分?假设您想向 table?

添加一个新列

好吧,这是更多的工作,因为现在对数据模式的任何和所有更改都在后端完成。因此,您必须关闭前端 (FE),打开后端,然后使用 table 设计器添加该一列。 (或者可能更改或设置一些 table 之间的新关系。或者可能添加新的 table)。

这是一项“多一点”的工作,因为现在您关闭了 BE,并打开了 FE,现在您必须 re-link tables。如果您向 BE 添加了新的 tables,那么您必须添加 that/those 个新的 table 链接。

因为这个“舞蹈”是额外的工作,这就是为什么你要尽可能长时间地等待拆分。正如我所说,你“只知道”分裂的时间到了。 (当 table 和架构 tables 更改稳定到低变化率时)。由于现在关于 table 更改的更改率很低,因此每次您想要更改 table 结构时都必须执行上述操作既不费力也不痛苦。

事实上,想想您购买的任何程序?它有一个应用程序部分,然后是一个数据文件部分。实际上,一旦你分开,你就有了相同的两个部分,事实上在我写的一些应用程序中,它们被允许使用“不同的”后端 - 与你启动应用程序的任何其他应用程序不同,然后选择要使用的数据文件。

那么,异地开发怎么样?嗯,这真的很难,因为你有自己的 FE 和 BE。

如果您必须对 BE 进行更改? 我打开一份工作文件。如果我添加一个新列来表示 tblCusotmers?

然后我输入这个:

Add new column TaxRate, Currency, to table tblCustomers

因此,您建立了更改“日志”。现在,当您前往客户现场并想要推出和部署新的 FE 时?出色地您必须首先打开他们的 BE,并对他们的生产 BE 数据库进行上述更改。

现在在某些情况下,我不可能在现场的哪些地方? (事实上​​ ,我有一个自动更新系统来自动推出我的软件的新版本 - 它会自动从互联网下载。在这种情况下?我必须在启动时在 FE 中编写代码使用 VBA 代码来对数据进行更改 tables。这可能真的很难做到,但是有可能。我只推荐 plane jane word 文档,你可以跟踪你的更改。

以上就是这个开发过程的大致过程。

因为你将不得不 re-link table 吗?然后几乎每个人都用谷歌搜索了 VBA table re-link 例程。你想要那个,因为拥有这样的代码比每次使用链接的 table 管理器要容易得多。而且我们甚至经常在FE中有一个table保存BE服务器位置,启动时会检查,如果文件位置不匹配,我们会启动re-link代码。

这样,您就可以将应用程序部署到不同的站点,并使其自动运行 re-link。另一种方法是在每台计算机上与 FE 相同的位置放置一个简单的文本文件,并在启动时读取带有 BE 位置的文本文件 - 如果需要,还可以读取 re-link。

因此,角色出新 FE 的典型过程(放置在每个工作站上 - 不要违反此规则!!!)。

所以,我 point/relink 我的前端生产 BE。然后我编译成 accDE,然后将新编译的 FE 部署到所有工作站。事实上,我在 VBA 中有一些代码在启动时比较版本号,如果版本号较低,那么 VBA 代码将复制文件夹中的下一个 FE。

如果您有 2-4 个用户,这可能不是什么大问题。但是,如果您有两个站点,每个站点有 35 个用户,那么您需要找出一种自动化方法。

但是,不要延长跳转到拆分开发周期的时间,因为出于所有实际目的,您确实必须在拆分环境中进行开发。所以,对于第一部分,你可以开发un-split。但是,一旦你分裂 - 就是这样,从那一点 on-wards,你将发展为分裂。有很多好处,但从开发人员的角度来看,它也是非常标准的方法。

因此,您必须快速掌握链接的 table 管理器规则,然后非常考虑添加一些 re-link 代码,因为您希望轻松地指向不同的后端 -包括在部署时。

因此,作为一般规则,您应该将您的 FE 视为一个 .exe 程序,对于新版本的推出,是的,您在每个工作站上复制(覆盖)他们现有的 FE。如前所述,在大多数情况下,它应该是编译的 accDE,而不是 FE 的 un-compiledaccDB。