使用 MS Access 作为 MySQL 数据库后端的前端的问题?

Posted

技术标签:

【中文标题】使用 MS Access 作为 MySQL 数据库后端的前端的问题?【英文标题】:Issues using MS Access as a front-end to a MySQL database back-end? 【发布时间】:2010-09-05 13:43:22 【问题描述】:

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

我使用它的Migration Toolkit 将表从一个简单的 MS Access 数据库移动到 mysql(顺便说一句,这很好用)并设置 Access 以通过 ODBC 链接到这些表。

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

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

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

【问题讨论】:

【参考方案1】:

我知道这个话题不太新鲜,只是一些补充说明:

如果您想有效地使用 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,了解此工具非常重要 - 这是相同的规则,与其他任何其他技术一样。

我可以告诉你,我正在使用面向 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 的一些人有所帮助。

问候, 瓦维津 http://dcserwis.pl

【讨论】:

【参考方案2】:

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

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

一种可能的替代方法是将后端(包含数据)放在共享驱动器上。我记得这是有据可查的,也在帮助中。您可能想看看some general advice on splitting into a frontend and a backend 和code that automatically reconnects to the backend on startup;我还可以向您发送更多示例代码,或在此处发布。

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

【讨论】:

【参考方案3】:

加雷斯·辛普森认为:

如果只有两个用户,那么 Access 如果你把 .mdb 在共享驱动器上。

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

加雷斯·辛普森继续说:

我相信推荐的最大值 Access 的并发用户数为 5,但 有时我已经把它推过去了 并且永远不会松懈。

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

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

【讨论】:

【参考方案4】:

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

【讨论】:

【参考方案5】:

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

【讨论】:

【参考方案6】:

一般来说,这取决于:)

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

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

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

【讨论】:

【参考方案7】:

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

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

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

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

【讨论】:

以上是关于使用 MS Access 作为 MySQL 数据库后端的前端的问题?的主要内容,如果未能解决你的问题,请参考以下文章

拥有一个 MS Access 数据库作为 MySQL 的实时供稿

从 MS Access VBA 通过 ODBC 进行 MySQL 查询:ADODB 异步执行不起作用

对 MySQL 使用 MVC 应用程序和 MS Access 时记录被覆盖

需要连接到 MS Access 数据库并每 30 分钟自动将它们填充到 mysql 表中

如何使用 MYSQL 查询访问 Ms-Access 数据库

将 MySQL 转换为 MS Access