两个用户希望共享最初用 MS Access 编写的同一个数据库,而又不想在单个 MDB 文件上相互冲突。

我使用其将表从简单的 MS Access 数据库移动到 MySQL 迁移工具包 (顺便说一句,效果很好)并设置 Access 通过 ODBC 链接到这些表。

到目前为止,我遇到了以下情况:

  • 如果没有主键,您无法在表中插入/更新/删除行(这并不奇怪)。
  • MS Access 中的自动编号字段必须是主键,否则它们最终将成为 MySQL 中的整数列(当然,为什么它不是 PK?)
  • 表已迁移到 MySQL 的 InnoDB 表类型,但访问关系并未成为 MySQL 外键约束。

使用数据库后,我还会遇到其他问题吗?特别是当两个用户在同一张表中工作时?

有帮助吗?

解决方案

我有一个同样有效的应用程序:MS Access 前端到 MySQL 后端。这是一个巨大的痛苦,所以我最终编写了一个 Win32 前端。从我的头脑中,我遇到了以下问题:

  • ODBC 链接的开发似乎早已停止。有各种各样不同的版本——非常令人困惑。ODBC 链接不支持 Unicode/UTF8,我记得它还存在其他问题(尽管有些问题可以通过仔细配置来克服)。
  • 您可能需要手动调整数据库架构以使其与 MS Access 兼容。我看到您已经找到了所需的代理键(即 int 主键):-)
  • 您应该记住,您可能需要使用传递查询来对 MySQL 数据库进行更复杂的 SQL 操作。
  • 使用大量 VBA 时要小心,因为这可能会损坏您的前端文件。定期压缩数据库(使用主菜单,工具|数据库实用程序|压缩和恢复,或类似的东西——我使用的是荷兰语版本)并制作 地段 的备份是必要的。
  • 访问往往会导致大量网络流量。就像,真的很大很多。我一直无法找到解决方案。如果您想密切关注,建议使用网络监视器!
  • Access 坚持将布尔值存储为 0/-1。恕我直言,0/+1 更有意义,我相信这也是 MySQL 中默认的处理方式。这不是一个大问题,但如果您的复选框不起作用,您一定应该检查一下。

一种可能的替代方案是将后端(包含数据)放在共享驱动器上。我记得这在帮助中也有详细记录。您可能想看看 关于分为前端和后端的一些一般建议启动时自动重新连接到后端的代码;我还可以向您发送更多示例代码,或将其发布在这里。

否则,您可能还想考虑 MS SQL。我没有这方面的经验,但我认为它与 MS Access 配合使用效果更好!

其他提示

我知道这个话题不太新鲜,但只是一些额外的解释:

如果您想有效地使用 MS Access,特别是对于更大的多用户数据库,请执行以下操作:

  • 将您的 MDB 拆分为前端应用程序和后端(仅数据)文件 - 然后您将拥有两个单独的 MDB 文件。

  • 将所有具有数据和结构的表迁移到外部数据库中。有可能:MySQL(运行良好,没有数据库大小限制,需要更多技能,因为它不是 MS 技术,但在许多情况下它是一个不错的选择 - 此外,您可以使用更多 RAM 和额外的 CPU 来扩展后端,所以一切都取决于您的需求和硬件能力);Oracle(如果您有足够的钱或某种公司许可证)或 Oracle 10g XE(如果这不是问题,数据库大小限制为 4 GB,并且始终使用 1 GB RAM 和 1 个 CPU), MS SQL Server 2008(在所有情况下都拥有 MS Access 前端和 MS SQL Server 后端,这是一对很棒的组合,但您必须支付许可证费用!- 优点是:紧密集成,两种技术均来自同一供应商;MS SQL Server 很容易同时维护一个有效的版本)或 Express 版本(与 Oracle XE 的情况相同 - 几乎相同的限制)。

  • 重新链接您的 MS Access 前端与后端数据库。如果您选择 MS SQL Server 作为后端,那么就像使用 MS Access 中的向导一样简单。对于 MySQL - 您必须使用 ODBC 驱动程序(它很简单并且工作得很好)。对于 Oracle - 请不要使用 Microsoft 的 ODBC 驱动程序。Oracle 中的这些将更好地完成工作(您可以比较通过 Oracle ODBC 和 MS Oracle ODBC 驱动程序从 MS Access 到 Oracle 执行 SQL 查询所需的时间)。此时,您将拥有可靠的数据库后端和功能齐全的 MS Access 前端 - MDB 文件。

  • 将您的 MDB 前端编译为 MDE - 它会给您带来很大的速度。此外,它是将 MS Access 应用程序分发给最终用户的唯一合理形式。

  • 对于日常工作 - 将 MDE 文件与 MS Access 前端一起使用。对于进一步的 MS Access 前端开发,请使用 MDB 文件。

  • 不要使用编写糟糕的 ActiveX 组件来增强 MS Access 前端功能。最好自己写或购买合适的。

  • 不要相信 MS Access 存在很多问题的神话 - 这是一个很棒的产品,可以在很多情况下提供帮助。问题是很多人认为它是一个玩具或者 MS Access 通常很简单。通常他们自己以及缺乏知识和经验会产生很多错误和问题。要成功使用 MS Access,了解该工具非常重要 - 与任何其他技术一样,这是相同的规则。

我可以告诉你,我正在使用相当先进的 MS Access 前端到 MySQL 后端,我非常满意(作为维护此应用程序的开发人员)。我的朋友们,用户也很满意,因为他们对 GUI(前端)、速度(MySQL)感到非常舒服,他们在记录锁定或数据库性能方面没有任何问题。

此外,大量阅读有关良好实践和其他人的经验也很重要。我想说,在很多情况下,MS Access 是一个很好的解决方案。我知道很多专用的定制系统,它们最初是作为私有 MS Access 数据库(MDB 文件)形式的实验,然后演变为:拆分 MS Access(MDE - 前端,MDB - 后端),最后到:MS Access 前端 (MDE) 和“严肃的”数据库后端(主要是 MS SQL Server 和 MySQL)。同样重要的是,您始终可以使用 MS Access 解决方案作为工作原型 - 您已准备好在数据库中使用后端(MySQL - 让我们假设),并且可以将前端重写为您选择的技术(Web 解决方案?也许是桌面 C# 应用程序 - 您需要的!)。

我希望我对考虑使用 MS Access 进行工作的一些人有所帮助。

问候,Wawrzynhttp://dcserwis.pl

加雷斯·辛普森认为:

如果只有两个用户,则如果将.MDB放在共享驱动器上,则访问应该很好。

呃没有。对于任何多用户 Access 应用程序,每个用户都不应拥有专用的前端副本。这意味着每个用户的工作站上都​​应该有一个 MDB。为什么?因为前端的对象不能很好地共享(不像 Jet 数据表那样好,尽管在这个场景中没有任何使用 MySQL 作为后端的对象)。

加雷斯·辛普森继续说道:

我相信推荐的Max并发用户访问是5,但有时我将其推开了,并且永远不会放弃。

不,这是完全错误的。MDB 用户的理论限制为 255。当然,这是不现实的,因为一旦您达到大约 20 个用户,您就必须仔细地对 Access 应用程序进行编程才能正常工作(尽管您需要在 Access-to-Jet 应用程序中执行的操作与您在 Access-to-Jet 应用程序中执行的操作相同)使任何服务器数据库应用程序高效,例如检索最小的可用数据集)。

在这种情况下,由于每个用户都应该拥有前端 MDB 的单独副本,因此 Access/Jet 的多用户限制根本不相关。

我知道这并不能直接回答你的问题,但可能值得一看 用于 Access 的 SQL Server 2005 迁移工具. 。我从未使用过该工具,但可能值得与 SQL Server 2005 Express Edition 一起使用,看看是否存在与 MySQL 相同的问题

不要忘记在每条记录上添加某种类型的时间/日期戳。有时ms access会认为“另一个用户已更改或删除了该记录”并且不允许您进行更改!我发现这很困难。

一般来说,这取决于:)

当应用程序端刚刚通过表单更新数据时,我没有遇到很多问题。当同一行被多个用户更新时,您可能会收到警告/错误;但 Access 似乎一直在不断更新其实时记录集。

如果 Alice 已经在使用记录 365,并且 Bob 更新了它,然后 Alice 尝试用她的更改来更新它,则可能会出现问题。我记得,爱丽丝会收到一条神秘的错误消息。如果您捕获这些错误并至少给他们一个更友好的错误消息,那么对用户来说会更容易。

当我通过 RecordSets 编辑 VB 代码中的记录时,尤其是在表单上编辑相同数据时,遇到了更多问题。这不一定是多用户问题;但是,您的情况几乎相同,因为您有一个用户与同一数据有多个连接。

如果只有两个用户,则将 .mdb 放在共享驱动器上,Access 应该可以正常工作。

您是否先尝试过,而不是仅仅假设这会是一个问题。

我相信建议的 Access 最大并发用户数是 5,但有时我会超过这个值,但从未出现过问题。

另一方面,我曾经在单用户环境(我)中使用 Access 作为 MySQL 的前端。这是一次非常不愉快的体验,我无法想象如果有两个用户的话会变得更好。

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