代码之家  ›  专栏  ›  技术社区  ›  yukondude

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

  •  12
  • yukondude  · 技术社区  · 16 年前

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

    我使用它的 Migration Toolkit (顺便说一句,它工作得很好)并设置通过ODBC链接到这些表的访问权限。

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

    • MS Access中的自动编号字段必须是主键,否则在MySQL中只能作为整数列结束(当然,为什么不是PK?)
    • 这些表被迁移到MySQL的InnoDB表类型,但访问关系没有成为MySQL外键约束。

    一旦数据库被使用,我能预料到任何其他问题吗?特别是当两个用户在同一个表中工作时?

    7 回复  |  直到 16 年前
        1
  •  16
  •   2 revs<br/>Pawel Wawrzyniak&#13;    15 年前

    如果您想有效地使用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 edition(与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文件。

    • 对于日常工作-使用带有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-frontend,MDB-backend),最后发展到:MS Access前端(MDE)和“严肃”数据库后端(主要是MS SQL Server和MySQL)。同样重要的是,您可以始终使用MS Access解决方案作为工作原型—您已经准备好在数据库中使用后端(假设为MySQL),并且您可以将前端改写为您选择的技术(web解决方案?可能是桌面C#应用程序—您需要的!)。

    我希望我能帮助你们中的一些人考虑MS Access的工作。

    沃辛 http://dcserwis.pl

        2
  •  15
  •   onnodb    16 年前

    我有一个类似的应用程序:从MS Access前端到MySQL后端。这是一个巨大的痛苦,我最终写了一个Win32前端。在我的脑海中,我遇到了以下问题:

    • ODBC链接的开发似乎早就停止了。到处都有各种不同的版本——非常混乱。ODBC链接不支持Unicode/UTF8,我还记得它还存在其他问题(尽管有些问题可以通过仔细配置来解决)。
    • 您可能希望手动调整db模式,使其与MS Access兼容。我看到您已经找到了所需的代理键(即int主键):-)
    • 您应该记住,您可能需要使用传递查询来对MySQL数据库执行更复杂的SQL操作。
    • 使用大量VBA时要小心,因为这会损坏前端文件。定期压缩数据库(使用主菜单、工具|数据库实用程序|压缩和恢复,或者类似的东西——我使用的是荷兰语版本)并制作 太多了 备份的数量是必需的。
    • Access坚持将布尔值存储为0/-1。IMHO,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
  •  3
  •   Marc Gravell    15 年前

    加雷思·辛普森认为:

    如果你把 共享驱动器上的.mdb。

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

    我相信推荐的最大值 访问的并发用户数为5,但

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

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

        4
  •  2
  •   lomaxx    16 年前

    我知道这并不能直接回答你的问题,但这可能值得一看 SQL Server 2005 migration tool for Access

        5
  •  2
  •       16 年前

    别忘了在每条记录上打上时间/日期戳。有时,ms access会认为“其他用户已更改或删除了记录”,因此不允许您进行更改!我好不容易才发现这一点。

        6
  •  1
  •   BIBD    16 年前

    一般来说,这取决于:)

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

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

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

        7
  •  0
  •   Gareth Simpson    16 年前

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

    我相信建议的最大并发访问用户数是5,但有时我会把它推过去,而且从来没有失败过。