链接到 SQL 服务器时,什么会导致 MS Access 中的报告速度变慢?

What could cause a slowdown of reports in MS Access when linking to an SQL Server?

我正在将 Access 应用程序的表从 Access 文件移动到 SQL 服务器。原始应用程序有一个前端文件,它链接到一个数据文件。数据文件位于网络驱动器上。我现在使用 ODBC 连接将前端文件链接到 SQL 服务器。

所有表格似乎都有效。但是,有两个报告非常缓慢。在旧配置中,报告会在几秒钟内加载完毕。

但是,在新版本中,它们可能需要几分钟时间。这些报告由多个子报告组成,这些子报告具有自己的数据集以及主报告的数据集。我已经检查了每个查询并对其进行了调整,以便每个查询到 运行 所需的时间不到一秒钟。但是,当我尝试 运行 整体报告时,我仍然有延迟。

我经常使用链接表。然而,访问端的报告对我来说是相当新鲜的。与链接文件相比,链接表的报告速度是否有任何原因?关于报告中的子报告是否有可能加快加载时间的良好做法?

这种情况经常发生。原因当然是当使用带有 JET/ACE(文件后端)的 Access 时,应用程序可以就如何连接数据做出“更好”的选择。

当您使用 SQL 服务器时,Access 会将主报表和子报表视为来自不同数据源的单独表格。因此,Access 通常在将数据连接在一起方面做得很差。并且考虑到报告经常多次重新查询和重新加载部分数据(比人们希望的次数多),然后 Access 从 SQL 服务器中提取数据的方式的缺点才真正显现出来。 (Access 很难将父表连接到支持报告中的子表)。

最简单(也是最少的更改)是将用于主报告(和子报告)的查询更改为 sql 服务器上的视图。然后,您 link 从 Access 访问这些视图(它们在 Access 中显示为标准表)。然后,您将主报告基于此视图(而不是查询)。并对子报告执行相同的操作。这种方法不是最好的,但它应该可以显着改进,特别是如果主报表是连接多个表的查询,并且子报表也基于基于多个表的查询。

以上是最少的工作量,此后报表上使用的过滤器和 where 子句等应继续运行,而无需更改您的前端应用程序。