我已经创建了一个MS Access2003年应用程序,设立一个分裂的前端/后端配置、用户组的有关五人。前端。mdb坐在一个网络文件服务器,以及它包含了所有的查询的形式、报告和载>>>情绪,再加上链接到中的所有表后结束。mdb和一些链接的数据来源,如AS/400中。后端坐在同一网络上的文件服务器,它只是具有表中的数据。

这个工作很顺利,直到我走出去"活"和我的少数用户的开始带来增强要求,错误报告,等等。我已经推出了新的编码,通过开发和试验在我自己的副本前结束。mdb在另一个网文件夹(这是与同一个后结束。mdb),然后张贴完成我的文件在"过来和get-it"文件夹,提醒用户,他们去复制、粘贴的新的前端,文件以各自的文件夹上的网络。这种方式,每个用户可以更新他们的前端时,他们在'停止点',而无需启动的每个人都在一次。

我已经发现,当我发现,有时候访问变得极为缓慢。就像,当我发展的一种形式,并试图击落下来在"属性"框中,下拉箭头将推动在,但是它将需要几秒钟之前该名单的选择出现。或存量滞后,在选择与运动控制的一种形式。或大量的键盘滞后。

然后,在其他时间,有没有滞后。

我想知道如果这是因为我联系到同样的回端为其他用户。我有没有做出合理的努力设置查询的形式、报告等。用最小的记录锁定,如果任何在所有,这取决于所需要的。但我可能已经错过了一些东西,或也许还有其他一些性能的问题,我需要地址。

但我想知道如果有一个更好的办法,我设定了我自己的发展的后结束。mdb,所以我可以试验我的代码的"安全"的数据而不是相同的实时数据作为其他用户。我恐怕这只是时间问题之前,我损坏的一些数据,可能在最糟糕的时刻。

显然,我可以设立一个单独的后结束。mdb和手工重新配置表的链接,前端时,采用链接表管理。但我希望有一个更优雅的解决方案。

我想知道是否有任何其他性能的问题,我应当考虑到在这个多用户,分数据库的配置。

编辑:我应该加入我卡住MS Access(不MS SQL或任何其他的"真正的"后端);欲了解更多详情,请参阅我的发言到这个职位。

有帮助吗?

解决方案

如果您的所有用户都共享前端,那就是错误的配置。

每个用户都应该有一个单独的前端副本。共享前端肯定会导致共享前端频繁损坏,以及前端表单和模块的奇怪损坏。

我不清楚如何在最终用户正在使用的前端副本中进行开发,因为从 A2000 开始,这是被禁止的(因为“整体保存模型”,其中存储了整个 VBA 项目)在系统表之一的单个记录的单个 BLOB 字段中)。

我真的不认为问题是由使用生产数据引起的(尽管正如其他人所说,针对生产数据进行开发可能不是一个好主意)。我认为它们是由糟糕的编码实践和前端代码缺乏维护造成的。

  1. 在 VBE 选项中关闭 COMPILE ON DEMAND。

  2. 确保您需要 OPTION EXPLICIT。

  3. 每隔几行代码后经常编译您的代码 - 为了使这变得简单,请将 COMPILE 按钮添加到您的 VBE 工具栏(当我这样做时,我还添加了 CALL STACK 按钮)。

  4. 定期备份前端并反编译和重新编译代码。这是通过使用 /decompile 开关启动 Access,打开前端,关闭 Access,使用 Access 打开前端(按住 SHIFT 键以绕过启动代码),然后压缩反编译的前端(使用 SHIFT按住键),然后编译整个项目并最后一次压缩。您应该在任何主要代码发布之前执行此操作。

其他一些想法:

  1. 你没有说它是否是Windows服务器。通过 SAMBA 访问的 Linux 服务器过去曾出现过问题(尽管有些人坚信它们并说它们比 Windows 服务器快得多),并且历史上 Novell 服务器需要调整设置才能可靠地编辑 Jet 文件。还有一些设置(如 OPLOCKS)可以在 Windows 服务器上进行调整,以使工作更好。

  2. 将 Jet MDB 存储在具有短路径的共享中。\Server\Data\MyProject\MyReallyLongFolderName\Access\Databases\ 读取数据的速度比 \Server\Databases 慢得多。这确实有很大的不同。

  3. 链接表存储可能会过时的元数据。有两个简单的步骤和一个激烈的步骤来解决这个问题。首先压实后端,然后压实前端。这是最简单的一个。如果这没有帮助,请完全删除链接并从头开始重新创建它们。

  4. 您还可以考虑将 MDE 而不是 MDB 分发给最终用户,因为它无法反编译(MDB 可以)。

  5. 托尼·托斯 (Tony Toews) 的表现常见问题解答 了解其他一般性能信息。

其他提示

1)重新链接的访问表代码 http://www.mvps.org/access/tables/tbl0009.htm

一旦我准备发布一个新的MDE的用户我重新链接表,使MDE和复制MDE的服务器。

2)我专门创建了免费的自动FE更新的实用工具,这样我可以修改FE MDE经常因为我想要的是完全相信,下一次有人去运行的应用程序,它将在最新版本。更多信息的错误或自动FE更新程序的实用看到免费的汽车FE更新程序的实用在 http://www.granite.ab.ca/access/autofe.htm 在我的网站保持FE在每个电脑更新。

3)现在,在工作上站在我的客户做出更新的表格结构小时后,当每个人都出来的系统。看看如何:检测用户的空闲时间或活动在2000年访问(Q210297) http://support.microsoft.com/?kbid=210297 行政协调会:如何检测用户的空闲时间或活动(Q128814) http://support.microsoft.com/?kbid=128814

然而,我们发现,该代码上运行的计时器活动必须被禁止用于的程序员。另有奇怪的事情开始发生时正在编辑的代码。

还打印预览会有时不允许的用户运行一个单项目的出口的报告以Excel或其他人。所以你不得不正确的点击的预览报告,以获得某些类型的内部注重回报告,以便他们可以再出口。这也是帮助通过延时器到五分钟。

不好的一面的延伸计时五分钟,如果一个人留在了相同的形式并在相同的控制相当部分的一天,即个人做同样的查询,则程序并没有意识到,他们实际上已经做了一些东西。我会把在一些逻辑的某个时候重置计时器,只要他们做的东西中的程序。

4)在参照另一个人评论有关脚本,这样的更新的架构,请参阅比较'Em http://home.gci.net/~mike-noel/CompareEM-LITE/CompareEM.htm.虽然它有其怪癖,它并创建的载>>>情绪更新表、索引和关系。

使用VBA取消链接,并从开发转向督促当你的表重新链接到新的目标。它已经多年,我记得的语法 - 我只知道函数是简单的写

或者使用MS-接入交谈通过ODBC一种生活客户端MDB以外某些其他数据连接MS-Access或

与所有文件基础数据库,你最终会碰到与使用高峰的问题,或当你走在一个小魔力的数字某处2和30之间。

此外,访问导致腐败频繁,所以备份,压缩和修复需要进行频繁的基础上进行。使用第三方工具存在自动完成这一任务。

至于性能也越高,数据正在处理客户端,所以你可能想使用类似netmeter看多少数据通过线路。关于索引和避免表扫描相同的原理适用于文件基础DBS以及

其他人的许多好建议。这是我的2毫分的价值。我的后端数据位于通过驱动器映射访问的服务器上。就我而言,是 Y 驱动器。生产用户使用活动目录通过登录脚本获取映射。然后通过批处理文件可以轻松完成以下场景:

  • 通过在批处理文件中执行 subst 命令来针对本地计算机进行开发
  • 通过将 Y 指向备份服务器(只读)来运行针对昨晚数据的报告
  • 通过指向正确的目录来针对月末数据运行报告
  • 通过保留特殊目录来测试特殊场景

在我的环境中(平均有 5 个并发用户,1000 行,而不是 10,000 行。)已发生损坏,但这种情况很少见且易于管理。在过去的几年里,我们只使用过一次前几天的备份。我们使用 SQL Server 来处理更高容量的内容,但开发起来不太方便,可能是因为我们现场没有 SQL 管理员。

您也可以找到一些答案来的这个问题(如何提取从接入模式)是有用的。一旦你使用提取的,共有建议你获得新的选择了一整套喜欢用的架构源控制,以及能够很容易地建立“干净”的测试环境的能力的一种技术架构。

修改响应评价: 有没有简单的方法来控制源Access数据库在它的原生格式,但方案文件只是文本文件,就像任何其他。因此,你可以检查并排出你的选择,便于版本控制/回滚的源代码控制软件。

或者当然,这依赖于你有一系列的设置来重新建立自己的数据库,从架构脚本。一旦你这样做,它通常相当琐碎创建重建它在不同的位置,让您从架构的任何先前提交的版本搭建测试环境下的选择/替代版本。我希望澄清一点!

如果你想,当你发布一个新的FE的客户端自动更新后端MDB架构,然后看到Compare'Em的 http://home.gci.net/~mike-noel/CompareEM-LITE/CompareEM.htm 将愉快地生成VBA代码需要重新创建一个MDB 。或代码来创建两个MDB之间的差异,所以你可以做的已经存在的BE MDB的版本升级。这是一个有点古怪,但工作。

我使用它所有的时间。

您要明白,对于该数据的共享mdb文件是不是一个健壮的解决方案。微软会建议SQL Server或其他一些基于服务器的数据库将是一个更好的解决方案,将允许您使用相同的访问前端。迁移向导将帮助您做出切换,如果你想要去的方式。

作为另一用途所指出的,会发生损坏。这只不过是一个问题的频率,如果不

要了解你需要了解的是服务器与它的数据mdb文件是简单的,文件中的性能问题。由于没有代码在服务器上运行,服务器不明白交易记录锁定等它只是知道有这一群人正试图读取并同时放写入文件。

通过一个数据库系统,例如SQL服务器,Oracle,DB2。 MySQL的等数据库程序的服务器上运行,看起来像一个单一的程序访问数据库文件的服务器。这是处理记录锁定,事务,并发性,日志记录,数据备份/恢复和所有其他的好东西之一,从数据库想要的数据库程序(运行在服务器上)。

由于设计为在服务器上运行一个数据库程序被设计为做到这一点,不仅如此,它可以做到远远更好和更efficently像访问一个程序读取写入的共享文件(MDB)。

针对实时数据进行开发有两个规则

第一条规则是。。。从不开发 针对实时数据。永远不会。

第二条规则是。。.从不开发 针对实时数据。永远不会。

您可以通过编程方式更改链接表的绑定,以便在部署新版本时编写宏来更改链接。

该应用程序速度很慢,因为它是 MS Access,并且不喜欢许多并发用户(其中​​“许多”是大于 1 的任何数字)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top