我目前在一个 4 人团队中负责开发和维护旧版 MS Access 应用程序。

该应用程序相当大,有数百个表单、报告、查询和表格。

目前,我们将前端分为大约 7 个 mde 组件,每个组件本质上都是一个独立的应用程序,并由一个公共前端连接起来,而该前端本质上只是一个菜单 GUI。

我们使用链接表将此前端连接到 MS Access 后端,并在代码本身中使用 OpenDatabase(C:\access.mdb) 调用。该应用程序已经存在了一段时间,因此使用 DAO 连接到 Access 97 后端。

这意味着应用程序的每个用户都有自己的数据库本地副本以进行更改。我们有一个精心控制变更的环境,确保一次只有一个人可以处理数据,他们必须在将主数据库传递给下一个人之前验证所有更改。

温和地说,这种变更控制环境令人窒息,很快我们将需要在一段时间内进行更多数据更改,这使得单用户访问变得不可行。

因此,我们需要转向多用户访问,但我所说的多用户仅指大约 4 人。这些人可能不在同一办公室,因此需要某种形式的远程数据库连接。

整个应用程序可能会在一两年内重新设计,将前端和后端都从 MS Access 移走。但是,我们需要尽快进行多用户访问。

那么,实现多用户幸福的最快途径是什么?

我们正在考虑的建议包括:

  • 设置 VPN,以便 MS Access 相信它正在访问常规网络驱动器。这看起来会很慢,而且我不确定 VPN 是否足够可靠,但这只是我们追求的临时解决方案。
  • 将 mdb 后端转换为供多用户远程使用的东西,例如 SQL Server。我们只是不知道如何快速、轻松地完成此操作(例如,我们依赖于字段验证规则)。我们可能还必须转换回 MS Access 格式,因为其他应用程序接受相同的 .mdb 文件作为数据输入。
  • 几乎任何事情都可以由一两个人在几个月内完成。

编辑:回应以下评论。

应用程序处理的数据是高度安全的关键数据。它很少发生变化,并且在导出之前必须进行验证以表明不存在逻辑错误。事实上,数据比应用程序本身受到更严格的限制!

这些数据以非平凡的方式相互关联。因此,由于复杂的业务逻辑,对一个表中的记录进行更改可能会使另一表中的记录失效。因此,目前,mdb 数据文件的一份副本被指定为主数据库。任何时候只有一个人拥有主人。如果您想对其进行更改,您必须从当前拥有该数据库的人那里获取该数据库。这通常不是问题,因为数据变化很少,因此有足够的时间发生这种情况。

然而,一个巨大的变化即将到来,我们没有足够的时间以这种方式工作。我们必须让多人同时处理数据。现在我知道您可以在网络驱动器上共享 mdb 文件,并让同一办公室的多个人处理该文件,风险很小或没有风险,但我们需要来自不同公司的人员同时处理数据。据我了解,设置 VPN 来共享数据是一个糟糕的计划。

我相信我们必须将后端从 MS Access 更改为 SQL Server 之类的东西。但是以这种方式转换模式有多容易呢?SQL Server 中如何表示 MS Access 表验证规则?

有帮助吗?

解决方案

作为一般规则,该框的访问权限是作为文件共享访问多用户。这意味着您可以获取后端数据库(mdb 文件)并将其放在服务器上的共享文件夹中。这将允许您办公室中的几个人同时运行该应用程序。然而,这意味着我们正在谈论典型的办公室局域网。当您开始谈论远程连接、VPN 和广域网 (WANS) 时,使用访问作为文件共享并不稳定。

因此,如果典型的办公网络环境中只有三四个人,那么根据应用程序,很可能您可以简单地将后端放在服务器上的共享文件夹上,并继续将所有前端部署在每个服务器上计算机,并且它们链接到共享文件夹上的那个数据库后端 (mdb) 文件。MS access 通过这种方式工作得很好。

然而,对于某种 VPN 或 WAN,一种可能的解决方案是将后端 mdb 文件移动到 SQL Server,并继续使用所有表单、报告等。从您当前的应用程序(当您执行此操作时,您的大多数应用程序将像以前一样运行)。

另一项值得考虑的伟大技术是瘦客户端,或所谓的终端服务。终端服务只是远程桌面系统的一个精美版本。TS 允许人们在相当有限的带宽上从远程位置运行和使用该应用程序。

但是,如果您谈论的是典型办公室 LAN 上的三到四个用户,那么您的应用程序很可能只需进行很少的修改即可运行,您只需将后端数据库文件移动到服务器上某处的共享文件夹即可。不过,我不能强调,只有当所有人都在同一个小型办公室 LAN 上,而不是某种远程连接或 WAN/VPN 时,这才有效。因此,在 WAN/VPN 的情况下,请使用终端服务,或者考虑将后端移至 SQL Server,并继续按原样使用应用程序前端。


编辑-更多信息:好的,有了更多信息,我们就可以继续前进了。如前所述,ms-access 是开箱即用的多用户。您需要来自不同地点的人员来处理这些数据。因此,这意味着无论存在不同的位置问题,您的应用程序都必须设置为具有多用户功能。一旦您为多用户设置了应用程序,那么您就可以解决允许人们从不同位置使用该软件的问题。

这与我们管理公司圣诞晚会的东西没有什么不同。如果我们的设计是在圣诞晚会后删除整个文件以重新开始明年的圣诞晚会,那么我们仍然可以允许该应用程序多次使用。然而,由于您的设计,您不能同时举办多个圣诞派对。因此,在这种情况下,应用程序并不是多用户的。在这种类型的场景中,实际上可能会添加一个名为圣诞晚会年份表的新表。然后,可以将应用程序中的所有表作为子表关联到该主表。这样,您就可以针对此设计同时举办多个圣诞派对。然后,当您启动应用程序时,系统会提示用户某种类型的列表,以选择您想要参加的圣诞派对。

因此,不要混淆上述两个单独的问题。问终端服务如何允许应用程序成为多用户是没有意义的,它没有做这样的事情。TS 的作用是允许您采用已经是多用户的应用程序,并允许远程位置的人们使用该应用程序。因此,TS 是一个允许人们在互联网上的任何远程位置运行和使用应用程序的系统。然而,您的设计仍然会决定您的应用程序是否允许我们同时举办多个圣诞派对。

所以你不要让MS access成为多用户,MS access就是开箱即用的多用户,你不需要做任何事情,除了采用一些技术让不同地点的用户使用该应用程序。这就是 TS 所做的事情,SQL Server 也可以为您做的事情。

如果您的设计只允许一个项目,那么我们可以允许来自世界不同地点的多个用户使用同一个应用程序,但由于应用程序的设计限制,他们只能拥有一个活动项目。

因此,所有表更新逻辑等都可以像以前一样工作。您只需问一下,该应用程序现在是否允许一个用户退出该应用程序,而另一用户进入该应用程序并执行其工作?假设办公室里只有一台独立计算机。不同的员工能否在一天中坐下来,为每个单独的项目使用一台计算机和一个具有一个后端的应用程序?

因此,使用 SQL Server 或终端服务并不会让您的应用程序比现在更多(或更少)多用户。这些技术肯定可以增加可以同时使用该应用程序的用户数量。

所以MS access现在是多用户的。然而,SQL Server 或 TS 所做的是在用户如何远程连接到该应用程序方面提供更大的灵活性。

其他提示

IMO,无论您考虑什么其他解决方案,您肯定需要将数据库转换为多用户服务器。有一个升迁向导应该会很有用(http://support.microsoft.com/kb/237980),您可能会遇到 Access 允许而 SQL Server 不允许的项目,但大多数情况下应该是轻松的。您可以将本地访问副本指向使用这个新的数据源(例如通过 ODBC),我相信它应该以几乎相同的方式工作。已经很多年没有这样做了,不知道这些字段验证规则(它们不是仍然在表单上吗?)会变成什么样子。您可以下载 SQL Server 的试用版,并在一小时内完成此操作,以了解需要付出多少努力。

像往常一样,阿尔伯特·卡拉尔(Albert Kallal)为您提供了出色的答案。

如果您想考虑升级到 SQL Server,可以使用 SQL Server 组中的一个工具。用于访问的 SQL Server 迁移助手(SSMA 访问)http://www.microsoft.com/sql/solutions/migration/access/default.mspx 这比 Access 升迁向导更好。

另请参阅我对 Microsoft Access Tips 页面上的 SQL Server 升迁的随机想法: http://www.granite.ab.ca/access/sqlserverupsizing.htm

正如您从发布的评论中看到的那样,您的组织使用的术语“变更控制”是非传统的并且相当有趣。尽管我可以看到几年前有人试图找出远程办公室更改数据的解决方案,但会提出这个解决方案。我也能看出这会是多么令人窒息。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top