使用MS Access作为MySQL数据库后端的前端有问题吗?
两个用户希望共享最初用MS Access编写的同一个数据库,而不会在单个MDB文件上相互冲突。
我使用其迁移工具包(很有效)将表从简单的MS Access数据库移至MySQL,并设置了Access以通过ODBC链接到那些表。
到目前为止,我遇到了以下问题:
- 如果没有主键,就不能在表中插入/更新/删除行(这不足为奇)。
- MS Access中的AutoNumber字段必须是主键,否则它们将最终成为MySQL中的整数列(natch,为什么不成为PK?)
- 这些表已迁移到MySQL的InnoDB表类型,但访问关系并未成为MySQL外键约束。
使用数据库后,我可以期待其他问题吗?特别是当两个用户都在同一个表中工作时?
解决方案
回答
我知道这不能直接回答问题,但是值得一试用于Access的SQL Server 2005迁移工具。我从未使用过该工具,但可能值得与SQL Server 2005 Express Edition一起使用,以查看是否存在与MySQL相同的问题
回答
如果只有两个用户,那么如果将.mdb放在共享驱动器上,Access应该可以正常工作。
我们是否首先尝试过它,而不只是认为这将是一个问题。
我认为Access的建议最大并发用户数为5,但有时我将其超过此限制,并且永远不会卡住。
另一方面,我曾经在单一用户环境(me)中使用Access作为MySQL的前端。这是一次令人不愉快的体验,我无法想象两个用户会变得更好。
回答
一般来说,这取决于:)
当应用程序端刚刚通过表单更新数据时,我没有很多问题。当同一行被多个用户更新时,我们会收到警告/错误;但是Access似乎一直在不断更新其实时记录集。
如果Alice已经在使用记录365,并且Bob更新了它,然后Alice尝试使用其更改来更新它,则可能会发生问题。我记得,爱丽丝会收到一条神秘的错误消息。如果我们捕获这些错误并至少给他们一个友好的错误消息,对用户来说会更容易。
当我通过RecordSet编辑VB代码中的记录时,我遇到了更多的问题,尤其是与在窗体上编辑相同的数据结合使用时。那不一定是一个多用户问题。但是,我们遇到的情况几乎相同,因为我们有一个用户具有对同一数据的多个连接。
回答
我有一个应用程序也是如此:一个MS Access前端到一个MySQL后端。实在太痛苦了,我最终写了Win32前端。从头顶上,我遇到了以下问题:
- ODBC链接的开发似乎已经很久以前就停止了。有各种各样的不同版本---非常令人困惑。 ODBC链接不支持Unicode / UTF8,我还记得它还有其他问题(尽管通过谨慎配置可以解决一些问题)。
- 我们可能需要手动调整数据库架构,使其与MS Access兼容。我看到我们已经找到了所需的代理键(即int主键):-)
- 我们应该记住,我们可能需要使用传递查询来对MySQL数据库进行更复杂的SQL操作。
- 使用大量的VBA时要小心,因为这会损坏前端文件。定期压缩数据库(使用主菜单,工具|数据库实用程序|压缩和还原,或者类似的方式---我使用的是荷兰语版本),并且需要进行大量备份。
- 访问往往会导致大量的网络流量。喜欢,真的很多。我还没有找到解决方案。如果我们要注意这一点,建议使用网络监视器!
- Access坚持将布尔值存储为0 / -1. 恕我直言,0 / + 1更有意义,我相信它也是MySQL中的默认处理方式。这不是一个大问题,但是如果复选框不起作用,则一定要选中此复选框。
一种可能的选择是将后端(带有数据)放置在共享驱动器上。我记得在帮助中也对此进行了详细记录。我们可能需要查看有关拆分为前端和后端的一些一般建议,以及在启动时自动重新连接到后端的代码。我还可以向我们发送更多示例代码,或者在此处发布。
否则,我们可能还需要考虑MS SQL。我没有这方面的经验,但我想它可以与MS Access更好地结合使用!
回答
Gareth Simpson认为:
If it's only two users, then Access should do just fine if you put the .mdb on a shared drive.
呃没有。没有每个用户都不应拥有专用前端副本的多用户访问应用程序。这意味着每个用户的工作站上都应该有一个MDB。为什么?因为前端的对象共享不佳(与Jet数据表的共享程度不尽相同,尽管在这种情况下没有使用MySQL作为后端的对象)。
Gareth Simpson继续:
I believe the recommended max concurrent users for Access is 5 but on occasion I've pushed it past this and never come unstuck.
不,这是完全不正确的。 MDB用户的理论上的限制是255. 这是不现实的,因为一旦达到大约20个用户,就必须仔细编程Access应用程序以使其正常工作(尽管我们需要在Access-to-to- Jet app与提高任何服务器数据库应用程序的效率(例如,检索最小的可用数据集)的方式相同。
在这种情况下,由于每个用户都应该拥有前端MDB的单独副本,因此根本就不存在Access / Jet的多用户限制。
回答
不要忘了在每个记录上贴一些类型的时间/日期戳。有时,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,重要的是要了解此工具-这是相同的规则,就像此处使用的任何其他技术一样。
我可以告诉你,我在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解决方案?也许是台式机Capplication,我们可以要求!)。
我希望我能帮助一些考虑使用MS Access的人。
问候,
Wawrzyn
http://dcserwis.pl