Dav*_*cks 7 testing ms-access multi-user
我创建了一个MS Access 2003应用程序,设置为拆分前端/后端配置,用户组大约有五个人.前端.mdb位于网络文件服务器上,它包含所有查询,表单,报告和VBA代码,以及指向后端.mdb中所有表的链接以及一些指向ODBC数据源的链接,如AS/400.后端位于同一网络文件服务器上,它只包含表数据.
这一点运行良好,直到我"上线",我的少数用户开始提出增强请求,错误报告等.我已经通过在我自己的前端.mdb副本中开发/测试来推出新代码另一个网络文件夹(链接到同一个后端.mdb),然后将我完成的文件发布到"come-and-get-it"文件夹中,提醒用户,然后他们复制/粘贴新的前端将文件归档到网络上的自己的文件夹中.这样,每个用户都可以在他们处于"停止点"时更新他们的前端,而无需立即启动所有人.
我发现,当我正在开发时,有时Access变得极其缓慢.就像,当我开发一个表单并尝试单击属性框上的下拉列表时,下拉箭头将会推入,但是在选项列表出现之前需要几秒钟.或者在表单上选择和移动控件时存在大量延迟.或许多键盘滞后.
然后,在其他时候,根本没有滞后.
我想知道是不是因为我与其他用户链接到同一个后端.我确实做了一些合理的努力来设置查询,表单,报告等,最小的记录锁定,如果有的话,根据需要.但我可能错过了一些东西,或者可能还有一些我需要解决的性能问题.
但我想知道是否有更好的方法来设置我自己的开发后端.mdb,所以我可以在"安全"数据上测试我的代码而不是与其他用户相同的实时数据.我担心损坏一些数据只是时间问题,可能是在最糟糕的时刻.
显然,我可以设置一个单独的后端.mdb,并使用链接表管理器每次手动重新配置前端的表链接.但我希望有一个更优雅的解决方案.
我想知道在这个多用户拆分数据库配置中是否还有其他性能问题需要考虑.
编辑:我应该补充说,我坚持使用MS Access(不是MS-SQL或任何其他"真正的"后端); 有关详细信息,请参阅我对此帖的评论.
Dav*_*ton 12
如果您的所有用户都在共享前端,那就是错误的配置.
每个用户都应该拥有前端的单独副本.保证共享前端会导致共享前端频繁损坏,以及前端表单和模块的奇怪损坏.
我不清楚你是如何在最终用户正在使用的前端的同一副本中开发的,因为从A2000开始,这是禁止的(因为"整体存储模型",整个VBA项目存储在那里)在一个系统表中的单个记录中的单个BLOB字段中).
我真的不认为这些问题是由使用生产数据造成的(尽管根据其他人的说法开发生产数据可能不是一个好主意).我认为它们是由于编码实践不良以及前端代码缺乏维护造成的.
在VBE选项中关闭COMPILE ON DEMAND.
确保你需要OPTION EXPLICIT.
在每几行代码之后经常编译代码 - 为了方便起见,将COMPILE按钮添加到VBE工具栏(当我在它时,我还添加了CALL STACK按钮).
定期备份前端并反编译并重新编译代码.这是通过使用/ decompile开关启动Access,打开前端,关闭Access,使用Access打开前端(按住SHIFT键以绕过启动代码),然后压缩反编译的前端(使用SHIFT)来实现的.按键),然后编译整个项目并最后一次压缩.您应该在任何主要代码发布之前执行此操作.
其他一些想法:
你不说它是不是Windows服务器.通过SAMBA访问的Linux服务器过去曾遇到过问题(尽管有些人发誓说它们比Windows服务器快得多),而且历史上Novell服务器需要调整设置以使Jet文件可靠地编辑.还有一些设置(如OPLOCKS)可以在Windows服务器上进行调整,以使工作更好.
将Jet MDB存储在具有短路径的共享中.\ Server\Data\MyProject\MyReallyLongFolderName\Access\Databases \读取数据要比\ Server\Databases慢得多.这确实产生了巨大的差异.
链接表存储可能过时的元数据.有两个简单的步骤和一个急剧的步骤来解决它.首先,压紧后端,然后压紧前端.这很简单.如果这没有帮助,请完全删除链接并从头开始重新创建它们.
您也可以考虑将MDE分发给最终用户而不是MDB,因为它无法解压缩(MDB可以).
有关其他广义性能信息,请参阅Tony Toews的性能常见问题解答.