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

时间:2008-08-08 12:30:49

标签: mysql database ms-access

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

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

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

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

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

7 个答案:

答案 0 :(得分: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 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应用程序的唯一合理形式。

  • 用于日常工作 - 使用带有MS Access前端的MDE文件。对于进一步的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。

此致 Wawrzyn http://dcserwis.pl

答案 1 :(得分:15)

我有一个同样有效的应用程序:MySQL后端的MS Access前端。这是一个巨大的痛苦,我最终写了一个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 backendcode that automatically reconnects to the backend on startup;我还可以向您发送更多示例代码,或在此处发布。

否则,您可能还需要考虑MS SQL。我没有相关的经验,但我认为它与MS Access一起使用得更好!

答案 2 :(得分:3)

Gareth Simpson认为:

  

如果只有两个用户,那么Access   如果你把它放在一起应该做得很好   .mdb在共享驱动器上。

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

Gareth Simpson继续说道:

  

我相信推荐的最大值   Access的并发用户是5但是   有时我会把它推过去   永远不会失败。

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

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

答案 3 :(得分:2)

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

答案 4 :(得分:2)

别忘了在每条记录上加上一些类型的时间/日期标记。有时ms访问会认为“其他用户已更改或删除了记录”,并且不允许您进行更改!我发现这很困难。

答案 5 :(得分:1)

一般来说,这取决于:)

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

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

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

答案 6 :(得分:0)

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

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

我认为Access的推荐最大并发用户数是5,但有时候我已将其推过去并且永远不会失败。

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