MS Access 查询设计在与 SQL Server 的连接上挂起

Posted

技术标签:

【中文标题】MS Access 查询设计在与 SQL Server 的连接上挂起【英文标题】:MS Access query design hangs on connection to SQL Server 【发布时间】:2008-10-14 21:38:05 【问题描述】:

Microsoft Access 是一种访问 MS SQL Server 后端数据库中数据的巧妙方法,但我在访问(可以这么说)大型数据表时总是遇到问题,尤其是在 Access 中尝试在结果和设计模式之间切换时.

Access 为我提供了许多漂亮的东西,其中最重要的是 Crosstabs,但这种与服务器的挂起连接让我有点抓狂!

是否有任何 MS Access 专家知道如何优化 ODBC 连接,以便在我只想调整和构建查询时它不会执行看起来像是全表扫描的操作?

【问题讨论】:

【参考方案1】:

ODBC 驱动程序会将尽可能多的工作传递给 SQL Server,但是一旦您使用像 Nz 这样的 vba 函数或像 PIVOT 这样的非 SQL Server 语法,那么 ODBC 驱动程序必须拉回更多数据和索引才能完成工作在客户端完成。

根据其他答案,要么在 SQL Server 中构建视图并链接到视图,要么使用 Access Data Project。

注意:在 SQL Server 中无法以与 Access 本机执行此操作相同的方式处理具有未知列数的 PIVOT 查询 - 因此,如果您在 Access 中针对 SQL Server 数据运行数据透视,您可能会拉回整个表。必须使用动态 SQL 技术在 SQL Server 中构建透视查询,或者使用硬编码所有列的预保存视图。查看此链接了解执行此操作的一种方法:

http://www.sqlservercentral.com/articles/Advanced+Querying/pivottableformicrosoftsqlserver/2434/

【讨论】:

【参考方案2】:

正如其他人所说,提高大型表性能的唯一方法是让 SQL Server 数据库引擎为您完成工作。一种尚未提及的方法是使用传递查询,这将使您能够将所有代码保留在 MS Access 中,而无需在 SQL Server 上创建对象:

http://support.microsoft.com/kb/303968

您将不得不编写 SQL Server T-SQL 而不是 Access 方言;但是,SQL 2005(在兼容模式 90 下运行时)确实支持 PIVOT 命令。

【讨论】:

【参考方案3】:

我的类似问题是选择链接表/ODBC 连接后 ORACLE ODBC 连接挂起。任务管理器说十分钟后没有响应。然后连接对所有可用表 ping ORACLE。我在 ORACLE ODBC 管理器上打开了日志记录,所以它必须将所有这些内容写入日志,这可能会使任何结果减慢几个小时。一小时后日志为 60 MB,当我将其关闭时,一切正常!

要关闭它,请转到 Oracle 安装/网络管理/MS ODBC 管理员/跟踪选项卡并将其关闭!

这里有一个关于 ODBC 的好资源:http://eis.bris.ac.uk/~ccmjs/odbc_section.html

【讨论】:

【参考方案4】:

不幸的是,Access 无法将大量工作推送到服务器,是的,当针对 SQL Server 中的多个表或视图设计查询时,它会进行大量表扫描。

您可以使用 SSMS 在 SQL Server 中构建和调整查询(视图),并将视图存储在 SQL Server 中以大幅提升性能,同时仍将 Access 用于您的前端。

【讨论】:

不一定。 Jet 非常聪明(在您的 SQL Server 上打开跟踪并观察 Jet 实际发送到 SQL Server 的内容),如果您的 SQL Server 表上有正确的索引并且没有任何 WHERE 子句中的表达式,它应该将其全部发送到服务器进行处理。

以上是关于MS Access 查询设计在与 SQL Server 的连接上挂起的主要内容,如果未能解决你的问题,请参考以下文章

VBA 代码中的 MS Access SQL 查询

编辑器中的 ms-access VBA 长 sql 查询字符串行拆分(内联双引号)

MS Access SQL 参数太少。预计 4

返回基于多个条件 SQL、MS Access 的非不同行

SQL 查询和 MS Access 查询返回不同的数据

MS Access 2007 SQL 查询出现问题