14

两个用户想要共享同一个数据库,最初是用 MS Access 编写的,而不会因单个 MDB 文件而相互冲突。

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

到目前为止,我遇到了以下问题:

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

一旦数据库在使用中,我可以期待任何其他问题吗?特别是当两个用户都在同一张桌子上工作时?

4

7 回答 7

16

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

如果您想有效地使用 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 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 应用程序分发给最终用户的唯一合理形式。

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

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

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

我可以告诉你,我正在使用面向 MySQL 后端的非常先进的 MS Access,我非常满意(作为维护此应用程序的开发人员)。我的朋友们,用户也很满意,因为他们对 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 进行工作。

问候, Wawrzyn http://dcserwis.pl

于 2009-09-12T13:27:38.617 回答
15

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

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

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

否则,您可能还需要考虑 MS SQL。我没有这方面的经验,但我认为它与 MS Access 一起工作得更好!

于 2008-08-12T20:02:41.557 回答
3

加雷斯·辛普森认为:

如果只有两个用户,那么如果您将 .mdb 放在共享驱动器上,Access 应该就可以了。

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

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

我相信 Access 的推荐最大并发用户数是 5,但有时我已经将它推到了这一点,并且永远不会被卡住。

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

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

于 2008-09-15T23:06:32.693 回答
2

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

于 2008-08-08T12:35:16.377 回答
2

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

于 2009-05-15T04:34:23.507 回答
1

一般来说,这取决于:)

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

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

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

于 2008-08-12T14:47:16.110 回答
0

如果只有两个用户,那么如果您将 .mdb 放在共享驱动器上,Access 应该就可以了。

你有没有先尝试过,而不是仅仅假设它会是一个问题。

我相信 Access 的推荐最大并发用户数是 5,但有时我已经将它推到了这一点,并且永远不会被卡住。

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

于 2008-08-11T16:01:53.103 回答